Hi,
Ich habe grade einige Probleme beim umstellen meines Programms vom uralten glBegin/End rendern auf Vertexarrays (VBOs wären in meinem Fall erstmal nicht schneller denke ich). hier mal meinen Code:
|
C-/C++-Quelltext
|
1
2
3
4
5
6
7
8
9
10
11
|
glEnableClientState(GL_VERTEX_ARRAY);
glVertexPointer(4, GL_DOUBLE, sizeof(Vertex), &(vertexArray[0].pos[0]));
glNormalPointer(GL_DOUBLE, sizeof(Vertex), &(vertexArray[0].normal[0]));
//glIndexPointer(GL_UNSIGNED_INT, 0, &(faceArray[0].i1));
glTexCoordPointer(2, GL_FLOAT, sizeof(Vertex), &vertexArray[0].textureX);
//glDrawArrays(GL_TRIANGLES, 0, vertexArray.size());
glDrawElements( GL_TRIANGLES, faceArray.size()*3, GL_UNSIGNED_INT, &(faceArray[0].i1));
glDisableClientState(GL_VERTEX_ARRAY);
|
Ich verstehe nicht so ganz den unterschied zwischen drawArrays und drawElements, außer, dass man Elements, direkt die indizes übergibt...
Zum aufbau meines proramms: Face ist einfach ein struct mit 3 ints für die vertices, Vertex hat zwei Vec4 pos und normal und 2 floats textureX/Y, Vec4 wiederum ein double[4] array...
so wie es jetzt oben steht rendert er die objekte soweit vollständig, allerdings komplett einfarbig... d.h. weder normalen noch texturkoordinaten scheinen richtig zu sein. Wenn ich das ganze mit DrawArrays versuche, kommt ziemlicher blödsinn bei raus.
|
C-/C++-Quelltext
|
1
|
glDrawArrays(GL_TRIANGLES, 0, vertexArray.size());
|
render ein paar faces, allerdings nicht richtig verknüpft, d.h. es kommen auch faces bei raus, die es eigentlich garnicht gibt. (man beachte vertexArray.size(), obwohl ja eigentlich die anzahl der indizes angegeben werden soll)
|
C-/C++-Quelltext
|
1
|
glDrawArrays(GL_TRIANGLES, 0, faceArray.size()*3);
|
das hier mit der anzahl der indizes rendert kompletten schwachsinn, sogar zu vertices die es garnicht gibt...
Danke schonmal fürs lesen und hoffe ihr könnt mir helfen