c++ - DirectX 当我将纹理添加到四边形时,三角形以某种方式弄乱了,修复了吗?

标签 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

最佳答案

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

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

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

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

如果您按顺序排列它们:A、B、D、C - 四边形将正确绘制。

关于c++ - DirectX 当我将纹理添加到四边形时,三角形以某种方式弄乱了,修复了吗?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/13895353/

相关文章:

c++ - 通过指针调用函数

c++ - 使用箭头符号打印圆圈

directx - 解除绑定(bind)着色器资源

c++ - 我得到相互矛盾的答案,我应该如何处理我的代码?

c# - 如何使 DirectX 控件在 C# 窗体上部分透明

c++ - 如何使用 glTranslatef 缩小对象?

c++ - 传递给另一个函数时获取数组的长度

c++ - QDataStream QIODevice 内存分配

c - 我如何知道给定的点是否形成二维矩形

python - 如何以数组形式返回正方形上的点?