2016-03-27 6 views
0

Bir VBO normal verileri tampon, ardından glVertexAttribPointer kullanarak öyle gösteriyor: Ben gl_Normal bağlı olmasını verileri isterlerseglVertexAttribPointer kullanırken, gl_Normal özniteliği için hangi dizini kullanmalıyım?

glVertexAttribPointer(<INDEX?>, 3, GL_FLOAT, GL_FALSE, 0, NULL); 

Ancak, ben, ilk parametre, endeks için hangi değer kullanmalıdır gölgelendiricilerdeki özellik?

Bir NVidia kartı kullanıyorum ve burada, bu tür kartlar için gl_Normal'ın her zaman dizin 2'de olduğunu https://www.opengl.org/sdk/docs/tutorials/ClockworkCoders/attributes.php okudum. Ancak gl_Normal'in diğer kartlar için bu dizinde olduğunu nasıl bilebilirim? Ayrıca, bir 2 dizini kullanılmıyor gibi görünmüyor ve gölgelendiricideki gl_ormal verilerinin hepsi (0,0,0).

glGetAttribLocation ve glBindAttribLocation öğesinin farkındayım, ancak, özellikle 'gl_' ile başlayan yerleşik köşe özniteliklerinden biri ile denendiğinde, işlev özellikle bir hata atacağını söylüyor.

DÜZENLEME: GLSL 130.

cevap

4

Değilsin ile OpenGL 3.0 kullanma . Çekirdek profili ve VAO'ları kullanırken, sabit işlevli verteks özelliklerinden hiçbiri mevcut değildir.

sizin gölgelendiricideki normaller için kendi köşe özelliğini tanımlayın:

glVertexAttribPointer(normalsLocation, 3, GL_FLOAT, GL_FALSE, 0, NULL); 
:

normalsLocation = glGetAttribLocation(program, "myVertexNormal"); 

Sonra konumu ile glVertexAttribPointer kullanın:

in vec3 myVertexNormal; 

nitelik konumunu (veya bind it to a location of your choice) alın

Çekirdek profilde, bunu konumlar için de yapmalısınız, t Koordinatları vb. Vertex gölgeleyiciniz gl_Position'a bir şey atar ve parça gölgelendiriciniz çıktılarına bir şey atarsa, OpenGL gerçekte ne olduğuyla ilgilenmez.

Kullanımdan kaldırılan sabit işlev öznitelikleri ve gl_Normal kullanımında ısrar ederseniz, bunun yerine glNormalPointer kullanın.

+0

Hey. Ben glsl 130 kullanıyorum, muhtemelen bahsetmeliydim ve tüm 'in' ve 'out' anahtar kelimeler mevcut değil (Benim kötü!) Hala benzer bir süreç mi? – ipe369

+0

@ ipe369 Köşe gölgelendiricide 'in'' 'attribute' ile değiştirin. –

+0

Ah, tamam. Harika, teşekkürler dostum! – ipe369