AlphaLib32 ver4.1
Direct3D で 2D Graphics library
概要
|
Direct3Dを使った2D描画ライブラリ。
私がStgEngine用に必要に駆られて作ったもの(笑
VersionUp情報
|
Version4.2
|
・8近傍グレイスケールのバグを修正 |
Version4.1
|
・αチャンネルマスクの自動生成機能を追加 |
Version4.0
|
・クラスの大幅改良 ・曲線命令の追加 ・デバッグ出力ファイルを「AL32Debug.Txt」に変更 ・合成の種類を追加 ・その他バグ修正 |
機能・仕様
|
このライブラリの提供する機能と仕様です。
ふる〜いVGAは根こそぎ却下するような仕様なので、よ〜く読んでね。
必要最低開発環境
|
・Delphi6(6以外はコンパイルしたことないのでわからない) こんなかんじ?最近のPCなら動きます(笑 |
Direct3Dでハードウェアを酷使します(ぉ
|
Direct3Dを使います。 |
ARGBピクセルフォーマットを使います(ぉ
|
このライブラリの標準ではテクスチャのピクセルフォーマットはARGBとなっています。 むかし〜のものだとこれがサポートされていません。 俗に言う「指定色くり抜き転送」も出来ますが、おまけ機能です。 |
半透明の描画順番を管理
|
半透明における奥と手前の描画順位を管理し、レンダリング時にソーティングし正しい順序で転送します。 よ〜するに、物体を手前・奥の順に重ねて転送しても、正しくソートして転送されるよ〜ということです。 ただし、その分全体的なレスポンスは低下します。数万個というパーティクルを表示させることには向いていませんし、最大で8192個までしか一度に転送出来ません。 |
テクスチャ重複読み込み防止機構
|
よく、敵キャラをパーツに分けると同じBMPファイルを何枚も読み込む場合があります。こういう場合、同じ内容な訳ですからかなり無駄です。それに、ビデオメモリも限られた資源です。 |
αチャンネル自動生成機能付き
|
マスクとして使用するαチャンネル画像が無い場合は、自動で黒をくり抜き色とするαチャンネルを生成します。(もちろん機能を切ることも可能) 自分で用意した場合はそれを使用するようになります。 |
合成の種類
|
AlphaLib32で使える合成の種類。
PSはPhotoShopの意味。
テクスチャαは、テクセルのARGBのAが合成に考慮されるかどうか。
指定色は、テクスチャカラーとの関係。
合成方法 | 宣言 | 説明 | テクスチャα | 指定色xテクセル |
α合成 | BM_NORMAL | PSの通常合成 | ○ | 乗算 |
フラッシュ | BM_FLASH | PSの通常 | ○ | 加算 |
加算 | BM_ADD | PSのスクリーン | × | 乗算 |
減算 | BM_SUB | 加算の逆。 | × | 乗算 |
乗算 | BM_MODULATE | PSの乗算 | × | 加算 |
反転 | BM_NOT | PSの差の絶対値? | × | 乗算 |
減加算 | BM_SUBADD | 減算して加算 | × | 乗算 |
彩度 | BM_DIV |
おい焼き?彩度? |
× | 乗算 |
減加算合成は、減算した後に加算する合成を指す。
加算に近い合成方法ではあるが、ホワイトアウトしにくい特性を持つ。
※VooDoo2ファミリーにおいては、フラッシュと乗算に支障が出るらしぃ
メソッド・プロパティ
|
使えるものだけピックアップ(w
プロパティがわからない場合は初期値でままで弄らない方が賢明ですよ。
TAlpha32 |
|
メソッド
|
説明
|
Create | クラス生成 |
Free | クラス解放 |
DrawPoly | 自由形テクスチャ転送 |
DrawTex | 単形テクスチャ転送 |
DrawCurve | 線分連結テクスチャ転送 |
DrawSuf | サーフェイス転送 |
FillRect | 単形塗りつぶし |
DrawTexLine | 線分テクスチャ転送 |
DrawLine | 線分塗りつぶし |
Rendering | レンダリング |
Clear | 画面クリア |
SetAspect | 画面比設定 |
LoadTexture | テクスチャ読み込み(おまけ) |
FreeTexture | テクスチャ解放(おまけ) |
AL32_DebugMessag | デバッグ出力(おまけ) |
プロパティ
|
説明
|
テクセル・ピクセル座標補正系
|
|
LINEARTEXELFIX | リニアフィルタ時のテクセル座標修正値 |
POINTTEXELFIX | フィルタを使わない場合 |
PIXELFIX | 転送先座標修正値 別名カリング補正値(w; |
クオリティ設定系
|
|
ALPHATEXTURE | ARGBテクスチャを使うかどうか 初期値はTRUE(ARGB) FALSEにするとカラーキー(くり抜き色)による転送モードになります。 くり抜き色は黒($000000)固定です。 |
LINEARFILTER | リニアフィルタを使うかどうか 初期値はTRUE(使用) |
テクスチャフォーマット設定系
|
|
RGBPIXELFORMAT | RGBピクセルフォーマット 指定方法は文字列。 |
ARGBPIXELFORMAT | ARGBピクセルフォーマット 指定方法は文字列。 |
テクセル・ピクセル座標補正系
|
|
AUTOALPHAMASK | マスク用αチャンネル画像が無い場合、黒をくり抜き色として自動作成するかどうか。 初期値はTRUE。 |
AUTOALPHAMASKMODE |
マスク用αチャンネルを自動生成する場合、どの方法を用いるかを設定する。 AM_BINARY(二値化) |
ぐろ〜ばる♪(便利関数)
Global |
|
定数
|
説明
|
AL32_MAXDRAW | 最大描画(転送)オブジェクト数。 初期値は8192 |
AL32_DebugMode | デバッグログをはき出すか? 初期設定ではTRUE。 |
関数
|
説明
|
_ARGB | 32Bitカラーを作る |
_BlendARGB | 2つの32Bitカラーをαブレンドする |
_ModulateARGB | 2つの32Bitカラーを乗算する |
|
|
引数
|
説明
|
tQD | DDDDオブジェクト(クラス/コンポーネント) |
解説
|
|
クラス生成。 ついでにDirect3Dのビューポートの設定もしちゃいます。ゴメン。 |
|
例
|
|
AL32 := TAlpha32.Create(DDDD1); |
|
|
引数
|
説明
|
なし | |
解説
|
|
クラス解放。 LoadTextureで読み込んだテクスチャに関しては、解放忘れが有れば勝手に解放してくれるよん(w |
|
例
|
|
AL32.Free; |
|
|
引数
|
説明
|
src | 転送元テクスチャ |
sx1,sy1.... | 転送元座標。 順序は左上・右上・左下・右下でおねがい(w |
dx1,dy1... | 転送先座標。 順序は転送元座標と同じ。 |
col | 色(ARGB)32Bit |
BM | 合成方法 |
Pri | 描画優先順序。数が多いほど手前に表示。 |
解説
|
|
四角形ポリゴンを転送します。 四頂点を自由に設定できますが、自由すぎて不便です(笑 |
|
例
|
|
AL32.DrawPoly(src, |
|
|
引数
|
説明
|
src | 転送元テクスチャ |
sx1,sy1.... | 転送元座標。 sx1,sy1が左上座標 sx2,sy2が右下座標 |
dx1,dy1... | 転送先中心座標。 |
sw | 横伸縮率(1.0で等倍) |
sh | 縦伸縮率(1.0で等倍) |
r | 回転角度(1.0で360度) |
col | 色(ARGB)32Bit |
BM | 合成方法 |
Pri | 描画優先順序。数が多いほど手前に表示。 |
解説
|
|
伸縮・回転を機能を備えた単形(四角形)テクスチャ転送です。 srcにnilを渡せば、テクスチャを伴わない転送も可能。 |
|
例
|
|
AL32.DrawTex(BomImg1, 0,0,64,64, 240,360, 1.0,1.0,180/360, |
|
|
引数
|
説明
|
src | 転送元テクスチャ |
sx1,sy1.... | 転送元座標。 sx1,sy1が左上座標 sx2,sy2が右下座標 |
dx1,dy1... | 線分頂点データ。 Singleの一次配列で指定する。 |
Count | 線分頂点の数 |
Size | 線の太さ。(半径) |
col | 色(ARGB)32Bit |
BM | 合成方法 |
Pri | 描画優先順序。数が多いほど手前に表示。 |
解説
|
|
連続線分(曲線)を表示します。 srcにnilを渡せば、テクスチャを伴わない転送も可能。 |
|
例
|
|
For i:=0 to 15 do |
|
|
引数
|
説明
|
src | 転送元サーフェイス |
sx1,sy1.... | 転送元座標。 sx1,sy1が左上座標 sx2,sy2が右下座標 |
dx1,dy1... | 転送先中心座標。 |
sw | 横伸縮率(1.0で等倍) |
sh | 縦伸縮率(1.0で等倍) |
ColorKey | くり抜き色。黒(0)にしてね〜 |
Pri | 描画優先順序。数が多いほど手前に表示。 |
解説
|
|
サーフェイス転送です。テクスチャ転送と混合して使用することが出来ます。 |
|
例
|
|
AL32.DrawSuf(BackImage, 0,0,640,480, 320,240,
1.0,1.0, 0,10); |
|
|
引数
|
説明
|
sx,sy,ex,ey | 転送先座標 |
col | 色(ARGB)32Bit |
BM | 合成方法 |
Pri | 描画優先順序。数が多いほど手前に表示。 |
解説
|
|
単形転送。 |
|
例
|
|
AL32.FillRect(0,0,640,480, $88000000,BM_NORMAL,1000); |
|
|
引数
|
説明
|
src | 転送元テクスチャ |
sx1,sy1.... | 転送元座標。 sx1,sy1が左上座標 sx2,sy2が右下座標 |
dx1,dy1... | 転送先線分座標。 dx1,dy1が線分の始点 dx2,dy2が終点 |
size | 線の太さ(半径) |
col | 色(ARGB)32Bit |
BM | 合成方法 |
Pri | 描画優先順序。数が多いほど手前に表示。 |
解説
|
|
テクスチャを模様を使って線を引きます。 srcにnilを渡せば、テクスチャを伴わない転送も可能。 |
|
例
|
|
AL32.DrawTexLine(LineImage, |
|
|
引数
|
説明
|
dx1,dy1... | 転送先線分座標。 dx1,dy1が線分の始点 dx2,dy2が終点 |
size | 線の太さ(半径) |
col | 色(ARGB)32Bit |
BM | 合成方法 |
Pri | 描画優先順序。数が多いほど手前に表示。 |
解説
|
|
線を引きます。AAはしませんからちょっと汚いかも(ぉ |
|
例
|
|
AL32.DrawLine(0,0,ex,ey, 4, $FFFFFFFF,BM_NOT,1000); |
|
|
引数
|
説明
|
なし | |
解説
|
|
優先順位にしたがってソーティングし、 バックバッファに描画(反映)します。 バックバッファの内容は消去はしませんので、あらかじめ画像を描画しておいて合成させる事も可能です。 |
|
例
|
|
AL32.Clear; |
|
|
引数
|
説明
|
w | 横比 |
h | 縦比 |
解説
|
|
画面描画比を調整できます。 640x480で作っていたものを1280x960で画面イッパイに表示させたいときなどに使います。この場合は縦・横比を2.0にします。 画面を小さくするとマシンパワーの無い人に有効です。が、DrawSufによってサーフェイスも描画している場合は逆に遅くなる場合があります。(伸縮処理により等倍転送の方が断然速いので) |
|
例
|
|
AL32.SetAspect(ClentWidth/640,ClientHeight/480); |
|
|
引数
|
説明
|
col | カラー |
解説
|
|
指定色でバックバッファを消去します。(ついでにZ-Bufferもクリアしちゃうよ) ただし、このカラーはバックバッファのピクセルフォーマットに依存します。 |
|
例
|
|
AL32.Clear(0); |
|
|
引数
|
説明
|
filename | ファイル名 |
返り値
|
説明
|
TDDDDTexture | TDDDDTextureクラス(ポインタ) |
解説
|
|
ファイル重複機能を用いてテクスチャを読み込みます。 |
|
例
|
|
img1 := AL32.LoadTexture('Image1.bmp'); |
|
|
引数
|
説明
|
t | 解放するテクスチャ |
返り値
|
説明
|
Boolean | 解放に成功したかどうか(成功がTRUE) |
解説
|
|
LoadTextureによって読み込んだ場合はこれを使って解放してクダサイ。 |
|
例
|
|
AL32.FreeTexture(img1); |
|
|
引数
|
説明
|
なし | |
解説
|
|
AlphaLib32専用デバッグファイルにログを書き出します。 |
|
例
|
|
AL32.AL32_DebugMessage('あは〜'); |