【发布时间】:2016-08-18 08:12:40
【问题描述】:
我喜欢计算机绘图。
我想知道具有以下功能的最快引擎是什么:
使用 4 个颜色通道 rgba 绘制三角形,并允许绘制点光源和定向光源。
纹理将是一个很酷的附加功能,但我再次寻找最快的引擎,而不是最实用的引擎。相机动画和物体动画将是必不可少的。
最后,这个问题确实有 2 个答案,1 个用于一般开发,1 个用于 Web,但如果您只能与其中一个或另一个交谈,您的贡献将不胜感激!
【问题讨论】:
我喜欢计算机绘图。
我想知道具有以下功能的最快引擎是什么:
使用 4 个颜色通道 rgba 绘制三角形,并允许绘制点光源和定向光源。
纹理将是一个很酷的附加功能,但我再次寻找最快的引擎,而不是最实用的引擎。相机动画和物体动画将是必不可少的。
最后,这个问题确实有 2 个答案,1 个用于一般开发,1 个用于 Web,但如果您只能与其中一个或另一个交谈,您的贡献将不胜感激!
【问题讨论】:
【讨论】:
有很多引擎可以完成这项工作。其中最著名的之一就是 Unity,您还可以在其中拥有大量其他性能良好的功能。
但我认为您实际上不是在寻找引擎,而是在寻找 API。例如 OpenGL 或 DirectX(已经提到过)。 OpenGL 甚至具有特定的 Web 内容 (WebGL)。
还有一个问题:三角形应该是半透明的。另一个答案中缺少的是三角形是否已经排序的问题。例如,OpenGL 擅长渲染对象,无论哪个三角形离观察者最近都无关紧要。它会即时“搜索”这个并仅显示可见的三角形。但是对于半透明的三角形,可以看到不同的三角形相互重叠,因此不仅需要知道哪个三角形在前面,还需要知道哪个三角形紧随其后等等。 OpenGL 为这个特性提供了混合,但必须在渲染之前手动排序半透明三角形。这称为画家算法。虽然对象的排序是一个复杂的问题,特别是对于大量对象,这可能需要相当长的时间。
为此,还有另一种解决方案,称为“深度剥离”。这个想法是使用 OpenGL 多次渲染所有三角形。第一次得到前面的所有三角形。现在再次渲染所有三角形,但前面没有三角形。这会产生离观察者第二近的三角形。之后再次渲染所有三角形,但没有前两个“皮”,这导致第三个最近的三角形,依此类推。这很昂贵,因为所有内容都必须多次渲染,但在三角形数量非常多的情况下,这比排序更快(并且由于三角形重叠而更精确)。在大多数情况下,四个果皮就足以获得良好的效果。为了进一步阅读,我建议阅读以下 Everitt 的论文:http://gamedevs.org/uploads/interactive-order-independent-transparency.pdf
【讨论】: