トップページ > 過去ログ > 記事閲覧
ポリゴン描画について
名前:くりあ 日時: 2011/10/18 09:31

DrawPolygon3D()関数を使用してポリゴンを描画してみたのですが、指定したテクスチャに比べて色が全体的に少し暗くなってしまいました。 元のテクスチャ通りにしたいのですが、どうしたらいいのでしょうか。 引数のディフューズカラーと、スペキュラカラーと言う項目はよく理解していないのでサンプルコードと同じにしています。 Vertex[ 0 ].dif = GetColorU8( 255,255,255,255 ) ; Vertex[ 0 ].spc = GetColorU8( 0, 0, 0, 0 ) ;

Page: 1 |

Re: ポリゴン描画について ( No.1 )
名前:かるて 日時:2011/10/18 11:39

特別な設定をしない限り陰影が入ってしまい、想定よりも暗くなるのは普通です。 元のテクスチャどおり、というのはそういった陰影をいれず、 本当にただテクスチャを表示したいだけ、というのであれば、 陰影を無視する設定にしなければいけません。 SetMaterialParam( MATERIALPARAM Material ) を使用します。 ディフューズカラー( 拡散光色 )とスペキュラカラー( 反射光色 )はゼロにして エミッシブカラー( 自己発光色 )のみを GetColorF( 1.0f, 1.0f, 1.0f, 1.0f )にしてみてはいかがでしょうか。
Re: ポリゴン描画について ( No.2 )
名前:くりあ 日時:2011/10/18 15:24

やってみたのですが、何も表示されなくなってしまいました。 DrawPolygon3D()とSetMaterialParam()の両方のディフューズカラーとスペキュラカラーを0にすればいいんですよね? 正直、法線の設定も自信が無いのでそのせいでしょうか……。
Re: ポリゴン描画について ( No.3 )
名前:かるて 日時:2011/10/18 21:07

エミッシブカラーは変更されましたか? 一応わたしの環境では以下のソースで問題なかったんですがいかがでしょう。 int GHundle ; VERTEX3D Vertex[ 3 ] ; MATERIALPARAM Material ; if( DxLib_Init() < 0 ) return -1 ;// DXライブラリの初期化 GHundle = LoadGraph( "test.jpg" ) ; Vertex[ 0 ].pos = VGet( 100.0f, 100.0f, 0.0f ) ; Vertex[ 0 ].norm = VGet( 0.0f, 0.0f, -1.0f ) ; Vertex[ 0 ].dif = GetColorU8( 0, 0, 0, 0 ) ; Vertex[ 0 ].spc = GetColorU8( 0, 0, 0, 0 ) ; Vertex[ 0 ].u = 1.0f ; Vertex[ 0 ].v = 1.0f ; Vertex[ 0 ].su = 0.0f ; Vertex[ 0 ].sv = 0.0f ; Vertex[ 1 ].pos = VGet( 250.0f, 100.0f, 0.0f ) ; Vertex[ 1 ].norm = VGet( 0.0f, 0.0f, -1.0f ) ; Vertex[ 1 ].dif = GetColorU8( 0, 0, 0, 0 ) ; Vertex[ 1 ].spc = GetColorU8( 0, 0, 0, 0 ) ; Vertex[ 1 ].u = 0.0f ; Vertex[ 1 ].v = 0.0f ; Vertex[ 1 ].su = 0.0f ; Vertex[ 1 ].sv = 0.0f ; Vertex[ 2 ].pos = VGet( 100.0f, 300.0f, 0.0f ) ; Vertex[ 2 ].norm = VGet( 0.0f, 0.0f, -1.0f ) ; Vertex[ 2 ].dif = GetColorU8( 0, 0, 0, 0 ) ; Vertex[ 2 ].spc = GetColorU8( 0, 0, 0, 0 ) ; Vertex[ 2 ].u = 0.0f ; Vertex[ 2 ].v = 0.0f ; Vertex[ 2 ].su = 0.0f ; Vertex[ 2 ].sv = 0.0f ; Material.Diffuse = GetColorF( 0.0f, 0.0f, 0.0f, 0.0f ) ; Material.Specular = GetColorF( 0.0f, 0.0f, 0.0f, 0.0f ) ; Material.Ambient = GetColorF( 0.0f, 0.0f, 0.0f, 0.0f ) ; Material.Emissive = GetColorF( 1.0f, 1.0f, 1.0f, 1.0f ) ; Material.Power = 20.0f ; SetMaterialParam( Material ) ; DrawPolygon3D( Vertex, 1, GHundle , FALSE ) ; WaitKey() ; DxLib_End() ; return 0 ;
Re: ポリゴン描画について ( No.4 )
名前:くりあ 日時:2011/10/19 07:42

