トップページ > 記事閲覧
DrawPolygon2Dを使用して徐々に透明に
名前:コモリ 日時: 2020/08/18 18:40

DrawPolygon2Dを使用して右にいくほど透明にするプログラム...のはずなのですがアルファ値が反映されていません。 alpha1,alpha2どちらの値を変えても、結果は同じです。 コードはC#版です。 ご教授よろしくお願いいたしますm(_ _)m public static void GradX_RGB(int x1, int y1, int x2, int y2, int read, int green, int blue, int alpha1, int alpha2) { DX.VERTEX2D[] Vertex = new DX.VERTEX2D[6]; // 左上の頂点の情報をセット( 1ポリゴン目の第1頂点 ) Vertex[0].pos.x = (float)x1; Vertex[0].pos.y = (float)y1; Vertex[0].pos.z = 0.0f; Vertex[0].rhw = 1.0f; Vertex[0].dif = DX.GetColorU8(read, green, blue, alpha1); Vertex[0].u = 0.0f; Vertex[0].v = 0.0f; // 右上の頂点の情報をセット( 1ポリゴン目の第2頂点 ) Vertex[1].pos.x = (float)x2; Vertex[1].pos.y = (float)y1; Vertex[1].pos.z = 0.0f; Vertex[1].rhw = 1.0f; Vertex[1].dif = DX.GetColorU8(read, green, blue, alpha2); Vertex[1].u = 0.0f; Vertex[1].v = 0.0f; // 左下の頂点の情報をセット( 1ポリゴン目の第3頂点 ) Vertex[2].pos.x = (float)x1; Vertex[2].pos.y = (float)y2; Vertex[2].pos.z = 0.0f; Vertex[2].rhw = 1.0f; Vertex[2].dif = DX.GetColorU8(read, green, blue, alpha1); Vertex[2].u = 0.0f; Vertex[2].v = 0.0f; // 右下の頂点の情報をセット( 2ポリゴン目の第1頂点 ) Vertex[3].pos.x = (float)x2; Vertex[3].pos.y = (float)y2; Vertex[3].pos.z = 0.0f; Vertex[3].rhw = 1.0f; Vertex[3].dif = DX.GetColorU8(read, green, blue, alpha2); Vertex[3].u = 0.0f; Vertex[3].v = 0.0f; // 2ポリゴン目の第2頂点は左下の頂点なのでコピー Vertex[4] = Vertex[2]; // 2ポリゴン目の第3頂点は右上の頂点なのでコピー Vertex[5] = Vertex[1]; // ポリゴンを2個描画 DX.DrawPolygon2D(Vertex, 2, DX.DX_NONE_GRAPH, DX.TRUE); }
メンテ

Page: 1 |

Re: DrawPolygon2Dを使用して徐々に透明に ( No.1 )
名前:管理人 日時:2020/08/19 00:35

SetDrawBlendMode( DX_BLENDMODE_ALPHA, 255 ); を実行されていない( ブレンドモードが DX_BLENDMODE_NOBLEND のまま ) ということはないでしょうか? C++ のコードですが、一応以下のような DrawPolygon2D で左端と右端で透明度が異なる四角形を描画するプログラムを 組んでみましたが、正常に透明な四角形が描画できました #include "DxLib.h" int WINAPI WinMain( HINSTANCE hInstance, HINSTANCE hPrevInstance, LPSTR lpCmdLine, int nCmdShow ) { VERTEX2D Vert[ 6 ] ; int a1 = 255, add1 = -2 ; int a2 = 0, add2 = 2 ; // ウィンドウモードで起動 ChangeWindowMode( TRUE ) ; // DXライブラリの初期化 if( DxLib_Init() < 0 ) return -1; // 描画先を裏画面に変更 SetDrawScreen( DX_SCREEN_BACK ) ; // メインループ while( ProcessMessage() == 0 ) { // 裏画面をクリア ClearDrawScreen() ; // アルファ値を変更 a1 += add1 ; if( a1 <= 0 ) { a1 = 0 ; add1 = -add1 ; } if( a1 >= 255 ) { a1 = 255 ; add1 = -add1 ; } a2 += add2 ; if( a2 <= 0 ) { a2 = 0 ; add2 = -add2 ; } if( a2 >= 255 ) { a2 = 255 ; add2 = -add2 ; } // 四角形を描画 DrawBox( 100, 100, 640, 480, GetColor( 0,200,128 ), TRUE ) ; // ブレンドモードをアルファブレンドに設定 SetDrawBlendMode( DX_BLENDMODE_ALPHA, 255 ) ; // 2ポリゴン分の頂点のデータをセットアップ Vert[ 0 ].pos = VGet( 0.0f, 0.0f, 0.0f ) ; Vert[ 0 ].rhw = 1.0f ; Vert[ 0 ].dif = GetColorU8( 200,200,0,a1 ) ; Vert[ 0 ].u = 0.0f ; Vert[ 0 ].v = 0.0f ; Vert[ 1 ].pos = VGet( 456.0f, 0.0f, 0.0f ) ; Vert[ 1 ].rhw = 1.0f ; Vert[ 1 ].dif = GetColorU8( 200,200,0,a2 ) ; Vert[ 1 ].u = 0.0f ; Vert[ 1 ].v = 0.0f ; Vert[ 2 ].pos = VGet( 0.0f, 456.0f, 0.0f ) ; Vert[ 2 ].rhw = 1.0f ; Vert[ 2 ].dif = GetColorU8( 200,200,0,a1 ) ; Vert[ 2 ].u = 0.0f ; Vert[ 2 ].v = 0.0f ; Vert[ 3 ].pos = VGet( 456.0f, 456.0f, 0.0f ) ; Vert[ 3 ].rhw = 1.0f ; Vert[ 3 ].dif = GetColorU8( 200,200,0,a2 ) ; Vert[ 3 ].u = 0.0f ; Vert[ 3 ].v = 0.0f ; Vert[ 4 ].pos = VGet( 0.0f, 456.0f, 0.0f ) ; Vert[ 4 ].rhw = 1.0f ; Vert[ 4 ].dif = GetColorU8( 200,200,0,a1 ) ; Vert[ 4 ].u = 0.0f ; Vert[ 4 ].v = 0.0f ; Vert[ 5 ].pos = VGet( 456.0f, 0.0f, 0.0f ) ; Vert[ 5 ].rhw = 1.0f ; Vert[ 5 ].dif = GetColorU8( 200,200,0,a2 ) ; Vert[ 5 ].u = 0.0f ; Vert[ 5 ].v = 0.0f ; // 2Dの2ポリゴンの描画 DrawPolygon2D( Vert, 2, DX_NONE_GRAPH, TRUE ) ; // 裏画面の内容を表画面に反映 ScreenFlip() ; } // DXライブラリの後始末 DxLib_End(); // ソフトの終了 return 0; }
メンテ
Re: DrawPolygon2Dを使用して徐々に透明に ( No.2 )
名前:コモリ(解決) 日時:2020/08/19 01:23

SetDrawBlendMode( DX_BLENDMODE_ALPHA, 255 ) をしていない事が原因でした... 対応ありがとうございましたm(_ _)m
メンテ

Page: 1 |

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

   クッキー保存