Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/ios/105.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/unit-testing/4.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
iOS上的OpenGL ES 2.0:从zBrush导出导入.OBJ文件,不带法线_Ios_Opengl Es 2.0 - Fatal编程技术网

iOS上的OpenGL ES 2.0:从zBrush导出导入.OBJ文件,不带法线

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

让我先说一句,我对OpenGL ES和OpenGL总体来说是相当新的

我有一个模型对象,我们的3D家伙从zBrush导出。它在.obj文件中没有任何法线,我认为这就是导致这种行为的原因。我使用创建一个包含顶点和纹理坐标的.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导出的,我会得到以下结果:

现在,使用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++;
    }