2

我正在尝试使用 DirectX7 在 2d(z 坐标为 0)中使用顶点和索引缓冲区创建 3d 效果。

用一张图更容易解释:

问题说明

问题是线条坏了。他们应该是直的。为了渲染这个图像,它被分解成三角形并使用 DrawIndexedPrimitiveVB 进行渲染。显然,每个三角形都有点不同,我不明白为什么。

我在这里错过了一些微不足道的事情吗?

我不确定这是否会有所帮助,但源和目标四边形如下:

    SPoint4:= pBounds4(1, 1, W - 2, H - 2);
    DPoint4:= Point4(ProjTo2dX(i, FlyDist + DeepDist, W), ProjTo2dY(0, FlyDist + DeepDist, H), ProjTo2dX(W - i, FlyDist, W), ProjTo2dY(0, FlyDist, H), ProjTo2dX(W - i, FlyDist, W), ProjTo2dY(H, FlyDist, H), ProjTo2dX(i, FlyDist + DeepDist, W), ProjTo2dY(H, FlyDist + DeepDist, H));
4

3 回答 3

3

将正方形/矩形纹理映射到任意四边形的一种方法是投影插值。我写了一篇文章来展示如何做到这一点(使用顶点/像素着色器)。

简短的版本:您在四边形中插入 UV,其方式类似于 GPU 如何进行透视正确渲染(您可能已经注意到,这不会在两个三角形之间产生可见的接缝)。为此,您需要为四边形的每个顶点计算一个错误的“深度”值,并使用基于此“深度”的齐次坐标进行插值。完整的详细信息在上面链接的文章中。

于 2012-05-26T09:07:55.033 回答
1

您需要提供一些透视信息才能在梯形上进行适当的纹理坐标插值,请参阅

OpenGL ES 1.1 中由三角形条带构成的四边形上的纹理变形问题

于 2011-02-09T18:23:55.080 回答
0

我找到了解决方案或至少找到了解决方法。我没有将图像分成 2 个三角形,而是将其分成许多(几个水平条,每个由 2 个三角形组成)。在这种情况下,图像看起来不错。

更少的折线

在这种情况下,图像被分成 10 个条带(20 个三角形)。

我会很高兴有任何意见或其他解决方案。谢谢你。

于 2011-02-09T11:51:33.793 回答