作者热门文章
- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
我正在为正在开发的游戏构建小型3D引擎。我已经整理了基本知识:带有背面剔除的纹理三角形。然而,事实证明深度分类是一个困难的问题。
我正在通过平均构成三角形面的3个点来计算面Z。较长的面有时会与较小的面重叠,因为它们的Z值较大,因此在深度排序的显示列表中会升高。
我该如何解决?如果我只能在编程时得到一些实际的帮助,我敢肯定有已知的深度排序技术。我自己构建了渲染管道,因此可以访问所有必需的数据-三角形,点,纹理,UV坐标等。
在3D程序中渲染的大教堂
在我的3D引擎中渲染的大教堂
最佳答案
您需要分割三角形,以使它们的大小都大致相同-无论您自己进行排序还是使用z缓冲区。当然,除非z缓冲区算法还为您拆分了细长的三角形。
问题是,如果您有一些小的紧实三角形和一些长的细三角形(例如),该算法将经常会错过对长的细三角形进行分类的机会。如果使用三角形的中点,将会有视点被视为更紧凑的三角形的“前面”,而实际上实际上是在后面。采取此俯 View ,其中+
代表中点。
o
-+- 1
-----+------ 2
-+- 3
*
*
到
o
来看,大三角形(2)可以解释为位于小三角形(3)的前面,因此可以绘制在其上方。
关于3d - 如何对3D引擎的三角形进行Z排序?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/3739454/
我是一名优秀的程序员,十分优秀!