#include "sl_def.h" MAX( a, b );
a, b : 任意の型の数
a, bのうち大きい方
以下のように宣言されています。
#define MAX(x, y) ((x) > (y) ? (x) : (y))
#include "sl_def.h" MIN( a, b );
a, b : 任意の型の数
a, bのうち小さい方
以下のように宣言されています。
#define MIN(x, y) ((x) < (y) ? (x) : (y))
#include "sl_def.h" ABS( a );
a : 任意の型の数
aの絶対値。
#define ABS(x) ((x) < 0 ? -(x) : (x))
#include "sl_def.h" toFIXED( a );
a : 整数型の数(変数/定数/数字どれでも可。)
SGL固定小数型(FIXED)の数値
#define toFIXED(a) ((FIXED)(65536.0 * (a)))
#include "sl_def.h" POStoFIXED( a, b, c );
a, b, c : 整数型の数(変数/定数/数字どれでも可。)
SGL固定小数型(FIXED)の数値の配列(POINT型等。)
#define POStoFIXED(x,y,z) {toFIXED(x),toFIXED(y),toFIXED(z)}
#include "sl_def.h" ATTRIBUTE( plane, sort, tex, col, gouraud, mode, dir, opt );
plane - 両面表示か片面表示か(後述。) sort - ソートの基準点(後述。) tex - テクスチャ番号(後述。) col - カラーパレットナンバ(後述。) gouraud - ユーザグーロー用グーローシェーディングテーブル(後述。) mode - ポリゴン属性(後述。) dir - ポリゴンの描画方法(後述。) opt - オプション(後述。)
#define ATTRIBUTE(f,s,t,c,g,a,d,o) ¥ {f,(s)|(((d)>>16)&0x1c)|(o),t,(a)|(((d)>>24)&0xc0),c,g,(d)&0x3f} 引数の値リストは以下の通りです。
plane Single_Plane :片面(法線ベクトルの方向)表示。
Dual_Plane :両面表示。
sort SORT_MIN : 一番近い頂点を基準。
SORT_CEN : 4頂点の平均値を基準。
SORT_MAX : 一番遠い頂点を基準。
SORT_BFR : 前のポリゴンの手前に表示。
tex No_Texture : テクスチャを貼らない。
Uint16の値 : テクスチャ番号。
col No_Palet : パレットを使用しない。(テクスチャがRGBモードの場合。) Uint16の値 : texがNo_Textureの時、カラーコード。
それ以外の時、パレット番号。
gouraud No_Gouraud : ユーザグーローシェーディングを使用しない。
Uint16の値 : グーローシェーディングテーブルのアドレス VDP1のVRAMの先頭からの8バイトバウンダリで表現。
mode 以下のそれぞれのグループから0又は一つのエントリを"|"して指定します。
グループ1 MSBoff : フレームバッファに書き込む際MSBをたてない(default)。
MSBon : フレームバッファに書き込む際MSBをたてる。
グループ2 No_Window : ウインドウの制約を受けない。(default) Window_In : ウインドウの内側に表示。
Window_Out : ウインドウの外側に表示。
グループ3 HSSoff : ハイスピードシュリンクを掛けない。(default) HSSon : ハイスピードシュリンクを掛ける。
グループ4 MESHoff : メッシュをかけない。(default) MESHon : メッシュをかける。
グループ5 ECdis : エンドコードを無効。(default) ECenb : エンドコードを有効。
グループ6 SPdis : 透明ピクセル表示。(default) SPenb : 透明ピクセル無効。
グループ7 CL16Bnk : 16色カラーバンクモード。(default) CL16Look : カラールックアップモード。
CL64Bnk : 64色カラーバンクモード。
CL128Bnk : 128色カラーバンクモード。
CL256Bnk : 256色カラーバンクモード。
CL32KRGB : RGBモード。
グループ8 CL_Replace : 通常描画モード。(default) CL_Shadow : 影モード。
CL_Half : 半輝度モード。
CL_Trans : 半透明モード。
CL_Gouraud : ユーザグーローシェーディングモード。
dir sprNoflip : 通常表示。
sprHflip : 左右反転表示。
sprVflip : 上下反転表示。
sprHVflip : 上下左右反転表示。
sprPolygon : テクスチャなし。
sprPolyLine : ポリライン表示。
opt UseLight : フラットシェーディングを行なう。
UseNearClip : ニアクリッピング処理を行なう。
UsePalette : パレット表示。
UseDepth : デプスキューイングを行なう。
UseGouraud : リアルタイムグーロー処理を行なう。
No_Option : 特別な処理は行なわない。
ATTR attr; attr = ATTRIBUTE( Single_Plane, 5, 0, No_Gouraud, CL16Bnk, sprNoflip, UseNearClip );
#include "sl_def.h" SPR_ATTRIBUTE( tex, col, gouraud, mode, dir );
tex - パターン番号(後述。) col - カラーパレットナンバ(後述。) gouraud - ユーザグーロー用グーローシェーディングテーブル(後述。) mode - スプライト属性(後述。) dir - スプライトの描画方法(後述。)
#define SPR_ATTRIBUTE(t,c,g,a,d) {t,(a)|(((d)>>24)&0xc0),c,g,(d)&0x0f3f} 引数の値リストは以下の通りです。
tex No_Texture : 単色スプライト。
Uint16の値 : パターン番号。
col No_Palet : パレットを使用しない。(RGBモードの場合。) Uint16の値 : texがNo_Textureの時、カラーコード。
それ以外の時、パレット番号。
gouraud No_Gouraud : ユーザグーローシェーディングを使用しない。
Uint16の値 : グーローシェーディングテーブルのアドレス VDP1のVRAMの先頭からの8バイトバウンダリで表現。
mode 以下のそれぞれのグループから0又は一つのエントリを"|"して指定します。
グループ1 MSBoff : フレームバッファに書き込む際MSBをたてない(default)。
MSBon : フレームバッファに書き込む際MSBをたてる。
グループ2 No_Window : ウインドウの制約を受けない。(default) Window_In : ウインドウの内側に表示。
Window_Out : ウインドウの外側に表示。
グループ3 HSSoff : ハイスピードシュリンクを掛けない。(default) HSSon : ハイスピードシュリンクを掛ける。
グループ4 MESHoff : メッシュをかけない。(default) MESHon : メッシュをかける。
グループ5 ECdis : エンドコードを無効。(default) ECenb : エンドコードを有効。
グループ6 SPdis : 透明ピクセル表示。(default) SPenb : 透明ピクセル無効。
グループ7 CL16Bnk : 16色カラーバンクモード。(default) CL16Look : カラールックアップモード。
CL64Bnk : 64色カラーバンクモード。
CL128Bnk : 128色カラーバンクモード。
CL256Bnk : 256色カラーバンクモード。
CL32KRGB : RGBモード。
グループ8 CL_Replace : 通常描画モード。(default) CL_Shadow : 影モード。
CL_Half : 半輝度モード。
CL_Trans : 半透明モード。
CL_Gouraud : ユーザグーローシェーディングモード。
dir 以下の2つのグループからそれぞれ1つずつ選んで"|"で指定します。
グループ1 sprNoflip : 通常表示。
sprHflip : 左右反転表示。
sprVflip : 上下反転表示。
sprHVflip : 上下左右反転表示。
sprPolygon : 単色スプライト。
sprPolyLine : ポリライン表示。
グループ2 _ZmLT :拡大時の中心点を左上にする。
_ZmLC :拡大時の中心点を左中央にする。
_ZmLB :拡大時の中心点を左下にする。
_ZmCT :拡大時の中心点を中央上にする。
_ZmCC :拡大時の中心点を中央にする。
_ZmCB :拡大時の中心点を中央下にする。
_ZmRT :拡大時の中心点を右上にする。
_ZmRC :拡大時の中心点を右中央にする。
_ZmRB :拡大時の中心点を右下にする。
#include "sl_def.h" DEGtoANG( a );
a : 整数型の数(変数/定数/数字どれでも可。)
SGLの角度型(ANGLE)の数値
#define DEGtoANG(d) ((ANGLE)((65536.0 * (d)) / 360.0))
#include "sl_def.h" RADtoANG( a );
a : 整数型の数(変数/定数/数字どれでも可。)
SGLの角度型(ANGLE)の数値
#define RADtoANG(d) ((ANGLE)((65536.0 * (d)) / (2*M_PI)))
#include "sl_def.h" RGB( r, g, b );
r : 赤の整数値 g : 緑の整数値 b : 青の整数値
15ビットのサターン用カラーコード。
#define RGB(r,g,b) (0x8000|((b)<<10)|((g)<<5)|(r))
#include "sl_def.h" DGTtoRGB( a );
a : SEGA DGTフォーマットのRGB値。
15ビットのサターン用カラーコード。
#define DGTtoRGB(c) (0x8000|(((c)&0x0f00)<<3)|(((c)&0x4000)>>4)|¥ (((c)&0x00f0)<<2)|(((c)&0x2000)>>8)|(((c)&0x000f)¥ <<1)|(((c)&0x1000)>>12))
#include "sl_def.h" SLocate( page, x, y );
page : ページ番号。
x, y : セルのx,y位置。
セルのアドレス
#define SLocate(SLocax,y,p) ((p) * Page + (y) * Line + (x))
#include "sgl.h" NORMAL( x, y, z );
x, y, z: 法線ベクトルを表す、任意の数値(整数/浮動小数)
SGL固定小数型(FIXED)の数値の配列(POINT型等。)
#define NORMAL(x,y,z) {POStoFIXED(x,y,z)}
#include "sgl.h" VERTICES( a, b, c, d );
a, b, c, d :POINT型などで表される3次元頂点データテーブルでのインデックス
インデックスの4次の配列
#define VERTICES(v0,v1,v2,v3) {v0 , v1 , v2 , v3}}
#include "sgl.h" C_RGB( r, g, b );
r :任意の型の赤色を表すデータ。
g :任意の型の緑色を表すデータ。
b :任意の型の青色を表すデータ。
VDP1のRGB形式のダイレクトカラーデータ。
#define C_RGB(r,g,b) (((b)&0x1f)<<10|((g)&0x1f)<<5|((r)&0x1f)|0x8000)
#include "sgl.h" TEXDEF( h_size, v_size, addr );
h_size :テクスチャの横方向サイズ(ドット) v_size :テクスチャの縦方向サイズ(ドット) addr :テクスチャデータのあるVRAMアドレス
TEXTURE型構造体データ
#define TEXDEF(h,v,presize) {h,v,(cgaddress+(((presize)*4)>>(pal)))/8,¥ (((h)&0x1f8)<<5 | (v))}
このマクロは古いバージョンとの互換性のために残してあるものです。
このマクロと同等の機能を果たす、TEXTBLの方を使うようにしてください。
#include "sgl.h" PICDEF( tex_no, col_mode, src )
tex_no :テクスチャ番号。
col_mode :カラーモード(COL_16,COL_256等) src :大元のテクスチャデータのあるアドレス。
PICTURE型構造体データ
#define PICDEF (texno,cmode,pcsrc){(Uint16)(texno),(Uint16)(cmode),¥ (void *)(pcsrc)}
このマクロは古いバージョンとの互換性のために残してあるものです。
このマクロと同等の機能を果たす、PICTBLの方を使うようにしてください。
#include "sgl.h" AdjCG( adr, h, v, col )
adr :前のキャラクタの先頭アドレス h, v :前のキャラクタの、横縦サイズ(ドット) col :前のキャラクタのカラーモード(COL_16、COL_256等)
そのキャラクタのトップアドレス
#define AdjCG(cga,hs,vs,col) ((cga) +(((((hs)*(vs)*4)>>(col))+0x1f)¥ &0x7ffe0))
enum cga{ CG_Top = CGADDRESS, CG_Second = AdjCG( CG_Top, 16, 8, COL_16 ), CG_Third = AdjCG( CG_Second, 32, 32, COL_256 ) }; CG_Secondには、 CGADDRESS + ( 16 / 2 ) * 8 = 0x25c00040 ^ ^^^ ^ 横サイズ | 縦サイズ カラーモード16色バンク が入ります。
#include "sgl.h" TEXTBL( h, v, addr );
h, v :テクスチャの横縦サイズ addr :テクスチャデータのあるVRAMアドレス
TEXTURE型構造体
#define TEXTBL(hs,vs,cga) {hs , vs , (cga)>>3 , ((hs)&0x1f8)<<5|(vs)}
#include "sgl.h" PICTBL( tex, col_mode, addr );
tex_no :テクスチャ番号 col_mode :テクスチャのカラーモード src :テクスチャデータの元アドレス(VDP1のVRAM上とは限らない。)
PICTURE型構造体
#define PICTBL(texno,cmode,pcsrc) {(Uint16)(texno),(Uint16)(cmode),¥ (void *)(pcsrc)}
#include "sgl.h" TRANSLATION( x, y, z );
x, y, z :オブジェクトなどの移動量を表す、任意の型(整数/浮動小数)の数値。
FIXED型で表された、3次元の移動量配列
#define TRANSLATION(x,y,z) {toFIXED(x),toFIXED(y),toFIXED(z)}
#include "sgl.h" ROTATION( x, y, z );
x, y, z :オブジェクトなどの回転量を表す、任意の型(整数/浮動小数)の数値。
ANGLE型で表された、3次元の回転量配列
#define ROTATION(x,y,z) {DEGtoANG(x),DEGtoANG(y),DEGtoANG(z)}
#include "sgl.h" SCALING( x, y, z );
x, y, z :オブジェクトなどのスケール量を表す任意の型(整数/浮動小数)の数値。
FIXED型で表された、3次元のスケール量配列
#define SCALING(x,y,z) {toFIXED(x),toFIXED(y),toFIXED(z)}