[C++][OpenGL][Glut] - Verständnisproblem

Andy89

Lieutnant
Mitglied seit
20.11.2005
Beiträge
81
Renomée
0
Guten Abend liebe P3Dnow Gemeinde,

wir beschäftigen uns im Studium derzeit mit OpenGL und Glut. Derzeit sind wir noch ziemlich bei den Anfängen was das ganze angeht aber mir macht es zumindest tierisch Spaß

Kurz zu unserer aktuellen "Übungsstunde" wir führen erste OpenGL primitiven ein (GL_QUADS und GL_TRIANGLE_STRIP) weiterhin wird die GL_MODELVIEW Matrix verwendet.

Mein Verständnis Problem ist derzeit das ich nicht verstehe in welcher Relation die unten aufgeführten "Eckpunkte" stehen. Normalerweise benötige ich doch pro Quadrat 4 * 3 Punkte (X,Y,Z) wir haben hier aber "nur" 6 * 4 Eckpunkte welche den Würfel definieren.




Die vertices des Würfel
Code:
// Würfel mit 6 Seiten definieren (pro Seite 4 Eckpunkte)
GLfloat vertices1[] =	
{
		1.0, 1.0, -1.0, 0.0,
		1.0, -1.0, 0.0, 0.0,
		-1.0, 1.0, 0.0, -1.0,
		1.0, 1.0, 0.0, 0.0,
		1.0, 0.0, 0.0, 0.0,
		0.0, 1.0, 0.0, 0.0
};

Farbe für den Würfel
Code:
// Farbe für Würfel definieren pro Seite R G B
GLfloat farbe1[] = 
{	
		1.0f, 0.0f, 0.0f,
		0.0f, 1.0f, 0.0f, 
		0.0f, 0.0f, 1.0f,
		1.0f, 0.5f, 0.5f, 
		0.5f, 1.0f, 0.5f, 
		0.5f, 0.5f, 1.0f 
};

Die indices des Würfel
Code:
GLint indices1[] = 
{
		4,5,6,7, 
		1,2,6,5, 
		0,1,5,4, 
		0,3,2,1,
		0,4,7,3, 
		2,3,7,6
};

Der Würfel Zeichen Code
Code:
glEnableClientState(GL_VERTEX_ARRAY);
glEnableClientState(GL_COLOR_ARRAY);
glVertexPointer(3,GL_FLOAT,0,vertices1);
glColorPointer(3,GL_FLOAT,0,farbe1);
glDrawElements(GL_QUADS, 24, GL_UNSIGNED_INT, indices1);
glDisableClientState(GL_VERTEX_ARRAY);
glDisableClientState(GL_COLOR_ARRAY);

Ich hoffe diese snippets reichen aus um meine Frage zu verstehen :)
Wäre die Veranstaltung nicht ausgefallen hätte ich bereits bei meinem Prof. nachgefragt :D per Internet Recherche finde ich nur Beispiele bei denen XYZ - Koordinaten verwendet wurden aber diese ... Eckpunkte verwirren mich ziemlich - Ich hoffe dies kann man einem Anfänger in verzeihen :-*

Vielen dank im Voraus
Andy89
 
Mal langsam vom Ende zum Anfang denken.

Code:
glVertexPointer(3,GL_FLOAT,0,vertices1);

Du gibst hier vor, dass du je Knoten 3 Koordinaten in vertices1 angibst.

Daher solltest du vielleicht das Array umschreiben, um es besser zu lesen:
Code:
GLfloat vertices1[] =	
{
		1.0, 1.0, -1.0,
                0.0, 1.0, -1.0,
                0.0, 0.0, -1.0,
                1.0, 0.0, -1.0,
                1.0, 1.0,  0.0,
                0.0, 1.0,  0.0,
                0.0, 0.0,  0.0,
                1.0, 0.0,  0.0
};
Dann siehst du auch, dass die 4 ersten Koordinaten ein Quadrat ( v4,v7,v2,v3 nach http://www.songho.ca/opengl/gl_vertexarray.html ) beschreiben.

Versuch dann noch mal genau heraus zu bekommen was deine glDrawElements(GL_QUADS, 24, GL_UNSIGNED_INT, indices1); macht und du wirst sehen wie es klappt.
 
Hi flybyray,

ich hab mit den Werten herumgespielt und iwan ist mir aufgefallen das ich vllt mal die Formatierung ändern sollte. Am ende kam genau das raus was du geschrieben hast -.-
War der Meinung, dass ich die Quadrate oben und unten sowie an den seiten ebenfalls definieren muss deswegen kam ich nicht auf den trichter das hier ja bereits X,Y,Z Werte stehen.

In näherer Betrachtung macht es dann auch sinn (siehe 4* -1.0 und 4* 0.0) Ich erzeuge also ein Quadrat bei Z = 0.0 und eines bei Z = -1.0) anschließend wird mit der Kanten liste ("indices1") der Würfel aufgebaut.

Im nachhinein könnt ich mir an den Kopf schlagen das ich es nicht gleich gesehen habe .... *glaubses*

Trotzdem vielen Dank für deine Hilfe. *great*

@Mod Topic kann geschlossen werden

Gruß And89
 
Zurück
Oben Unten