【问题标题】:Directx Vertex ColorDirectx 顶点颜色
【发布时间】:2012-07-24 05:22:52
【问题描述】:

代码按要求在这里:

void MakeTeapotRed()
{
    D3DXCreateTeapot(Device, &Teapot, 0);
}

那么如何改变茶壶的顶点颜色呢?如果你的思维材料,我已经知道了,我只需要知道颜色顶点,这应该比材料简单得多。我可以使用顶点缓冲区和索引缓冲区手动布局的几何图形来做到这一点,如何将其应用于已经填写了 VB 和 IB 信息的网格?

class ColorVertex
{
public:
ColorVertex(){}
ColorVertex(float x, float y, float z, D3DCOLOR color)
{
    m_x = x;
    m_y = y;
    m_z = z;
    m_color = color;
}
float m_x, m_y, m_z;            // 3d coordinates
D3DCOLOR m_color;
static const DWORD FVF;
};
const DWORD ColorVertex::FVF = D3DFVF_XYZ | D3DFVF_DIFFUSE;

我刚刚发布的代码是名为 ColorVertex 的 Vertex 信息类。如您所见,代码是为顶点颜色设置的,不需要或必须没有灯光才能正常工作的颜色,如 FVF = D3DFVF_XYZ | D3DFVF_DIFFUSE

同样,人们似乎很难理解这个问题,我需要更新顶点的颜色以包含颜色,例如可以通过 D3DCreate[objects] 创建的对象,如茶壶、球体、网格。 D3DCreateTeapot(参数的东西)。 请逐行布局代码,我是directx的菜鸟,而不是c++。

【问题讨论】:

  • 嗯,你赢得了奖项,因为你是我见过的第一个为你的问题制作视频的人。
  • 我在 3 天前在堆栈溢出时发布了一个问题,没有人会给我答案。如果有人会给出答案,人们只会给出最模棱两可的答案。我希望有人会在这里解决它。
  • 发布一些代码并描述您的问题怎么样?我去看你的视频太麻烦了。
  • 我按照您的要求编辑了顶部,我只包含了一行代码,我认为足以显示我的问题。
  • 这还不够。当然,顶点及其索引有问题。你能显示完整的列表吗?

标签: c++ colors directx vertex


【解决方案1】:

Look at the section on accessing the vertex buffer. 你必须get the vertex declaration 结束检查它以了解每个顶点的数据是如何布局的。

一旦您确定了颜色的存储方式,您就可以遍历每个顶点并更改值。当您完成并解锁网格的顶点缓冲区时,您就完成了。

我只需要知道颜色顶点应该比材质简单得多

我不得不不同意,材料看起来会容易得多。

【讨论】:

  • 我几乎搞定了,正如预期的那样,我在“获取顶点减速”部分再次遇到了一个很大的障碍。所以这就是我所做的: 1.) 做了 D3DVERTEXELEMENT9,与我的顶点结构相对应。 2.) 声明使用设备->CreateVertexDeclaration(D3DVERTEXELEMENT9* ve, IDirect3DVertexDeclaration9** ppDecl)。 3.) 然后是 device->setvetexdecleration。
    但是在那之后,根本就没有通往语义的线索,我觉得我需要知道一些东西。我真的做到了。如果很难解释,你能告诉我一个创可贴解决方案吗?请