【发布时间】:2013-07-01 17:25:40
【问题描述】:
让我先说一下我在 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); 启用的面部剔除。如果我不启用它,模型似乎是由内而外渲染的。
显然,zBrush 导出以某种方式搞砸了。我的问题是如何解决它。
【问题讨论】:
标签: ios opengl-es-2.0