すいません、SetMaterialParam()が反映されるのはその直後に呼び出したDrawPolygon3D()だけなんでしょうか? ループ内で呼んでいるDrawPolygon3D()の直前にSetMaterialParam()を呼んで、ディフューズカラーを全てGetColorU8(255,255,255,255)にすると暗くなくなったようなんですが。
Re: ポリゴン描画について ( No.5 )
名前:かるて 日時:2011/10/21 11:09

直後、と限定されることはないと思いますが、SetMaterialParam()を 呼び出した後に別の関数などで更に設定を変えてしまうと SetMaterialParam()の設定は反映されないと思います。 > ループ内で呼んでいるDrawPolygon3D()の直前にSetMaterialParam()を呼んで、ディフューズカラーを全てGetColorU8(255,255,255,255)にすると暗くなくなったようなんですが。 すみません。どのような状態になっているか想像できませんでした。 上のサンプルソースでは思い通りにならなかったということでしょうか? エミッシブカラーを変更した上でディフューズカラーを変更すると暗くなったのでしょうか? Material.Diffuse に GetColorU8(255,255,255,255) を設定されたのでしょうか? 可能であればくりあさんが記述されたソースを拝見させていただけると 問題点が明確になると思うのですが、難しいですか?
Re: ポリゴン描画について ( No.6 )
名前:くりあ 日時:2011/10/21 16:45

私の理解力と文章力がなく混乱させてしまって申し訳ありません。 SetMaterialParam()は私の勘違いでした。すいません。ちゃんと全てに反映されていました。 書いてくださったソースをそのまま新規ソースとして実行すると思った通りになってくれるのですが、 現在書いているソースの途中に書いて実行するとなにも表示されません。 そうなると当然私が何かしてしまっているのですがそれを見つけることも出来ず……。 ただ、現在書いているソース内でも載せていただいたソースの各頂点のディフューズカラーを全て GetColorU8( 255, 255, 255, 255) にすると、思ったとおりに表示されるようなのですが。 ソースはグチャグチャでここに載せるのはちょっと憚られます。我儘を言っているのは承知なのですが、もし何か今の情報だけで載せていただいたソースが思った通りの結果にならないのか原因が思い浮かぶならおっしゃっていただけたらと。 ここに質問する前に自力で何とかしてみようと思い、SetUseLighting(FALSE)等をやってみたりしたのですが、それも全て消してあると思っているのですが、関係あるでしょうか? とりあえずは 各頂点のディフューズカラーに GetColorU8(255,255,255,255) マテリアルのエミッシブカラーをGetColorF( 1.0f, 1.0f, 1.0f, 1.0f )にしSetMaterialParam()に渡す で暗くならず表示できているので分からなければいっそ解決にしてしまおうかと。 本当にすいません。
Re: ポリゴン描画について ( No.7 )
名前:かるて 日時:2011/10/24 12:26

すみません、書いていただいた状況に対して、有効な情報はわたしは持ち合わせておりません。 ただ、当初ディフューズカラーとスペキュラカラーをゼロしたほうがよい、と書いたのが、 DXライブラリのためではなく、他の3Dソフトと連携操作する際に混乱が起きないようにするためでした。 他の方が何か有効な対処方法をご存知でしたらよいのですが、わたしではこれ以上の情報は提供できません。 力不足ですみません。
Re: ポリゴン描画について ( No.8 )
名前:くりあ(解決) 日時:2011/10/24 14:56

こちらこそ無理を言ってしまい本当に申し訳ありません。 お応えいただきありがとうございました。
Re: ポリゴン描画について ( No.9 )
名前:うさこ 日時:2011/10/26 19:34

解決済み、のようですが私も同じ状況になっていたので投稿させていただきます。 私のしている方法は根本的な解決とは違うかもしれませんが(しかも計算量が増えます)、ライトを増やして明るさを上げました。 はじめに設定されているライトは天井(太陽光)だけだと思いますが、カメラ方向からもライトを当ててやることで、画面が明るくなります。 詳しくはライト関係のリファレンスを見て実装してみてください

Page: 1 |