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游戏引擎渲染器[关闭]的主要内容,如果未能解决你的问题,请参考以下文章