【问题标题】:OpenGL Game Engine Renderer [closed]OpenGL游戏引擎渲染器[关闭]
【发布时间】:2016-05-02 14:39:39
【问题描述】:

我正在使用 OpenGL 开发渲染引擎,我想知道:

是否应该在模型中创建重复的顶点(对于平面着色,我们需要复制顶点,因为我们有 2 个以上的法线用于单个顶点),或者是否应该在引擎中实施算法来计算何时需要复制顶点.一个例子是具有锋利边缘和光滑表面的岩石模型。

对我来说,艺术家会在建模软件中复制锐边的顶点是有道理的,因为引擎不知道艺术家的意图是什么(关于模型特征)。引擎可以通过检查面法线之间的角度来识别应该复制哪些顶点,但对我来说,这样做可能会覆盖模型的特征。

这是专门针对 .obj 模型的,因为不同的出口商可能(?还没有研究过)提供满足这种需求的选项。

【问题讨论】:

    标签: c++ opengl 3d rendering


    【解决方案1】:

    您可能应该自己定义重复的顶点,只要它们不是真正重复的顶点。

    在图形编程术语中,“顶点”应该定义所有定义单个点的必要信息。这包括但不一定限于:位置、法线、纹理坐标和无纹理颜色。

    因此,一般而言,如果在比较两个点时所有此定义的数据相同(正负 Epsilon),则顶点仅是“重复的”。如果您编写一个算法来检测和删除此类重复项,我会说没有问题。

    当您期望一种算法准确地决定一个顶点应该是“平滑”还是“平坦”时,您就会遇到问题,因为没有一种算法能正确地做到这一点。尤其是在您的情况下:如果您希望岩石总是是光滑的阴影(这对于任何特别磨损的岩石来说都是合理的),那么您可能没问题,但考虑到您需要它同时考虑光滑和锋利的边缘,你的算法总是会搞砸的。您将需要两种情况,其中 10° angle 被平滑地着色,而 > 170° angle 被平滑地着色。除非模型本身提供这些规则,否则您将无法做到正确。

    所以,总结一下:只需在模型中创建重复的顶点。不要试图通过算法来摆脱它。大多数体面的 3D 建模程序应该提供使这个过程相对轻松的功能。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多