トップページ > 記事閲覧
DrawPolygonBase関数について
名前:ただいぬ 日時: 2013/06/04 16:09

はじめましてただいぬです。 突然の質問で申し訳無いのですが、 現在DXライブラリでDrawGraph関数などを使って簡単な2Dのゲームを作っているのですが、 画面やエフェクトを歪ませたいと考えていて、DrawPolygonBase関数を使うべきだという話を聞きました。 しかしVERTEX構造体と関数の仕様がほとんど分かりません。 C/C++の文法はある程度分かるのですがVERTEX構造体のu,vとx,yの関連性などがさっぱり分かりません。 私が画像処理に関して無知であることが原因だと思うので、 この構造体と関数を理解するために何を(どこで)勉強するべきかとVERTEX構造体と関数の仕様を教えて下さい。 よろしくお願いします。
メンテ

Page: 1 |

Re: DrawPolygonBase関数について ( No.1 )
名前:Will 日時:2013/06/04 09:36

他サイトの掲示板ですが、以下のスレが参考になるかと思います。 http://dixq.net/forum/viewtopic.php?f=3&t=2581 # VERTEXはクラスではなく構造体です。
メンテ
Re: DrawPolygonBase関数について ( No.2 )
名前:ただいぬ 日時:2013/06/04 16:10

Willさん回答有り難うございます。 クラスは構造体に質問文を直しました。 回答に関してなのですが、DrawPolygonBase関数があることを知ったのが、 Will教えて下さったアドレスの掲示板のスレッドで、 そこを読んでもいまいち概要が掴めなかったので質問するに至りました。 最初にそのことを書いておくべきでした……
メンテ
Re: DrawPolygonBase関数について ( No.3 )
名前:管理人 日時:2013/06/04 23:42

DrawPolygonBase より DrawPolygon2D の方が高速で且つ分かりやすいので、 よろしければ DrawPolygon2D をお使いください DrawPolygon2D で画像を画面左上端に 256x256 の正方形に描画するプログラムは 以下のようになります #include "DxLib.h" int WINAPI WinMain( HINSTANCE hInstance, HINSTANCE hPrevInstance, LPSTR lpCmdLine, int nCmdShow ) { int texhandle ; VERTEX2D Vert[ 6 ] ; ChangeWindowMode( TRUE ) ; // DXライブラリの初期化 if( DxLib_Init() < 0 ) return -1; // テクスチャを読み込む texhandle = LoadGraph( "Tex1.bmp" ) ; // 2ポリゴン分の頂点のデータをセットアップ Vert[ 0 ].pos = VGet( 0.0f, 0.0f, 0.0f ) ; Vert[ 0 ].rhw = 1.0f ; Vert[ 0 ].dif = GetColorU8( 255,255,255,255 ) ; Vert[ 0 ].u = 0.0f ; Vert[ 0 ].v = 0.0f ; Vert[ 1 ].pos = VGet( 256.0f, 0.0f, 0.0f ) ; Vert[ 1 ].rhw = 1.0f ; Vert[ 1 ].dif = GetColorU8( 255,255,255,255 ) ; Vert[ 1 ].u = 1.0f ; Vert[ 1 ].v = 0.0f ; Vert[ 2 ].pos = VGet( 0.0f, 256.0f, 0.0f ) ; Vert[ 2 ].rhw = 1.0f ; Vert[ 2 ].dif = GetColorU8( 255,255,255,255 ) ; Vert[ 2 ].u = 0.0f ; Vert[ 2 ].v = 1.0f ; Vert[ 3 ].pos = VGet( 256.0f, 256.0f, 0.0f ) ; Vert[ 3 ].rhw = 1.0f ; Vert[ 3 ].dif = GetColorU8( 255,255,255,255 ) ; Vert[ 3 ].u = 1.0f ; Vert[ 3 ].v = 1.0f ; Vert[ 4 ].pos = VGet( 0.0f, 256.0f, 0.0f ) ; Vert[ 4 ].rhw = 1.0f ; Vert[ 4 ].dif = GetColorU8( 255,255,255,255 ) ; Vert[ 4 ].u = 0.0f ; Vert[ 4 ].v = 1.0f ; Vert[ 5 ].pos = VGet( 256.0f, 0.0f, 0.0f ) ; Vert[ 5 ].rhw = 1.0f ; Vert[ 5 ].dif = GetColorU8( 255,255,255,255 ) ; Vert[ 5 ].u = 1.0f ; Vert[ 5 ].v = 0.0f ; // 2Dの2ポリゴンの描画 DrawPolygon2D( Vert, 2, texhandle, TRUE ) ; // キー入力待ち WaitKey() ; // DXライブラリの後始末 DxLib_End(); // ソフトの終了 return 0; } VERTEX2D構造体3つで一つのポリゴンの情報となります 上記サンプルでは 2ポリゴン描画するので VERTEX2D構造体6つの配列を使用しています VERTEX2D構造体のメンバ変数 pos は画面座標です、pos は VECTOR構造体で、メンバ変数は x, y, z ですが、z は常に0.0fにしておいてください VERTEX2D構造体のメンバ変数 rhw は常に1.0fにしておいてください VERTEX2D構造体のメンバ変数 difは COLOR_U8構造体です、GetColorU8 で値を代入すると楽です VERTEX2D構造体のメンバ変数 u, v はテクスチャ座標です、テクスチャ画像の端から端を 0.0f 〜 1.0f で表現する値です 上記サンプルの u, v値を 0.1f や 0.2f など少し値を変更して実行すると意味が分かると思います DrawPolygon2D に渡す画像ハンドルは普通に LoadGraph で読み込んで取得できるハンドルを使用しますが、 制限として画像の幅、高さのピクセル数が 2, 4, 8, 16, 32, 64, 128, 256, 512, 1024, 2048 といった、 2のn乗の数である必要があります ○ 256 x 256 ○ 512 x 128 ○ 64 x 1024 × 100 x 100 × 58 x 70 × 512 x 300 幅、高さのピクセル数が2のn乗ではない画像も LoadGraph で普通に読み込むことができますが、 DrawPolygon2D や DrawPolygonBase などで使用すると意図した描画結果を得ることはできませんので 注意してください
メンテ
Re: DrawPolygonBase関数について ( No.4 )
名前:ただいぬ(解決) 日時:2013/06/05 20:28

管理人さん回答ありがとうございます。 とりあえず画像を歪ませることができました。 自由に動かすにはテクスチャ座標などの勉強が必要みたいですが、 関数引数などの意味はだいたい分かったので試行錯誤していこうと思います。 改めて回答してくださったお二方、本当にありがとうございました。
メンテ

Page: 1 |

題名
名前
コメント
パスワード (記事メンテ時に使用)

   クッキー保存