<< 2024/03 >> | 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 | 10 | 11 | 12 | 13 | 14 | 15 | 16 | 17 | 18 | 19 | 20 | 21 | 22 | 23 | 24 | 25 | 26 | 27 | 28 | 29 | 30 | 31 |
|
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); などとしてアルファチャンネルとアルファブレンドを有効にします。 取りあえず作っている 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] 記事へのコメント コメントはありません |
@AKISoftOfficialをフォロー
掲示板 サポートBBS PMailServer BBS アクセスの多い記事
最新記事(カテゴリ別)
フリー版からの製品版移行時の MTA 並列数について
02/17 23:52 メールサーバーの開発を始めて20年 02/07 21:46 PMailServer2 Version 2.52a をリリースしました。 12/26 14:02 PMailServer2 Version 2.52 をリリースしました。 10/01 10:48 PMailServer2 Version 2.51b をリリースしました。 09/19 01:43 PMailServer2 Version 2.51b(仮) Memo 09/12 00:33 PMailServer2 Version 2.51a をリリース、及び脆弱性についてのお知らせ 09/05 01:15 PMailServer2 Version 2.51a Memo 08/21 00:48 アドレスV125(K5)のスターターリレーの交換 08/04 10:10 SanDisk ポータブルSSDを買ってみました。 08/04 09:41 最新コメント
コメントはありません
UUアクセス数
今日は 103回
昨日は 103回 トータル 300661回 3ヶ月記事別ランキング
プロフィール
Z80から68系、8086系を経由して
Pascalに移行。現在は Delphiをメインに C/C#も囓ってみたり。 「無い物は作れ」の精神で年がら年中なにかを作っています。 すぐ自前で作りたがるので無駄に工数が上がったりして自爆してみたりもします。 好きな物は麺類とお煎餅 Blom内検索
BLOM Version 1.39 ©2007-15 A.K.I Software all rights reserved. |