2013-07-03 66 views
1

讓我先說我是相當新的OpenGL ES的和OpenGL一般前言本。iOS上的OpenGL ES 2.0:從ZBrush的導入導出.obj文件沒有法線

我有一個模型對象,我們的3D人從zBrush導出。它在.obj文件中沒有任何法線,而我認爲這就是導致此行爲的原因。我使用obj2opengl來創建包含頂點和紋理座標的.h文件,然後導入這些文件和渲染。下面是進口的樣子:

glGenBuffers(1, &mushroomVertexBufferID); 
glBindBuffer(GL_ARRAY_BUFFER, mushroomVertexBufferID); 
glBufferData(GL_ARRAY_BUFFER, sizeof(mushroom01b_LowVerts), mushroom01b_LowVerts, GL_STATIC_DRAW); 

glGenBuffers(1, &mushroomTextureBufferID); 
glBindBuffer(GL_ARRAY_BUFFER, mushroomTextureBufferID); 
glBufferData(GL_ARRAY_BUFFER, sizeof(mushroom01b_LowTexCoords), mushroom01b_LowTexCoords, GL_STATIC_DRAW); 

當它的時間拉攏的對象,這裏是我使用的代碼:

glBindBuffer(GL_ARRAY_BUFFER, mushroomVertexBufferID); 
glEnableVertexAttribArray(GLKVertexAttribPosition); 
glVertexAttribPointer(GLKVertexAttribPosition, 3, GL_FLOAT, GL_FALSE, sizeof(float) * 3, NULL); 

glBindBuffer(GL_ARRAY_BUFFER, mushroomTextureBufferID); 
glEnableVertexAttribArray(GLKVertexAttribTexCoord0); 
glVertexAttribPointer(GLKVertexAttribTexCoord0, 2, GL_FLOAT, GL_FALSE, sizeof(float) * 2, NULL); 

self.effect.texture2d0.name = _mushroomTextureInfo.name; 
self.effect.texture2d0.target = _mushroomTextureInfo.target; 

[self.effect prepareToDraw]; 

glDrawArrays(GL_TRIANGLES, 0, mushroom01b_LowNumVerts); 

這工作,並在那裏我已經在打開他們的模型Blender,修正法線,並用法線重新導出爲OBJ(爲第三個數組緩衝區添加上面的代碼),它看起來很不錯。但是,如果我不修改導出 - 從 - ZBrush的OBJ可言,這裏就是我得到:

Messed up normals

現在,這是面帶glEnable(GL_CULL_FACE);剔除啓用。如果我沒有啓用它,模型似乎是從內部渲染。

很明顯,zBrush導出以某種方式搞砸了。我的問題是如何解決它。

回答

4

該模型不是三角剖分的。讓您的藝術家在輸出中檢查該框。

我去看了看你的腳本文件。

假設四是

a -- c 
| | 
| | 
b -- d 

在特等,你會發現

矩形=>第二三角形

if($5 != "") 
    { 
     @d = split('/', $5); 
     $va_idx[$numFaces] = $a[0]-1; 
     $ta_idx[$numFaces] = $a[1]-1; 
     $na_idx[$numFaces] = $a[2]-1; 

     $vb_idx[$numFaces] = $d[0]-1; 
     $tb_idx[$numFaces] = $d[1]-1; 
     $nb_idx[$numFaces] = $d[2]-1; 

     $vc_idx[$numFaces] = $c[0]-1; 
     $tc_idx[$numFaces] = $c[1]-1; 
     $nc_idx[$numFaces] = $c[2]-1; 

     $face_line[$numFaces] = $line; 

     $numFaces++; 
    } 

嘗試重新排序這個,看看第二個三角形的繞組爲了需要扭轉

矩形=>第二三角形

if($5 != "") 
    { 
     @d = split('/', $5); 
     $va_idx[$numFaces] = $a[0]-1; 
     $ta_idx[$numFaces] = $a[1]-1; 
     $na_idx[$numFaces] = $a[2]-1; 

        $vb_idx[$numFaces] = $c[0]-1; 
     $tb_idx[$numFaces] = $c[1]-1; 
     $nb_idx[$numFaces] = $c[2]-1; 

     $vc_idx[$numFaces] = $d[0]-1; 
     $tc_idx[$numFaces] = $d[1]-1; 
     $nc_idx[$numFaces] = $d[2]-1; 



     $face_line[$numFaces] = $line; 

     $numFaces++; 
    } 
+0

謝謝。我有一個請求與他們一起檢查這個盒子,我會在這裏更新它是如何發生的。 –

1

嘗試改變從順時針剔除爲逆時針,如果您的工具尊重在OBJ和ZBrush的出口方面,它這可能幫助定位。

+0

聽起來可能。這看起來很正常,只是隨機的。 –

+0

感謝您的建議。我嘗試使用'glFrontFace(GL_CCW);'但它呈現與圖像類似。 –