DirectX当我向四边形添加纹理时,三角形会以某种方式搞乱,修复?

时间:2012-12-15 19:19:02

标签: c++ geometry directx textures

首先,这是我的代码的重要部分。

创建顶点。

D3DVertexTexture Vertices[] =
{
    {-1.0f,  1.0f, 0.0f, 0.0f, 0.0f, },
    { 1.0f,  1.0f, 0.0f, 1.0f, 0.0f, },
    { 1.0f, -1.0f, 0.0f, 1.0f, 1.0f, },
    {-1.0f, -1.0f, 0.0f, 0.0f, 1.0f, },
};

创建顶点缓冲区。

D3DDevice->CreateVertexBuffer(sizeof(Vertices),
                              0,
                              D3DFVF_CUSTOMVERTEXTEXTURE,
                              D3DPOOL_MANAGED,
                              &vb,
                              NULL);

记忆废话。

void* pVoid;

vb->Lock(0, sizeof(pVoid), (void**) &pVoid, 0);
    memcpy(pVoid, Vertices, sizeof(Vertices));
vb->Unlock();

加载纹理。

D3DXCreateTextureFromFile(D3DDevice, "images/tex.png", &t);

渲染。

D3DDevice->SetFVF(D3DFVF_CUSTOMVERTEXTEXTURE);

D3DDevice->SetTexture(0, t);
D3DDevice->SetStreamSource(0, vb, 0, sizeof(D3DVertexTexture));
D3DDevice->DrawPrimitive(D3DPT_TRIANGLESTRIP, 0, 2);

我的问题在哪里。

它显示一个正方形,但侧面的左侧缺少像这样的三角形。

enter image description here

2 个答案:

答案 0 :(得分:4)

三角形条带中的顶点A,B,C,D将产生两个三角形:A,B,C和B,C,D

A -- B  A--B     B
|    |   \ |    /|
|    |    \|   / |
D -- C     C  D--C

看一下那个图并画出那两个三角形......

然后按正确的顺序放置顶点 - 三角形条带应为“之字形”,而不是顺时针或逆时针顺序。

如果您订购它们:A,B,D,C - 四边形将正确绘制。

答案 1 :(得分:0)

您是否尝试按此顺序定义顶点:

D3DVertexTexture Vertices[] =
{
    { 1.0f, -1.0f, 0.0f, 1.0f, 1.0f, },
    {-1.0f, -1.0f, 0.0f, 0.0f, 1.0f, },
    {-1.0f,  1.0f, 0.0f, 0.0f, 0.0f, },
    { 1.0f,  1.0f, 0.0f, 1.0f, 0.0f, },
};

我相信绘制顶点的顺序默认为顺时针顺序。您定义的顺序不正确。