トップページ > 過去ログ > 記事閲覧
DrawPolygon3DのUV座標指定
名前:cdd 日時: 2009/12/02 18:30

こんにちは。 DrawPolygon3Dを使うと、テクスチャ座標(UV)が設定できるようですが、うまくできません。 UVマッピングというのは0.0f〜1.0fの範囲外を指定するとその分だけテクスチャが繰り返されると思うのですが、思い通りにテクスチャが繰り返されません。 (下記のソース実行時の右側の三角形) なぜでしょうか? 使い方が間違っているのか、自分の考え方が論外なのか、ライブラリの仕様なのか よく分かりません。 アドバイスのほど、宜しくお願いします。 --- #include "DxLib.h" int WINAPI WinMain( HINSTANCE hInstance, HINSTANCE hPrevInstance, LPSTR lpCmdLine, int nCmdShow ) { VERTEX3D Vertex[ 6 ] ; int GrHandle; ChangeWindowMode( TRUE ); if( DxLib_Init() < 0 ) return -1 ; GrHandle = LoadGraph( "C:\\WINDOWS\\大草原の風.bmp" ) ; Vertex[ 0 ].pos = VGet( 100.0f, 100.0f, 0.0f ) ; Vertex[ 0 ].norm = VGet( 0.0f, 0.0f, -1.0f ) ; Vertex[ 0 ].dif = GetColorU8( 255,255,255,255 ) ; Vertex[ 0 ].spc = GetColorU8( 0, 0, 0, 0 ) ; Vertex[ 0 ].u = 0.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( 255,255,255,255 ) ; Vertex[ 1 ].spc = GetColorU8( 0, 0, 0, 0 ) ; Vertex[ 1 ].u = 1.0f ; Vertex[ 1 ].v = 1.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( 255,255,255,255 ) ; 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 ; Vertex[ 3 ].pos = VGet( 300.0f, 100.0f, 0.0f ) ; Vertex[ 3 ].norm = VGet( 0.0f, 0.0f, -1.0f ) ; Vertex[ 3 ].dif = GetColorU8( 255,255,255,255 ) ; Vertex[ 3 ].spc = GetColorU8( 0, 0, 0, 0 ) ; Vertex[ 3 ].u = 0.0f ; Vertex[ 3 ].v = 2.0f ; Vertex[ 3 ].su = 0.0f ; Vertex[ 3 ].sv = 0.0f ; Vertex[ 4 ].pos = VGet( 450.0f, 100.0f, 0.0f ) ; Vertex[ 4 ].norm = VGet( 0.0f, 0.0f, -1.0f ) ; Vertex[ 4 ].dif = GetColorU8( 255,255,255,255 ) ; Vertex[ 4 ].spc = GetColorU8( 0, 0, 0, 0 ) ; Vertex[ 4 ].u = 2.0f ; Vertex[ 4 ].v = 2.0f ; Vertex[ 4 ].su = 0.0f ; Vertex[ 4 ].sv = 0.0f ; Vertex[ 5 ].pos = VGet( 300.0f, 300.0f, 0.0f ) ; Vertex[ 5 ].norm = VGet( 0.0f, 0.0f, -1.0f ) ; Vertex[ 5 ].dif = GetColorU8( 255,255,255,255 ) ; Vertex[ 5 ].spc = GetColorU8( 0, 0, 0, 0 ) ; Vertex[ 5 ].u = 0.0f ; Vertex[ 5 ].v = 0.0f ; Vertex[ 5 ].su = 0.0f ; Vertex[ 5 ].sv = 0.0f ; DrawPolygon3D( Vertex, 2, GrHandle, FALSE ) ; WaitKey() ; DxLib_End() ; return 0 ; }

Page: 1 |

Re: DrawPolygon3DのUV座標指定 ( No.1 )
名前:sy(サイ) 日時:2009/12/02 18:54

どの方向にいくら繰り返したいのでしょうか? これだと、右側の3角形だけ変な形になる気がするのですが…
Re: DrawPolygon3DのUV座標指定 ( No.2 )
名前:cdd 日時:2009/12/02 19:07

ご回答ありがとうございます。 ちょっとソースについて追記説明します。 2つの三角形のうち、左側が普通に表示した三角形で、 右側がその問題の、テクスチャを繰り返したい三角形です。 (よって、左側の三角形は関係なく 無視してもらって構いません。) 言葉では非常に説明しにくいのですが、 右側の三角形のテクスチャを上下に2枚左右に2枚、計3枚ということになります。 なお、「各ポリゴン(三角形)に一枚ずつ張って、繰り返したい分だけポリゴンを増やす」 といった方法は出来るだけ避けたいです。 非常に分かりにくい説明ですが、宜しくお願いします。
Re: DrawPolygon3DのUV座標指定 ( No.3 )
名前:sy(サイ) 日時:2009/12/03 00:14

3角形の状態で良いのでしょうか?ちょっと趣旨が分からないですが… 紙に書いて整理することを今後は強くお勧めします。 そもそも、ポリゴン繋がって無いですね。その点でどんなに頑張ってもおかしくなるやもしれません。
Re: DrawPolygon3DのUV座標指定 ( No.4 )
名前:sy(サイ) 日時:2009/12/03 00:28

すいません、思い出しました。 これ繰り返すかどうかのフラグがDirectXにあった気がします。 的外れな返答申し訳ないです。 なんか関数で用意されてるかもなので管理人さま待ちと言う事で^^;
Re: DrawPolygon3DのUV座標指定 ( No.5 )
名前:white 日時:2009/12/03 06:50

>これ繰り返すかどうかのフラグがDirectXにあった気がします。 もしかしたら SetTextureAddressMode( DX_TEXADDRESS_WRAP ) ; ※もしくはSetTextureAddressModeUV(引数〜); でしょうか? ただ読み込んだモデルや全体でなく、個別のテクスチャ、 ポリゴン単位での指定方法は分かりませんが…。 間違っていたらごめんなさい。
Re: DrawPolygon3DのUV座標指定 ( No.6 )
名前:cdd 日時:2009/12/03 21:23

回答ありがとうございます。 目的の処理はSetTextureAddressModeで間違いありません。 UVマッピングには色々な種類があり、DirectXにフラグが存在するのですね。 問題は解決しました。 皆さんありがとうございました。

Page: 1 |