2012-07-24 367 views
0

代码是在这里的要求:Directx的顶点颜色

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

让我怎么改变茶壶的顶点颜色?如果你的思维材料,我已经知道,我只需要知道颜色顶点应该比材料更简单。我可以使用Vertex Buffers和Index Buffers中的几何形状来做到这一点,您如何将这个应用到与已经填写了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的顶点信息的类。正如您所看到的,代码是为顶点颜色设置的,不需要颜色或不能有灯光正常工作,如FVF = D3DFVF_XYZ |所示。 D3DFVF_DIFFUSE

再一次,人们似乎很难理解问题,我需要更新顶点的颜色以包含颜色,例如茶壶,球体,可以通过D3DCreate [objects]创建的网格物体等。 D3DCreateTeapot(参数的东西)。 请逐行布局代码,我是directx中的noob,而不是C++中的代码。

+1

那么,你赢得了我作为第一个看到你的问题视频的奖项。 – chris 2012-07-24 05:23:38

+0

我在堆栈溢出3天前发布了一个问题,没有人会给我一个答案。如果有人会给出答案,人们会给出最可能的含糊不清的答案。我希望有人能在这里解决它。 – 2012-07-24 05:25:58

+0

如何发布一些代码并描述你的问题?看我的视频太麻烦了。 – Wernsey 2012-07-24 05:38:34

回答

1

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

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

我只需要知道它应该是一个比物质更简单的事情

我会不同意,材料看起来会轻松很多的颜色顶点。

+0

我差点拿到了,正如预测的那样,我在“获取顶点删除”部分再次遇到了一个大的路障。所以这里是我所做的: 1.)做了D3DVERTEXELEMENT9,以对应我的顶点结构。 2.)声明使用设备 - > CreateVertexDeclaration(D3DVERTEXELEMENT9 * ve,IDirect3DVertexDeclaration9 ** ppDecl)。 3.)然后device-> setvetexdecleration。
但之后,根本没有导致语义的线索,我觉得我需要知道一些东西。我真的这样做。如果难以解释,你现在可以向我展示一个乐队援助解决方案吗? PLS – 2012-07-24 11:23:24