入門3:透明度

Last-modified: 2009-11-06 (金) 18:00:34

DBPで扱う透明度について

COLORの基本

色は 内部的にはドットにつき32bitを使う。
ARGB,それぞれに8bitを使い、計32bit
Aアルファチャネル、R赤色、G緑色、B青色
 
LOAD IMAGE コマンドを使って 画像ファイルからメモリへ透明度を読み込む時に、ファイル形式から判断して
カラーキー又はアルファチャネルのどちらか一方だけを使用する。
つまり、 png,tga,ddsはアルファチャネルを使う。 bmp,jpg,dibはカラーキーを使う。

カラーキーのデフォルトは黒色、rgb(0,0,0)です。

どちらの場合でも 一旦メモリに読み込まれたなら、ARGBでメモリに保存されます。

 

おまけ、アルファチャネルとは?

アルファチャネルは、透明度を意味します。
8bitで0から255までの値を持ち、0は完全な透明、128は半分透明、255は不透明。
中間の透明度を表現することができる。

 

おまけ、カラーキーとは?

画像形式で透明度を持たないファイル(アルファチャネルが無い)で透明を使いたい時に、
ある特定の色を透明と決めます。そうすると以後は 指定した色は透明として扱われ表示されません。

カラーキーで 透明を指定するコマンドは、

SET IMAGE COLORKEY RedValue, GreenValue, BlueValue

デフォルトは黒色です。

よくあるのは、スプライトシートで、背景が黒色であったり、ピンク色であったりする。
昔は、BMP形式しか無くて 手軽なのでカラーキーが良く使われたが、今は少ない。
 

おまけ

gifの読み込みはありませんが、LOAD ANIMATION コマンドで読み込む事が出来る、透明度無し。

おまけ、どの画像形式をつかえばよいか?

pngが良い。アルファチャネル透明を持ち圧縮されて小さくなる。
ddsが最も良い。ツールが少ないので扱いにくいとかある

 
jpgは画質が劣化するので使うな、読み込み速度も非常に遅い。

2D

2Dでの透明度に関するコマンド
SET IMAGE COLORKEY RedValue, GreenValue, BlueValue
GET IMAGE ImageNumber, Left, Top, Right, Bottom, TextureFlag
PASTE IMAGE ImageNumber, X, Y, Transparency
SET BITMAP FORMAT BitmapFormatNumber
SET SPRITE SpriteNumber, Backsave, Transparency
SET SPRITE ALPHA SpriteNumber, AlphaValue

3D

3Dで 透明度に関するコマンドは以下です。
SET ALPHA MAPPING ON
GHOST OBJECT ON
GHOST OBJECT OFF
FADE OBJECT
SET OBJECT TRANSPARENCY
 
 
3Dの透明は複雑な内面がある。
透明が重なると挙動不信になる。
PCから見ると透明でも不透明でも同じと考えるので描画順序に注意が必要。

補足 葉っぱ 

3Dで木を作るとき、葉っぱに透明度を使う。

フィルタ処理により縁に色づけされてしまう、
対策として、フィルタ無しにするか画像処理方法を変更する。
 
具体的には

SET OBJECT FILTER ObjNo, flag   ` flagは  0フィルタ無し, 1フィルタあり(デフォルト)
SET OBJECT TRANSPARENCY ObjNo,flag  ` flagは 0~6

このコマンドを使う。
以下にサンプルコードで示す。

print "#" : get image 1,0,0,12,12,1
`load image "momizi.png",1
make object plane 1,100,100
texture object 1,1
wait key
SET ALPHA MAPPING ON 1,100
wait key
for i=0 to 6
  SET OBJECT TRANSPARENCY 1,i
  wait key
next i
SET OBJECT FILTER 1,0
wait key
end

 
通常は SET OBJECT TRANSPARENCY の4か6で対処される。

 
場合によっては、ティクスチャの周辺にゴミが表示されることがある。SET OBJECT TEXTURE を変更してみる。

SET OBJECT TEXTURE ObjectNumber, TexturingMode, MipmapFlag   ` TexturingModeに3を入れる