2009-05-26 2 views

risposta

6

Penso che sia per lo stesso motivo per cui esiste una funzione glColor. Se la normale dell'intera geometria è la stessa per tutti i vertici, è possibile specificarla con glNormal prima di chiamare glDrawArrays/glDrawElements.

+0

Esattamente questo è tutto. Su OpenGL | ES itNormale imposta il valore di default normale. Imho avrebbero potuto fare meglio se avessero rimosso la funzione. glMultiTexCoord esiste per la stessa ragione btw. –

0

L'unica ragione per cui posso pensare è che è lì per supportare l'espressione efficiente di superfici in cui molti vertici condividono la stessa normale. Con l'approccio basato su array, dovresti creare una matrice con lo stesso valore ripetuto per ogni vertice, che spreca memoria.

Trovo curioso che lo manual page (OpenGL ES 1.1, lì) non lo menzioni nemmeno. Ho trovato uno iPhone programming tutorial (PDF) che ha anche sostenuto che glNormal() non c'era più.

+0

Con "dove molti vertici condividono lo stesso normale", intendi "dove tutti i vertici disegnati in una determinata chiamata" glDrawArray "condividono lo stesso normale"? È una comprensione corretta di ciò? – Gravity

0

OpenGL ES 1.1 lo menziona ma sì, c'è un errore nel tutorial di programmazione dell'iPhone.

0

Non si deve più utilizzare queste funzioni. Attenersi a glXXXXArray(). Sospetto che siano stati lasciati lì per rendere più semplice il trasferimento OpenGL in OpenGL ES.

0

In OpenGL | ES glNormal3f() non è una funzione obsoleta,
perché è utile per il rendering 2D piatta forme nel {X, Y} aereo:

invece di utilizzare:

glEnableClientState(GL_NORMAL_ARRAY); 
glNormalPointer(GL_FLOAT, 0, vbuf + normal_offset); 

è più semplice e richiede meno memoria VBO chiamare:

glNormal3f(0, 0, 1); 
+1

leggi la guida alla formattazione per capire come taggare il codice :-) – kleopatra