Directx顶点渲染:无法使纹理正确显示为trapetzoids

时间:2011-02-08 22:13:16

标签: directx textures vertex

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

用图片解释更容易:

Problem's illustration

问题是线条坏了。他们应该是直的。要渲染此图像,它会在三角形中分解并使用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));

3 个答案:

答案 0 :(得分:3)

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

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

答案 1 :(得分:1)

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

Problems with texture deformation in OpenGL ES 1.1 on quad made out of triangle strips

答案 2 :(得分:0)

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

less broken lines

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

我会很高兴任何评论或其他解决方案。谢谢。