glVertexPointer stride problem
-
tach,
mein problem ist das ich mit dem glVertexPointer-stride nicht zurecht komme.
// vereinfachte vectorklasse class CVector { public: CVector() : x(0.0f), y(0.0f), z(0.0f), w(0.0f) { } CVector(float _x, float _y, float _z) : x(_x), y(_y), z(_z), w(0.0f) { } virtual ~CVector() { } protected: union { struct { float x, y, z, w; }; float m_fVector[4]; }; }; // rendern // .. // m_pVertices ist vom typ CVector glEnableClientState(GL_VERTEX_ARRAY); glVertexPointer(3, GL_FLOAT, sizeof(CVector), &m_pVertices[0]); glDrawArrays(GL_POLYGON, 0, m_nNumVertices);
mein problem ist es wird nichts gerendert. auch nicht mit glDrawElements(..)
wenn ich die punkte allerdings einzeln aufrufe geht es.// bsp: glBegin(GL_POLYGON); for(unsigned int t = 0; t < m_nNumVertices(); ++t) { glVertex3fv(m_pVertices[t].GetGLVector()); } glEnd();
bräuchte tipps zur fehlersuche.
-
Wenn die Vektoren in ein Array gepackt sind und keine Leerräume aufweisen dann ist Stride = 0
cya
liquid
-
vectoren sind in einem array ohne zwischenräume.
stride == 0 bezieht sich sich doch nur auf ein float array ?!? oder nicht ?
allerdings wenn ich null eingebe kommt eine total wirre geometrie raus.
-
Guck doch einfach im Red/Blue Book nach.
cya
liquid
-
Sollten normalerweise Vertex Arrays nicht C-Arrays sein?
-
Wär das nicht ein bissl dumm, was macht man denn dann in Delphi o.ä.?
Bye, TGGC \-/
-
imho müsste stride = 4 sein - wegen der nicht benutzten w Komponente (float = 4 Byte).
aber zeig doch mal deine komplette _datenstruktur_ deiner Klasse CVector, wenn sie dein erstes Post noch nicht vollständig zeigt.
-
illuminator schrieb:
imho müsste stride = 4 sein - wegen der nicht benutzten w Komponente (float = 4 Byte).
aber zeig doch mal deine komplette _datenstruktur_ deiner Klasse CVector, wenn sie dein erstes Post noch nicht vollständig zeigt.ist die komplette datenstruktur, das seltsame ist das sizeof(CVector) 20 ist und ich das überhaupt nicht nachvollziehen kann. müsste es nicht 32 sein ?!?