在 3D 场景中处理 2D z 索引的正确方法 (DirectX)
-
21-08-2019 - |
题
我需要实现以下目标:
两个 2D 四边形看起来好像是一个堆叠在另一个之上(就像同一纹理的两半),但实际上在 z 轴上被 n 坐标分开。因此,如果 3D 对象在它们之间经过,一半出现在对象前面,另一半出现在对象后面。
我可以通过对两个四边形应用正交投影,然后对其余 3d 数据应用法线透视来实现此目的吗?这会丢失深度数据吗?
我希望我的例子不会太误导人!
解决方案
简单的答案是肯定的,如果您在渲染四边形时打开了 z write。除非您明确执行,否则您的 z 数据永远不会被丢弃。
然而,让正交深度与投影深度很好地配合可能很棘手。(我从未尝试过,但我想它不会很好地排列。)在这种情况下,最好执行以下操作之一:
- 在透视图中渲染所有几何体
- 在正交视图中渲染所有几何体
- 在未经 z 测试的排序图层中渲染正交几何体(从后到前),在中间渲染透视几何体。
我假设您已经知道前两种方法的缺点,因此是否可以接受取决于您。我认为第三种方法是最传统的。
不隶属于 StackOverflow