トップページ > 記事閲覧
画像の透過について
名前:なのか 日時: 2025/05/18 01:55

初めまして。解決法がわからなかったため2件ほど質問させていただきます。 一番下に該当コード張ってます。 ・1つ目 DrawRotaGraph3Dを使用して3D空間に画像を表示し、SetDrawBlendModeを使ってフェードアウトさせているのですが、 SetDrawAlphaTestを使用しているため、フェードが上手くいきません(mfFadeが128を下回ったらパッと消える)。 mfFadeが128以下になったらSetDrawAlphaTestの値を小さくして対処しようとしたのですが、そうすると透明な四角形が違和感ある形で出てきて、 うまくいきませんでした(フェードアウトは綺麗にされます)。 この場合、フェード処理はどう作るべきでしょうか? ・2つ目 画像が実際に3D空間上に現れてフェードアウトする際、後ろの3Dモデルは透過で見えているのですが、 DrawGraph3Dで表示した他の画像が全く見えなくなっていました。これは描画順などが原因でしょうか? int a, b; GetDrawAlphaTest(&a, &b); // フェードアウトさせる SetDrawBlendMode(DX_BLENDMODE_ALPHA, mfFade); SetDrawBright(mnColor.R, mnColor.G, mnColor.B); SetDrawAlphaTest(DX_CMP_GREATEREQUAL, 128); DrawRotaGraph3D( mvPosition.x, mvPosition.y, mvPosition.z, mfSize, mfAngle * DX_PI_F / 180.0f, mnTextureHandle, TRUE ); SetDrawAlphaTest(a, b); SetDrawBright(255,255,255); //フェード後始末 SetDrawBlendMode(DX_BLENDMODE_NOBLEND, 0);
メンテ

Page: 1 |

Re: 画像の透過について ( No.1 )
名前:管理人 日時:2025/05/18 05:19

> ・1つ目 > DrawRotaGraph3Dを使用して3D空間に画像を表示し、SetDrawBlendModeを使ってフェードアウトさせているのですが、 > SetDrawAlphaTestを使用しているため、フェードが上手くいきません(mfFadeが128を下回ったらパッと消える)。 > mfFadeが128以下になったらSetDrawAlphaTestの値を小さくして対処しようとしたのですが、そうすると透明な四角形が違和感ある形で出てきて、 > うまくいきませんでした(フェードアウトは綺麗にされます)。 どのような画像を表示されているのかが不明なので的確なご返答となっていないかもしれませんが、 SetDrawAlphaTest の値を 128 以下にしても透明な四角形が表示されないように 画像の方を調整していただくしかないと思います > ・2つ目 > 画像が実際に3D空間上に現れてフェードアウトする際、後ろの3Dモデルは透過で見えているのですが、 > DrawGraph3Dで表示した他の画像が全く見えなくなっていました。これは描画順などが原因でしょうか? 手元で以下のような、載せていただいたプログラムを使用した DrawRotaGraph3D の描画の後、 DrawGraph3D で単純に描画する、というテストプログラムを組んでみたのですが、 DrawGraph3D で描画した画像が表示されないということはありませんでした #include "DxLib.h" int WINAPI WinMain( HINSTANCE hInstance, HINSTANCE hPrevInstance, LPSTR lpCmdLine, int nCmdShow ) { // ウインドウモードで起動 ChangeWindowMode( TRUE ) ; // DXライブラリの初期化 if( DxLib_Init() < 0 ) return -1 ; // 画像の読み込み int GrHandle = LoadGraph( "Test1.bmp" ) ; // 描画先を裏画面にする SetDrawScreen( DX_SCREEN_BACK ) ; // メインループ while( ProcessMessage() == 0 ) { // 画面のクリア ClearDrawScreen() ; int a, b; GetDrawAlphaTest(&a, &b); // フェードアウトさせる SetDrawBlendMode(DX_BLENDMODE_ALPHA, 128); SetDrawBright(0,255,0); SetDrawAlphaTest(DX_CMP_GREATEREQUAL, 128); DrawRotaGraph3D( 320, 240, 0, 1.0, 0.0, GrHandle, TRUE ); SetDrawAlphaTest(a, b); SetDrawBright(255,255,255); //フェード後始末 SetDrawBlendMode(DX_BLENDMODE_NOBLEND, 0); DrawGraph3D( 128, 0, 0, GrHandle, TRUE ) ; // 裏画面の内容を表画面に反映 ScreenFlip() ; } // DXライブラリの後始末 DxLib_End() ; // ソフトの終了 return 0 ; } なので現状では『全体のコードを拝見しないと原因は不明』というご返答となります
メンテ
Re: 画像の透過について ( No.2 )
名前:なのか 日時:2025/06/09 16:31

すぐにご返信したかったのですが、私事で少しバタついてしまい、気づけばかなり時間が経ってしまいました。一言の連絡もなく大変申し訳ありません。 2つ目の件についてなのですが、恐らくZソートというものが原因で、フェードで透過する際、後ろにあるはずの画像が描画順の関係で見えなくなっている、というものでした。 DxlibにZソートに関しての関数等はありますでしょうか?もしない場合は自分でソートしようと思うのですが、"カメラからの距離に合わせて奥から描画する"ということであっていますでしょうか?
メンテ
Re: 画像の透過について ( No.3 )
名前:管理人 日時:2025/06/09 22:55

> DxlibにZソートに関しての関数等はありますでしょうか? いえ、ありません、DrawGraph3D 等の3D描画関数が呼ばれた場合、即座に描画処理が実行する仕様となっています > もしない場合は自分でソートしようと思うのですが、"カメラからの距離に合わせて奥から描画する"ということであっていますでしょうか? はい、合っています
メンテ
Re: 画像の透過について ( No.4 )
名前:なのか(解決) 日時:2025/06/11 12:29

分かりました ありがとうございます。
メンテ

Page: 1 |

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

   クッキー保存