title_parttitle_parttitle_part
静岡県浜松市であれこれソフトを開発している A.K.I Software のブログです。日々の開発日記やサーバー・セキュリティ関連の話題なども掲載。
<< 2024/03 >>12345678910111213141516171819202122232425262728293031
《《《 ネットワーク機器の購入は Amazon で! 》》》
Powered by BLOM OpenGL で透過処理と半透明
小さくも大きくも閉じたりもしません
09/01/22 12:16 / ゲーム開発

以前作成していたオリジナルの3Dレンダーエンジンでは半透明や透過処理を内部で計算して処理をしていたのですが OpenGL の場合はレンダリングを任せてしまいますので、計算でやることができません。
その代わりテクスチャを指定する際にアルファブレンドの指定ができますのでそれで処理をすることにします。

具体的には glTexImage2D で GL_RGB を指定していた際に GL_RGBA を指定して、テクスチャイメージを読み込む際にアルファチャンネルも指定することです。
本来はアルファチャンネルを標準でサポートしている png や PSD などを利用すると便利なのですが、今のところテクスチャソースには Bitmap を利用したいと考えているので、Bitmap からイメージを読み込む際に

1)NULLカラーを指定して透過場所を指定する。
2)テクスチャイメージ全体にアルファを指定して RGB から RGBA を生成して読み込ませる。

1は、昔ながらの $FF00FF などを指定して Bitmap ファイルから読み込む際に、アルファ値を 0 か 255 にします。

2は、テクスチャ全体にアルファで指定した値を設定してアルファ値を与えます。(ここでは単純にアルファを 0% 〜 100% で指定しますので、TexAlpha = (255 / 100) * alpha
となりますね)

24bit無圧縮Bitmapの場合は、BITMAPFILEHEADER の次に BITMAPINFOHEADER が来て(各ヘッダに raw データへのオフセットがあるのでシークしておいてから)RGB形式でベタで記録されています。リトルエディアン等に気をつけて RGB の順番に読み込んだ上で、OpenGL に渡すバッファに A を付け加えていくという寸法です。

Bitmap File
[BITMAPFILEHEADER]
[BITMAPINFOHEADER]
RGBRGBRGBRGB...
↑ここの先頭から 3byte 読み込んで RGB に計算した A を追加して RGBA にしてバッファに格納。
raw データの長さだけ繰り返しデータが出来上がりましたら、
glTexImage2D(GL_TEXTURE_2D, 0, GL_RGBA, 128, 128, 0, GL_RGBA, GL_UNSIGNED_BYTE, @TexID,TexBuff[0]);
という感じで渡します。
あとは、レンダリングの際に
glBlendFunc(GL_SRC_ALPHA,GL_ONE_MINUS_SRC_ALPHA);
glEnable(GL_BLEND);
などとしてアルファチャンネルとアルファブレンドを有効にします。

photo


取りあえず作っている OpenGL ラッパーにつけてみました。

余りフルスクリーンなソフトは好きでは無いので(パフォーマンスが必要な場合はしょうがないのですが)今作っている OpenGL ラッパーは、フォーム上の Panel を指定して Panel のデバイスコンテキストを取得した上でレンダリング用のDCを作成して、そこに線画するようにしています。
VCL っぽくペタりとフォームに貼り付けて動きます。

元々の3Dレンダリングエンジンと差し替えてみましたら(データの互換性が元々あったのです、3D の型は大抵どれも同じになるのですが)自作モデラーなども全てそのまま動いてしまい手間が省けて良い感じです。

メタセコイヤなどのモデラーデータも読み込めるようにすればそのまま動きそうです。

[更新日付:2009/01/22 12:16:14]
トラックバックを見る(0)
Log Link [https://akisoftware.com/cgi-bin/blom.exe?akisoft+sl+69f1d69dae4e71e3002c82432235587571b47faa]
TB Link [https://akisoftware.com/cgi-bin/blom.exe?akisoft+tb+69f1d69dae4e71e3002c82432235587571b47faa]

記事へのコメント

コメントはありません

名前
コメントキー
 
コメントする時はキーを正確に入力して下さい
コメント
アドレスを含んだコメントはできません
© 2008-10 A.K.I Software all rights reserved.