今回初めて3Dに挑戦します。
3D上に三角形を書き色を塗りたいのですが色の設定の仕方がわからないです。
現在は黒で三角形をかくことに成功しました。
以下を修正して赤単色(255)などで作る方法を教えていただけないでしょうか?
typedef struct{
float x,y,z;
}D3DVERTEX;
D3DVERTEX v[3]= {
{ 1,1,0 },
{ 0,1,1 },
{ 1,0,1 },
};
lpD3DDev->DrawPrimitiveUP(D3DPT_TRIANGLELIST,1,v,sizeof(D3DVERTEX));
3D上に三角形を書き色を塗る
Re:3D上に三角形を書き色を塗る
その構造体 D3DVERTEXを
[color=#e0f0ff" size="-1" face="monospace]
struct D3DVERTEX
{
float x,y,z;
D3DCOLOR col;
};
[/color]
としてカラー値を付け加えます。
使うときはこんな感じです。
[color=#e0f0ff" size="-1" face="monospace]
D3DVERTEX v[3]=
{
{ 1,1,0, D3DCOLOR_ARGB(255, 0, 0), },
{ 0,1,1, D3DCOLOR_ARGB(255, 0, 0), },
{ 1,0,1, D3DCOLOR_ARGB(255, 0, 0), },
};
lpD3DDev->SetFV(D3DFVF_XYZ|D3DFVF_DIFFUSE);
lpD3DDev->DrawPrimitiveUP(D3DPT_TRIANGLELIST,1,v,sizeof(D3DVERTEX));
[/color]
この方法ですと頂点毎に色を変えることができます。
が、頂点が大量にあって一括で指定したい場合はレンダーステートを変更した方が簡単かもしれません。
http://www.play21.jp/board/formz.cgi?ac ... &rln=23735
[color=#e0f0ff" size="-1" face="monospace]
struct D3DVERTEX
{
float x,y,z;
D3DCOLOR col;
};
[/color]
としてカラー値を付け加えます。
使うときはこんな感じです。
[color=#e0f0ff" size="-1" face="monospace]
D3DVERTEX v[3]=
{
{ 1,1,0, D3DCOLOR_ARGB(255, 0, 0), },
{ 0,1,1, D3DCOLOR_ARGB(255, 0, 0), },
{ 1,0,1, D3DCOLOR_ARGB(255, 0, 0), },
};
lpD3DDev->SetFV(D3DFVF_XYZ|D3DFVF_DIFFUSE);
lpD3DDev->DrawPrimitiveUP(D3DPT_TRIANGLELIST,1,v,sizeof(D3DVERTEX));
[/color]
この方法ですと頂点毎に色を変えることができます。
が、頂点が大量にあって一括で指定したい場合はレンダーステートを変更した方が簡単かもしれません。
http://www.play21.jp/board/formz.cgi?ac ... &rln=23735
Re:3D上に三角形を書き色を塗る
レスありがとうございます。
D3DCOLOR_ARGBの引数が少ないと警告が出たのですが
D3DCOLOR_ARGB(255, 0, 0), をD3DCOLOR_ARGB(255,255, 0, 0)に直しても大丈夫でしょうか?
↑一つ目は透明度?
また
error C2039: 'SetFV' : 'IDirect3DDevice9' のメンバではありません。
'IDirect3DDevice9' の宣言を確認してください。
とエラーが出てしまいます。
D3DCOLOR_ARGBの引数が少ないと警告が出たのですが
D3DCOLOR_ARGB(255, 0, 0), をD3DCOLOR_ARGB(255,255, 0, 0)に直しても大丈夫でしょうか?
↑一つ目は透明度?
また
error C2039: 'SetFV' : 'IDirect3DDevice9' のメンバではありません。
'IDirect3DDevice9' の宣言を確認してください。
とエラーが出てしまいます。
Re:3D上に三角形を書き色を塗る
すみません。
D3DCOLOR_ARGBに関しては一つ目の引数に透明度を加えると言うことでOKです。
SetFVの方はご指摘の通り SetFVFです。
D3DCOLOR_ARGBに関しては一つ目の引数に透明度を加えると言うことでOKです。
SetFVの方はご指摘の通り SetFVFです。
Re:3D上に三角形を書き色を塗る
Justy様
せっかく説明していただいているのに挙げ足を取ってしまうような言い方になり申し訳ないです。
色の方が黒から変更されないのですが、色を読み込めていないのでしょうか?
せっかく説明していただいているのに挙げ足を取ってしまうような言い方になり申し訳ないです。
色の方が黒から変更されないのですが、色を読み込めていないのでしょうか?
Re:3D上に三角形を書き色を塗る
>ただ色が黒のまま変更されません・・・
うーん、何ででしょうね。
今こちらでテストコードを書いてみたのですが、普通に赤い三角形が出ました。
全体のコードとかって、提示できますか?
Re:3D上に三角形を書き色を塗る
自分も最近DirectXに手をつけ始めたので間違っていると悪いのですが
このレンダーステート変更しないでも頂点色適応されるんでしたっけ?
もう既に書いてある場合すみませんです。
// 頂点の色を使用する m_pD3DDevice->SetTextureStageState(0, D3DTSS_COLORARG2, D3DTA_DIFFUSE);を一応どこかに入れておくといい感じかも・・・。
このレンダーステート変更しないでも頂点色適応されるんでしたっけ?
もう既に書いてある場合すみませんです。
Re:3D上に三角形を書き色を塗る
>レンダーステート変更しないでも頂点色適応されるんでしたっけ?
補足ありがとうございます。
たしかテクスチャステージ0の D3DTSS_COLORARG2のデフォルトは D3DTA_CURRENT
(ステージ0での D3DTA_CURRENTは D3DTA_DIFFUSEと同じ)なので、
デフォルトから変更していなければ無くても大丈夫だと思います。
で、結局原因はよくわからないので、こちらで作成したかなりてきとーなサンプルを添付しておきます。
Render()でその処理を行っています。
違いを見比べてみて下さい。
# 0:22 最後の最後で直したところがおかしかったので添付のソースを修正しました。
Re:3D上に三角形を書き色を塗る
>>たしかテクスチャステージ0の D3DTSS_COLORARG2のデフォルトは D3DTA_CURRENT
なるほど!
横からレスしといて勝手に勉強させてもらいましたです。(笑)
やっぱり回答レスするのはもっと色々勉強してからにしよう。_| ̄|○
なるほど!
横からレスしといて勝手に勉強させてもらいましたです。(笑)
やっぱり回答レスするのはもっと色々勉強してからにしよう。_| ̄|○
Re:3D上に三角形を書き色を塗る
>横からレスしといて勝手に勉強させてもらいましたです。(笑)
>やっぱり回答レスするのはもっと色々勉強してからにしよう。_| ̄|○
いやいやいや、気付いたことがあればどんどんレス入れて下さい!
今回のにしても、テクスチャステージ周りを変更していたりしたら有効な回答ですよ。
Re:3D上に三角形を書き色を塗る
lpD3DDev->SetRenderState(D3DRS_LIGHTING, FALSE);
を付け加えたらできました><
ありがとうございます。
を付け加えたらできました><
ありがとうございます。