0

我有一个奇怪的问题,我的所有模型都正确渲染。当我将模型从使用共享顶点(顶点集 + 索引数组)更改为使用重复顶点(需要这样做才能对我的模型进行纹理处理)时,我的所有模型在使用共享顶点时都可以正常工作。当我对重复的顶点进行交换时,除了我的一个模型之外,它们都可以工作,我不知道为什么。巧合的是,它是顶点数最多的模型(共享时为 20,复制时为 108),因此可能与此有关。

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

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

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

关于我可以采取哪些步骤来找出可能导致这种情况的任何建议?

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

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

这是我的相关渲染代码http://pastebin.com/fRiKM89M

这是模型未正确渲染时的样子http://imgur.com/2u4el

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

4

1 回答 1

0

好吧,我现在觉得有点愚蠢,但这是一个诚实的错误。如果您查看我的代码,其中有 NumVertices 等,这些都是 GLubytes,我完全忘记了,我假设我已将它们定义为 int。因此,在具有最多顶点的一个模型上,数量超过了 GLubyte 最大值 255,但其他模型都没有。

对如此复杂的错误进行非常简单的修复哇!当 OpenGL 崩溃时,它总是让您认为某些技术确实出了问题,而您忽略了简单的问题

于 2012-08-27T14:47:01.153 回答