PDA

Archiv verlassen und diese Seite im Standarddesign anzeigen : glNormalPointer Prob


Capt'N Coax
2003-10-23, 19:58:50
Oi!

Ich habe hier ein kleines Problemchen, dürfte eigentlich schnell zu beheben sein, kanns aber auf die schnelle nicht testen, bzw. will nicht extra n Testprogramm schreiben.

Folgendes:

glEnableClientState (GL_VERTEX_ARRAY);
glEnableClientState (GL_TEXTURE_COORD_ARRAY);
glEnableClientState (GL_NORMAL_ARRAY);
glVertexPointer(3, GL_FLOAT, 0, m_p_vArray1);
glTexCoordPointer(2,GL_FLOAT,0,m_p_vArray2);
glNormalPointer(GL_FLOAT, 0, m_p_vArray3);
...
glDrawArrays(GL_TRIANGLES,0,1187);

Er zeichnet das Objekt, Vertices sind in Ordnung.
Tex-Koords funzen anscheinend auch.
Nur die Normalz will er nicht. Ich bin mir aber auch nicht sicher WIE die Dinger im Array stehen müssen. Ich habe NUR Vertex normals, also 3 Float- Angaben pro Vertex. Muss ich daher den Stride auf 3 setzen? Hab ich schon probiert, so läuft das Prog zwar fehlerlos, allerdings wird das Objekt immer noch bright gezeichnet.

und ja, die Normalz sind korrekt berechnet.
Oder muss ich erst ein LICHT einbauen, um den Normaleffekt nachzuvollziehen? Licht ist nämlich nicht drinne (yet), dachte aber bis jetz , das ein neutral Light standard wäre (wie in gängiger 3D Soft).

Ausserdem ist mir folgende Zeile aus der GL-Doku nicht ganz klar:

Zidaaad:
The normal array is initially disabled and isn't accessed when glArrayElement, glDrawElements, or glDrawArrays is called. :kratz2:
Wie denn dann zum Geier?

In Unwissen, der Coax

zeckensack
2003-10-23, 20:05:57
Muss ich daher den Stride auf 3 setzen?0 paßt schon (wenn die drei Arrays tatsächlich separat sind - was ich mal annehme).
Wenn, dann bitte nicht 3, sondern 12 (3*sizeof(float)). Stride wird in Bytes gezählt. 0 bedeutet "dicht".
Original geschrieben von Capt'N Coax
Oder muss ich erst ein LICHT einbauen, um den Normaleffekt nachzuvollziehen?Ja.
Es sind ein paar Default-Parameter gesetzt, aber das ganze ist nicht aktiviert. Versuch's mal mitglEnable(GL_LIGHTING);
glEnable(GL_LIGHT0);

Ausserdem ist mir folgende Zeile aus der GL-Doku nicht ganz klar:

Zidaaad:
The normal array is initially disabled and isn't accessed when glArrayElement, glDrawElements, or glDrawArrays is called. :kratz2:
Wie denn dann zum Geier?

In Unwissen, der Coax Ist doch ganz einfach:
Das normal array ist auf einem frischen Render-Context nicht aktiviert, und muß erst eingeknipst werden.

Capt'N Coax
2003-10-23, 20:39:19
Ist doch ganz einfach:
Das normal array ist auf einem frischen Render-Context nicht aktiviert, und muß erst eingeknipst werden.

Was ich ja mit glEnableClientState (GL_NORMAL_ARRAY);
auch getan habe. Ich habe das so verstanden, Das ich mit den DrawArrayx Befehlen EBEN NICHT das NormalArray ansprechen kann. Etwas seltsam ausgedrückt der Text.

"Stride wird in Bytes gezählt"...Stümmt, grad gelesen.

Dann geh ich jetz' mal vor und mach die Lichter an...