2012-07-24 230 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