3D上に三角形を書き色を塗る

フォーラム(掲示板)ルール
フォーラム(掲示板)ルールはこちら  ※コードを貼り付ける場合は [code][/code] で囲って下さい。詳しくはこちら
素人

3D上に三角形を書き色を塗る

#1

投稿記事 by 素人 » 16年前

今回初めて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));

Justy

Re:3D上に三角形を書き色を塗る

#2

投稿記事 by Justy » 16年前

 その構造体 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

素人

Re:3D上に三角形を書き色を塗る

#3

投稿記事 by 素人 » 16年前

レスありがとうございます。

D3DCOLOR_ARGBの引数が少ないと警告が出たのですが
D3DCOLOR_ARGB(255, 0, 0), をD3DCOLOR_ARGB(255,255, 0, 0)に直しても大丈夫でしょうか?
                      ↑一つ目は透明度?

また
error C2039: 'SetFV' : 'IDirect3DDevice9' のメンバではありません。
'IDirect3DDevice9' の宣言を確認してください。
とエラーが出てしまいます。

素人

連スレすいません

#4

投稿記事 by 素人 » 16年前

SetFVFにしたらエラーがでませんでした><
ただ色が黒のまま変更されません・・・

Justy

Re:3D上に三角形を書き色を塗る

#5

投稿記事 by Justy » 16年前

 すみません。
 D3DCOLOR_ARGBに関しては一つ目の引数に透明度を加えると言うことでOKです。
 SetFVの方はご指摘の通り SetFVFです。

トピ主

Re:3D上に三角形を書き色を塗る

#6

投稿記事 by トピ主 » 16年前

Justy様
せっかく説明していただいているのに挙げ足を取ってしまうような言い方になり申し訳ないです。

色の方が黒から変更されないのですが、色を読み込めていないのでしょうか?

Justy

Re:3D上に三角形を書き色を塗る

#7

投稿記事 by Justy » 16年前


>ただ色が黒のまま変更されません・・・

 うーん、何ででしょうね。
 今こちらでテストコードを書いてみたのですが、普通に赤い三角形が出ました。

 全体のコードとかって、提示できますか?

t_white

Re:3D上に三角形を書き色を塗る

#8

投稿記事 by t_white » 16年前

自分も最近DirectXに手をつけ始めたので間違っていると悪いのですが
//	頂点の色を使用する
	m_pD3DDevice->SetTextureStageState(0, D3DTSS_COLORARG2, D3DTA_DIFFUSE);
を一応どこかに入れておくといい感じかも・・・。

このレンダーステート変更しないでも頂点色適応されるんでしたっけ?
もう既に書いてある場合すみませんです。

Justy

Re:3D上に三角形を書き色を塗る

#9

投稿記事 by Justy » 16年前


>レンダーステート変更しないでも頂点色適応されるんでしたっけ?

 補足ありがとうございます。
 たしかテクスチャステージ0の D3DTSS_COLORARG2のデフォルトは D3DTA_CURRENT
(ステージ0での D3DTA_CURRENTは D3DTA_DIFFUSEと同じ)なので、
デフォルトから変更していなければ無くても大丈夫だと思います。


 で、結局原因はよくわからないので、こちらで作成したかなりてきとーなサンプルを添付しておきます。
 Render()でその処理を行っています。
 違いを見比べてみて下さい。



# 0:22 最後の最後で直したところがおかしかったので添付のソースを修正しました。

t_white

Re:3D上に三角形を書き色を塗る

#10

投稿記事 by t_white » 16年前

>>たしかテクスチャステージ0の D3DTSS_COLORARG2のデフォルトは D3DTA_CURRENT
なるほど!
横からレスしといて勝手に勉強させてもらいましたです。(笑)
やっぱり回答レスするのはもっと色々勉強してからにしよう。_| ̄|○

Justy

Re:3D上に三角形を書き色を塗る

#11

投稿記事 by Justy » 16年前


>横からレスしといて勝手に勉強させてもらいましたです。(笑)
>やっぱり回答レスするのはもっと色々勉強してからにしよう。_| ̄|○

 いやいやいや、気付いたことがあればどんどんレス入れて下さい!
 今回のにしても、テクスチャステージ周りを変更していたりしたら有効な回答ですよ。

素人

Re:3D上に三角形を書き色を塗る

#12

投稿記事 by 素人 » 16年前

lpD3DDev->SetRenderState(D3DRS_LIGHTING, FALSE);

を付け加えたらできました><

ありがとうございます。

閉鎖

“C言語何でも質問掲示板” へ戻る