2012-12-13 53 views
1

我目前正在从DirectDraw系统(是的,我知道,这是非常旧的)升级到DirectX10。这是一个2D系统,但模拟真实世界,因为每个物体都有以米为单位的范围/深度。有一个背景图像呈现并保持在最远的z顺序。所有其他物体都在其上绘制,并根据它们的范围/深度进行缩放。但是,我有一个特定类型的对象被定义为多边形,并呈现一些不同。它充当无形的遮挡物。例如,封堵器的范围/深度为40(我的单位是米),并由视口中间的5个顶点(五边形)定义。在相同的视口位置有一个精灵对象,但是其范围/深度为50.所需的输出是让精灵对象不被渲染,但是通过它们两个都可以看到背景。所以实质上这些都是隐形封堵器,只是它们不遮挡背景。呈现隐形遮挡物

作为一个说明,该封堵器和精灵全部来自同一基础对象类型派生的和在深度排序的容器中混合在一起。

我的想法是重写封堵器渲染方法,以便绘制到渲染目标,写入范围/深度值。然后我会像往常一样渲染精灵,但是在顶点或像素着色器中会将精灵的范围值与渲染目标中的范围值进行比较。然而,在我看来,我必须在Present被调用之前在相同的通道中可能读取/写入渲染目标,并且这是未定义的。如果我要渲染遮挡物,解除渲染目标并将纹理传递给其他对象进行查找,则必须将这些精灵位置转换为可能不平凡的纹理空间。这两种方法中的哪一种可能?

想到更多关于它之后,想到了另外一个想法。我可以采用遮挡物并根据背景纹理设置纹理坐标。通过这种方式,他们可以绘制出与背景相同的颜色值,并且由于如果精灵在背后进行排序,用户仍然会看到“背景”,但实际上它就像是它的封闭器。

对不起,如果这不是一个问题,更多的想法大声,但我想获得印象和想法的最佳途径去做这件事。在我看来,我有选择,但不确定哪一个最高效,哪一个最简单。预先感谢您的回复。

+0

因此,我参照背景图像设置了纹理坐标。它最终成为一个相当简单的过程,真正有趣的部分是做多边形三角测量,以获得填充的多边形甚至使用纹理坐标。 – hydronics311

回答

0

正如我的意见说我去设置参照背景图像的纹理坐标,然后确保封堵器,这是一个简单的多边形,被正确三角充分利用这些纹理坐标。