在3D场景中处理2D z索引的正确方法(DirectX)

在3D场景中处理2D z索引的正确方法(DirectX),3d,directx,2d,orthogonal,3d,Directx,2d,Orthogonal,我需要做到以下几点: 两个二维四边形看起来好像是一个叠在另一个上面(就像同一纹理的两半),但实际上在z轴上被n个坐标分开。因此,如果一个3D对象在它们之间经过,则一半显示在对象的前面,另一半显示在对象的后面 我可以通过对两个四边形应用正交投影,然后对其余的3d数据应用法线透视来实现这一点吗?这会丢失深度数据吗 我希望我的例子不要太误导人 如果在渲染四边形时启用了z write,那么简单的答案是肯定的。除非您明确地这样做,否则永远不会丢弃z数据 然而,要使正对角线深度与投影深度配合得很好可能很棘手

我需要做到以下几点:

两个二维四边形看起来好像是一个叠在另一个上面(就像同一纹理的两半),但实际上在z轴上被n个坐标分开。因此,如果一个3D对象在它们之间经过,则一半显示在对象的前面,另一半显示在对象的后面

我可以通过对两个四边形应用正交投影,然后对其余的3d数据应用法线透视来实现这一点吗?这会丢失深度数据吗


我希望我的例子不要太误导人

如果在渲染四边形时启用了z write,那么简单的答案是肯定的。除非您明确地这样做,否则永远不会丢弃z数据

然而,要使正对角线深度与投影深度配合得很好可能很棘手。(我从未尝试过,但我想它不会很好地排列。)在这种情况下,最好执行以下操作之一:

  • 在透视视图中渲染所有几何体
  • 在正交视图中渲染所有几何体
  • 在未经z测试的排序层(从后到前)中渲染正交几何体,在其间渲染透视几何体
我假设你已经知道前两种方法的缺点,所以这取决于你是否可以接受。我认为第三种方法是最传统的