OpenGL游戏引擎渲染器[关闭]

Posted

技术标签:

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

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

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

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

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

【问题讨论】:

【参考方案1】:

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

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

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

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

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

【讨论】:

以上是关于OpenGL游戏引擎渲染器[关闭]的主要内容,如果未能解决你的问题,请参考以下文章

游戏引擎架构

简单的 C++,Linux 的 opengl 游戏引擎? [关闭]

为什么我的2D OpenGL纹理无法正确加载? [关闭]

在opengl矩形上使用着色器会导致它消失[关闭]

游戏引擎与物理引擎与几何建模内核之间的区别

「游戏引擎 浅入浅出」4.1 Unity Shader和OpenGL Shader