2012-07-09 22 views
0

目前IM,而是等同於具有模型在照明方面看起來圓潤,這是不理想的,因爲我的模型意味着有鋒利的邊緣。周圍的Googling讓我發現,它似乎並不可能在OpenGL-ES 2.0的使用表面法線,但另一種技術是使用每個頂點的多個頂點的法線,如果你是使用表面法線採取行動。是可以使用一個每個頂點正常的我的模型讓每個頂點的多條法線在OpenGL-ES 2.0

這意味着,對於普通數組和頂點數組,索引緩衝區需要不同,因爲例如一個立方體將有8個頂點,但每個頂點需要3個法線才能像表面法線一樣工作(一個用於如果模型是三角形的,則立方體的每個連接面可能需要更多)。所以頂點的索引數組爲8,法線的索引數組爲8x3 = 24。

沒有人知道如何去這樣做呢?

此刻我的代碼看起來像這樣

glGenVertexArraysOES(1, &_vertexArray); 
glBindVertexArrayOES(_vertexArray); 

glGenBuffers(1, &_indexBuffer); 
glBindBuffer(GL_ELEMENT_ARRAY_BUFFER, _indexBuffer); 
glBufferData(GL_ELEMENT_ARRAY_BUFFER, numIndices*sizeof(GLubyte), indices, GL_STATIC_DRAW); 

glGenBuffers(1, &_vertexBuffer); 
glBindBuffer(GL_ARRAY_BUFFER, _vertexBuffer); 
glBufferData(GL_ARRAY_BUFFER, numVertices*sizeof(GLfloat), vertices, GL_STATIC_DRAW); 

glEnableVertexAttribArray(GLKVertexAttribPosition);   
glVertexAttribPointer(GLKVertexAttribPosition, 3, GL_FLOAT, GL_FALSE, 0, 0); 

glGenBuffers(1, &_normalBuffer); 
glBindBuffer(GL_ARRAY_BUFFER, _normalBuffer); 
glBufferData(GL_ARRAY_BUFFER, numNormals*sizeof(GLfloat), normals, GL_STATIC_DRAW); 

glEnableVertexAttribArray(GLKVertexAttribNormal); 
glVertexAttribPointer(GLKVertexAttribNormal, 3, GL_FLOAT, GL_FALSE, 0, 0); 
+0

好的建議一直沒有頂點分享我的模型,它應該工作,雖然是有點扯淡辦法做到這一點,如果你的模型是非常大的,但我有至多20個頂點,所以它不應該是太糟了。如果我得到它的工作,並沒有人發佈了答案生病寫作答案 – Fonix 2012-07-09 15:51:06

回答

2

你不能每個頂點多條法線,你不能有法線和位置不同的指數。

這樣做會複製你的位置數據,並附加不同的標準,以每個位置上的唯一途徑。

+0

啊該死,謝謝。必須以某種方式得到我的頂點數據以不同的方式,然後 – Fonix 2012-07-09 18:00:39

+0

如果您正在使用着色器,那麼你可以自由地詮釋你每個頂點傳遞任何你想要的方式(屬性)的數據。 – AbleArcher 2013-12-08 22:03:47

相關問題