代码在此处按要求提供:
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中的noob,而不是c ++。
答案 0 :(得分:1)
Look at the section on accessing the vertex buffer.您必须get the vertex declaration结束检查它,以找出每个顶点的数据是如何布局的。
一旦确定了颜色的存储方式,就可以遍历每个顶点并更改值。当你完成并解锁网格的顶点缓冲区时,你就完成了。
我只需要知道颜色顶点,它应该是比材料更简单的颜色
我不得不反对,材料看起来会容易得多。