トップページ > 過去ログ > 記事閲覧
DrawPolygonIndexed3D
名前:Masao 日時: 2010/01/29 05:36

この関数を使い始めたのですが、 どうも両面表示になっているみたいなのですが、これを片面表示できないでしょうか? 両面だと処理が多少重くなるのではないかと思ったまでですが、重くならないのなら満足です。 追加で質問なのですが、 透明度は、モデルのときは以下の関数をつかっていました。 MV1SetOpacityRate DrawPolygonIndexed3Dでの描画の場合は、頂点のどの値を調整すればいいのでしょうか? または、どのような方法をとればいいでしょうか?

Page: 1 |

Re: DrawPolygonIndexed3D ( No.1 )
名前:管理人 日時:2010/01/31 22:37

> 片面表示 非公開関数の SetUseBackCulling を使用すれば片面表示になります // ポリゴンカリングの有効、無効をセットする int SetUseBackCulling( int Flag ) ; デフォルトでは SetUseBackCulling( FALSE ) ; になっていますので、 SetUseBackCulling( TRUE ) ; を実行すれば片面表示になります > 透明度 全体の透明度を変更したいのでしたら DrawGraph などと同様に SetDrawBlendMode で透明度を変更できます 頂点の透明度を個別に指定されたい場合は SetDrawBlendMode( DX_BLENDMODE_ALPHA, 255 ) ; を実行して 描画モードをアルファブレンドに変更すれば、以降 DrawPolygonIndexed3D に渡す頂点データ配列の メンバ変数で COLOR_U8 構造体型の dif のメンバ変数 a の値が不透明度の度合いになります( 0(完全透明) 〜 255(完全不透明) ) DrawPolygonIndexed3D のサンプルで頂点毎にカラーを変更する代わりに 透明度( アルファ値 )を変更してみました( GetColorU8 関数の第4引数がアルファ値です ) ↓ #include "DxLib.h" int WINAPI WinMain( HINSTANCE hInstance, HINSTANCE hPrevInstance, LPSTR lpCmdLine, int nCmdShow ) { VERTEX3D Vertex[ 4 ] ; WORD Index[ 6 ] ; ChangeWindowMode( TRUE ) ; // DXライブラリの初期化 if( DxLib_Init() < 0 ) { // エラーが発生したら直ちに終了 return -1 ; } // 4頂点分のデータをセット 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 = 0.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,128 ) ; 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( 255,255,255, 64 ) ; 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( 400.0f, 200.0f, 0.0f ) ; Vertex[ 3 ].norm = VGet( 0.0f, 0.0f, -1.0f ) ; Vertex[ 3 ].dif = GetColorU8( 255,255,255, 0 ) ; Vertex[ 3 ].spc = GetColorU8( 0, 0, 0, 0 ) ; Vertex[ 3 ].u = 0.0f ; Vertex[ 3 ].v = 0.0f ; Vertex[ 3 ].su = 0.0f ; Vertex[ 3 ].sv = 0.0f ; // 2ポリゴン分のインデックスデータをセット Index[ 0 ] = 0 ; Index[ 1 ] = 1 ; Index[ 2 ] = 2 ; Index[ 3 ] = 3 ; Index[ 4 ] = 2 ; Index[ 5 ] = 1 ; // 画面を真っ青にする DrawBox( 0, 0, 640, 480, GetColor( 0,0,255 ), TRUE ) ; // 描画ブレンドモードをアルファブレンドにする SetDrawBlendMode( DX_BLENDMODE_ALPHA, 255 ) ; // 2ポリゴンの描画 DrawPolygonIndexed3D( Vertex, 4, Index, 2, DX_NONE_GRAPH, FALSE ) ; // キー入力待ちをする WaitKey() ; // DXライブラリの後始末 DxLib_End() ; // ソフトの終了 return 0 ; }
Re: DrawPolygonIndexed3D ( No.2 )
名前:Masao 日時:2010/02/01 03:03

思い通りにできました。 サンプルまでご用意してただき、ありがとうございます。

Page: 1 |