OpenGL-ES共享顶点与重复顶点渲染问题

时间:2012-08-22 16:28:31

标签: ios opengl-es glkit

我有一个奇怪的问题,我的所有模型,但一个正在渲染。当我将模型从使用共享顶点(顶点集合+索引数组)更改为使用重复顶点(需要这样做以便能够纹理我的模型)时,我的所有模型在使用共享顶点时都能正常工作。当我交换到重复的顶点时,除了我的一个模型之外它们都工作,我无法找出原因。巧合的是顶点数量最多的模型(共享时为20,复制时为108),所以可能与顶点有关。

到目前为止我所做的是尝试纠正这个问题:

  • 从头开始重新创建模型(这是一个简单的任务,因为它是一个非常简单的模型)
  • 新模型没有正确渲染,将模型更改回共享顶点,再次工作(虽然没有帮助,但是不能像这样纹理)
  • 将我的索引数组从GLubyte更改为GLushort,因为存在一些数据类型问题
  • 使用索引数组的绘制顺序来看看它是否是某种三角形缠绕问题,这似乎不是这种情况(取消背面剔除以检查)

我所有的模型都是基本形状,金字塔,立方体......直到二十面体。十二面体是给出问题的形状(看起来像12面骰子)。当渲染时,绘制形状所需的36个三角形中只有8个出现,其余部分是透明的或根本不存在。我使用SoftImage以相同的方式制作了所有模型,所以我真的不认为它与模型本身有关。在可见的三角形上,纹理显示正确。所有模型同时出现在屏幕上,因此可以排除任何可能不是特定于渲染模型的模型。它们也使用相同的函数进行渲染,只有不同的数组。

我可以采取哪些步骤找出导致此问题的原因?

这是模型使用重复顶点http://pastebin.com/2hg7D0Ga的样子 这是共享的http://pastebin.com/tUqTUM91

也许如果您有可以渲染这些模型的东西,您可以在应用程序中快速测试它们并查看它是否适合您

这是我的相关呈现代码http://pastebin.com/fRiKM89M

这是模型无法正确呈现时的样子http://imgur.com/2u4el

我希望有人能发现我忽略的东西。感谢您花时间阅读所有这些,如果你已经做到这一点

1 个答案:

答案 0 :(得分:0)

好的,我现在觉得有点蠢,但这是一个诚实的错误。如果你查看我的代码,我有NumVertices等,那些都是GLubytes,我完全忘了,我假设我已经将它们定义为int的。所以在一个具有最多顶点的模型上,该数字超过了GLubyte max 255,但其他模型都没有。

真的很简单修复这么复杂的错误哇!当OpenGL中断时,它总是会让你觉得技术上出现了问题并忽略了简单的问题

相关问题