Seite 1 von 1

[verschoben] zeichnen mit opengl

Verfasst: 19. Juli 2010 14:40
von sudo rm -rf
Hallo, kann mir jemand verraten,weshlb zum geier mir diese Funktion nichts zeichnet? eigentlich sollte ein dreieck gezeichnet werden. mit einer anderen funktion klappt es... es liegt also definitiv an dieser fkt.
hängt es mit meinen const float koordinaten zusammen?

Code: Alles auswählen

void opengl::draw_object(float x, float y, float z)
{
	const float A[3] = {x-0.50000000, y+0.00000000, z+0.86602540};
	const float B[3] = {x+0.50000000, y+0.00000000, z+0.86602540};
	const float C[3] = {x+0.86602540, y+0.00000000, z+0.50000000};
	const float D[3] = {x+0.00000000, y+0.00000000, z-1.00000000};
	const float E[3] = {x-0.86602540, y+0.00000000, z-0.50000000};

	const float F[3] = {x-0.86602540, y+1.93185165, z+0.50000000};
	const float G[3] = {x+0.00000000, y+1.93185165, z+1.00000000};
	const float H[3] = {x+0.86602540, y+1.93185165, z+0.50000000};
	const float I[3] = {x+0.50000000, y+1.93185165, z-0.86602540};
	const float J[3] = {x-0.50000000, y+1.93185165, z-0.86602540};

	glBegin(GL_TRIANGLES);
	glColor3f(128.0/255.0, 128.0/255.0, 255.0/255.0);

	glVertex3f(A[0], A[1], A[2]);
	glVertex3f(G[0], G[1], G[2]);
	glVertex3f(B[0], B[1], B[2]);

	glEnd();
}

Verfasst: 20. Juli 2010 19:00
von solarix
Zum "Fehler":
gezeichnet wird sicher etwas. Warum du das nicht siehst, können wir aus folgenden Gründen nicht herausfinden:
* Der OpenGL-Mode ist unbekannt
* Die aktuelle Matrize (Kameraposition und -Richtung, Transformationen usw.) ist unbekannt
* Clipping ist unbekannt
* OpenGL-Properties sind unbekannt (Texturen en-/disabled usw.)

Daher:
* mit qDebug() immer schön Koordinaten und Farben validieren
* reduzieren bis Fehler gefunden.

Zum Code:
* "opengl" ist ein schlechter Klassenbezeichner
* Die Strategie "Koordinaten umrechnen" ist eine schlechte Variante um Objekte an [x,y,z] zu zeichnen. Besser ist "Translate + Zeichnen um Nullpunkt".

BTW: "definitiv" wird definitiv häufig zu voreilig geschrieben...

Verfasst: 21. Juli 2010 22:16
von N¤X
Da stimme ich solarix voll und ganz zu.

Ansonsten würde ich auf den ersten Blick einfach mal sagen, dass du dein Dreieck clockwise zeichnest, und sich das (Transformationen mal Außen vor gelassen) nicht so mit eventuell aktiviertem Backface-Culling verträgt. Versuch mal ABG statt AGB.

Übrigens kannst du deine Arrays auch direkt nutzen, mit glVertex3fv(A) statt glVertex3f(A[0], A[1], A[2]) ;)