[英]OpenGL ES 2.0 on iOS: Importing .OBJ files from zBrush export without normals
首先,我要說一下我在OpenGL ES和OpenGL方面還很陌生。
我有一個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,這就是我得到的:
現在,這是通過glEnable(GL_CULL_FACE);
啟用人臉剔除的glEnable(GL_CULL_FACE);
。 如果我不啟用它,則該模型似乎是由內而外渲染的。
顯然,zBrush導出以某種方式被弄亂了。 我的問題是如何解決。
該模型未三角剖分。 讓您的藝術家在輸出中選中該復選框。
我去找了你的腳本文件。
假設四邊形是
a -- c
| |
| |
b -- d
在.pl中,您會找到
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++;
}
如果您的工具遵循obj中的方向,而zBrush導出遵循此方向,則嘗試從順時針更改為逆時針剔除,這可能會有所幫助。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.