0

コードは要求どおりにここにあります:

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 という Vertex 情報のクラスです。ご覧のとおり、FVF = D3DFVF_XYZ | に示すように、コードは頂点カラー、ライトを必要としない、またはライトを持ってはならないカラー用に設定されています。D3DFVF_DIFFUSE

繰り返しになりますが、人々は問題を理解するのに苦労しているようです。D3DCreate[objects] などで作成できるティーポット、球体、メッシュなどのオブジェクトの色を含むように頂点の色を更新する必要があります。D3DCreateTeapot(引数のもの)。コードを 1 行ずつレイアウトしてください。私は C++ ではなく、directx の初心者です。

4

1 に答える 1

1

頂点バッファへのアクセスに関するセクションを見てください。頂点宣言を取得して、各頂点のデータがどのように配置されているかを確認する必要があります。

色の保存方法を特定したら、各頂点をループして値を変更します。メッシュの頂点バッファーを終了してロックを解除すると、完了です。

マテリアルよりもはるかに単純なものであるはずのカラー頂点を知る必要があるだけです

私は反対しなければならないでしょう、材料はそれがずっと簡単に見えるように見えます.

于 2012-07-24T07:33:34.737 に答える