iOS上的OpenGL ES 2.0:从zBrush导出导入.OBJ文件,不带法线
让我先说一句,我对OpenGL ES和OpenGL总体来说是相当新的 我有一个模型对象,我们的3D家伙从zBrush导出。它在.obj文件中没有任何法线,我认为这就是导致这种行为的原因。我使用创建一个包含顶点和纹理坐标的.h文件,然后导入它们并进行渲染。以下是导入的内容:iOS上的OpenGL ES 2.0:从zBrush导出导入.OBJ文件,不带法线,ios,opengl-es-2.0,Ios,Opengl Es 2.0,让我先说一句,我对OpenGL ES和OpenGL总体来说是相当新的 我有一个模型对象,我们的3D家伙从zBrush导出。它在.obj文件中没有任何法线,我认为这就是导致这种行为的原因。我使用创建一个包含顶点和纹理坐标的.h文件,然后导入它们并进行渲染。以下是导入的内容: glGenBuffers(1, &mushroomVertexBufferID); glBindBuffer(GL_ARRAY_BUFFER, mushroomVertexBufferID); glBufferData
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导出的,我会得到以下结果:
现在,使用glEnableGL_CULL_face;启用了面剔除;。如果我不启用它,模型似乎是由内而外渲染的
很明显,zBrush的出口不知怎么搞砸了。我的问题是如何修复它。尝试将剔除从顺时针更改为逆时针,如果您的工具尊重obj中的方向,并且zBrush export尊重它,这可能会有所帮助。尝试将剔除从顺时针更改为逆时针,如果您的工具尊重obj中的方向,而zBrush export尊重它,这可能会有所帮助。模型不是三角化的。让您的艺术家勾选输出上的复选框 我去帮你查了一下脚本文件 假设四边形是
a -- c
| |
| |
b -- d
在.pl中,您将发现
矩形=>第二个三角形
尝试重新排序到此位置,以查看是否需要反转第二个三角形的缠绕顺序
矩形=>第二个三角形
模型不是三角剖分的。让您的艺术家勾选输出上的复选框 我去帮你查了一下脚本文件 假设四边形是
a -- c
| |
| |
b -- d
在.pl中,您将发现
矩形=>第二个三角形
尝试重新排序到此位置,以查看是否需要反转第二个三角形的缠绕顺序
矩形=>第二个三角形
听起来很有可能。这看起来很普通,只是随机的。谢谢你的建议。我尝试使用glFrontFaceGL_CCW;但它的渲染与图像相似。听起来很有可能。这看起来很普通,只是随机的。谢谢你的建议。我尝试使用glFrontFaceGL_CCW;但它的渲染效果与图像相似。谢谢。我有一个要求他们选中这个框,我会在这里更新它的进展情况。谢谢。我有一个要求他们选中这个框,我会在这里更新它的进展情况。
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++;
}