1

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

创建顶点。

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);

我的问题在哪里。

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

在此处输入图像描述

4

2 回答 2

4

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

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

看那张图,画出这两个三角形……

然后去把你的顶点按正确的顺序排列——三角形带应该是“之字形”,而不是顺时针或逆时针的顺序。

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

于 2012-12-15T20:03:52.653 回答
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, },
};

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

于 2015-01-16T10:58:13.753 回答