English
SGL User's ManualPROGRAMMER'S TUTORIAL
戻る進む
PROGRAMMER'S TUTORIAL

7.ポリゴンの面属性


 本章ではセガサターンにおけるポリゴンの面属性について解説します。
ポリゴンには、各々のポリゴンの表示順を決定するための基準位置を表す「Sort」、 ポリゴンの片面を表示するか両面表示をするかを指定する「表裏属性」、ポリゴンに2次元の絵 (ビットマップ・データ)を張り付ける「テクスチャ」といった要素があります。
これらをまとめて「ポリゴンの面属性」と呼びます。
ポリゴンの面属性を指定することで、これまで単なる絵だったポリゴンに様々な表現を加えるこ とができます。

7-1. アトリビュート

 セガ・グラフィック・ライブラリ(SGL)では、ATTRIBUTEマクロで、ポリゴンの 面属性を指定するようになっています。
本章までのサンプルプログラムでは、各パラメータの内容を詳しく説明することなく、 暗黙のうちにアトリビュートの設定を行ってきました。
しかしながら、アトリビュートにはポリゴンを扱っていく上での重要な要素が集まっています。 そこで、ここではATTRIBUTEマクロの各パラメータの意味とを詳しく解説をしていきます。

リスト7-1 アトリビュートデータ
●アトリビュートデータ

ATTR attribute_label[]={ ATTRIBUTE(Plane,Sort,Texture,Color,Gouraund,Mode,Dir,Option), ................... };

注)ATTRIBUTEマクロは“sl_def.h”で定義されています。

 各パラメータの意味は以下の通りです。

Plane  :片面ポリゴンか両面ポリゴンかを示します(表裏属性)
Sort   :ポリゴンの位置関係の代表点を示します(Zソート)
Texture:テクスチャ名(No.)を示します
Color  :カラーデータを示します
Gouraud:グーローシェーディングテーブルのアドレスを示します
Mode   :ポリゴンの描画モードを示します(各種モード設定)
Dir    :ポリゴンやテクスチャの状態を示します
Option :その他の機能を示します(オプション設定)

7-2. Plane

 アトリビュートの最初のパラメータ“Plane”はポリゴンの表裏属性を示します。 表裏属性とは、そのポリゴンが片面ポリゴンであるのか両面ポリゴンであるのかを表 す属性のことです。
両面ポリゴンは裏表どちらからも見ることができますが、片面ポリゴンは裏にまわる と見えなくなります。
以下に、このパラメータに指定できるマクロを紹介します。

表7-1 Plane(表裏属性)
 マ ク ロ   内  容  
Single_Planeポリゴンの片面表示
Dual_Planeポリゴンの両面表示

 それでは、サンプルプログラム(リスト 7-2)を見てみましょう。
片面表示の黄色いポリゴンがY軸を支点に回転します。
片面ポリゴンなので、裏側は表示されません。

リスト7-2 sample_7_2:main.c
/*----------------------------------------------------------------------*/
/*	Rotation of Single Plane Polygon				*/
/*----------------------------------------------------------------------*/
#include	"sgl.h"

extern	PDATA PD_PLANE;

void ss_main(void)
{
	static ANGLE	ang[XYZ];
	static FIXED	pos[XYZ];

	slInitSystem(TV_320x224,NULL,1);
	slPrint("Sample program 7.2" , slLocate(6,2));

	ang[X] = ang[Y] = ang[Z] = DEGtoANG(0.0);
	pos[X] = toFIXED( 0.0);
	pos[Y] = toFIXED( 0.0);
	pos[Z] = toFIXED(170.0);

	while(-1){

		slPushMatrix();
		{
			slTranslate(pos[X] , pos[Y] , pos[Z]);
			slRotX(ang[X]);
			slRotY(ang[Y]);
			slRotZ(ang[Z]);
			ang[Y] += DEGtoANG(2.0);
			slPutPolygon(&PD_PLANE);
		}
		slPopMatrix();

		slSynch();
	}
}

 27行目を見てください。ポリゴン描画ルーチン“slPutPolygon”を呼び出して、 ポリゴンデータ“PD_PLANE”へのポインタを渡しています。
“PD_PLANE”はソース“polygon.c”で次のように定義されています。

リスト7-3 sample_7_2:Polygon.c
#include	"sgl.h"

POINT point_PLANE[] = {
	POStoFIXED(-20.0, -20.0, 0.0),
	POStoFIXED( 20.0, -20.0, 0.0),
	POStoFIXED( 20.0,  20.0, 0.0),
	POStoFIXED(-20.0,  20.0, 0.0),
};

POLYGON polygon_PLANE[] = {
	NORMAL(0.0,0.0,1.0), VERTICES(0,1,2,3),
};

ATTR attribute_PLANE[] = {
	ATTRIBUTE(Single_Plane,SORT_CEN,No_Texture,C_RGB(31,31,0),No_Gouraud,MESHoff,sprPolygon,No_Option),
};

PDATA PD_PLANE = {
	point_PLANE , sizeof(point_PLANE)/sizeof(POINT) ,
	polygon_PLANE , sizeof(polygon_PLANE)/sizeof(POLYGON) ,
	attribute_PLANE
};

 18行目以降がポリゴンデータです。21行目はアトリビュートデータへのポインタ なので、実際のデータは14行目からになります。
第一パラメータが“Single_Plane”になっているのが分かると思います。
<ここを“Dual_Plane”に書き換えて実行してみてください、今まで片面しか表示されなかった ポリゴンが、両面とも表示されるようになるはずです。

7-3. Sort

 2番目のパラメータ“Sort”はポリゴン上のZソートの位置を示します。 Zソートとは、各ポリゴン上の代表点を以てその3D空間上の位置や前後関係 を決定する方式であり、Zバッファ(ポリゴン上の各ピクセルごとに位置を決める) 方式よりも高速に計算、描画できるのが特徴です。以下に、このパラメータに指定で きるマクロを紹介します。

表7-2 Sort(Zソート指定)
 マ ク ロ   内  容  
SORT_MINカメラに一番近いポリゴン上の頂点を代表点とする
SORT_CENポリゴンの中心点を代表点とする
SORT_MAXカメラから一番遠い点を代表点とする
SORT_BFR直前に登録したポリゴンの手前に表示される

 また、これを図にすると次のようになります。

<図7-1 Zソートの代表点>

 “SORT_BFR”は特殊な指定であり、あるポリゴンを別のポリゴンの上(手前) に表示したい時に使用します。具体的には、“SORT_BFR”を指定したポリゴン の表示位置は、そのポリゴンの直前に登録されているポリゴンのすぐ手前になります。 ただし、2枚のポリゴンをグループ化して使いたいとき等に初めて意味を持つ指定なので、 通常はあまり使用することはないでしょう。

 Zソート方式はその性質上、代表点の取り方次第で前後関係がおかしくなる可能性を含んでいます。 次の例を見てください。

<図7-2 代表点による前後関係の相違>

 上図のような代表点の指定をした場合は、実際の画面は下図のようになります。

<図7-3 実際の画面>

7-4. Texture

 3番目のパラメータ“Texture”はテクスチャマッピングを使用する時に必要となるパラメータです。ここには、関数“slInitSystem”で登録したテクスチャテーブルの中から実際に使用するテクスチャのナンバーを指定します。
テクスチャを使用しない時は、マクロ“No_Texture”を指定します。テクスチャマッピングとは、ポリゴンの表面に2次元のグラフィックスを張り込む機能の総称です。言うまでもなく、ポリゴンで表現できるのは表示色のみで、そのリアリティには限界があります。しかし、テクスチャマッピング機能を駆使することによって、ポリゴンだけでは表現できなかった物体の質感、表面の模様といった、よりリアリティの高い3Dオブジェクトを表現することができます。

 セガサターンのテクスチャマッピングと、一般的なCGにおけるいわゆるテクスチャマッピングとでは、表 7-3 に示すように大きく分けて2つの異なった性質があります。

表7-3 セガサターンのテクスチャマッピングと一般的 CG のテキスチャマッピングとの相違
テクスチャマッピング
セガサターンの場合一般CGの場合
テクスチャの
張り込み
1枚のポリゴンに対して1枚のテクスチャの張り込みが可能です。 複数のポリゴンに渡って1枚のテクスチャを張り込みできます。
変形
ポリゴンの形状に応じてテクスチャをも変形します。ポリゴンの形にテクスチャがクリッピングされます。

 ●テクスチャの貼込み

<図7-5 テクスチャの特徴 1>

注)
 テクスチャとポリゴンが一対一に対応します。

 一般的なCGにおけるテクスチャは、複数のポリゴンに渡って張り込むことができますが、セガサターンの場合は一枚のテクスチャを一枚のポリゴンに対応させて張り込むことになります。2枚以上のポリゴンに渡ったテクスチャを貼る場合は、図 7-5 のようにそれぞれのポリゴンに合わせてテクスチャを分割する必要があります。

 ●テクスチャの変形
 一般的なCGのテクスチャは、ポリゴンが長方形(含む正方形)でない場合は、テクスチャはポリゴンの形にクリッピングされます。しかし、セガサターンにおいては、テクスチャはクリッピングされずにポリゴンに沿って変形します。ポリゴンが三角形の場合でも、テクスチャ全体が三角形に変形します。

<図7-6 テクスチャの特徴2>

注)
 ポリゴンの形に対応してテクスチャが変形します。

テクスチャの歪みについて

 ポリゴンが長方形で、それに張り込むテクスチャが正方形の場合、テクスチャはポリゴンの縦横比に合わせて長方形に変形してしまいます。従って、テクスチャの縦横比は、できる限りポリゴンの縦横比に合わせた方が、テクスチャの歪みも少なくなるということを念頭に入れておいてください。

<図7-7 テクスチャの歪み>

 それでは、サンプルプログラム(リスト 7-4)を見てみましょう。
テクスチャが貼られた1枚のポリゴンが、Y軸を支点に回転します。
ここではあらかじめ2枚のテクスチャを登録しておきます。
一枚は[SONIC]の絵(size:64×64pixel)で、もう一枚は「AM2」マーク(size:64×32pixel)です。

リスト7-4 sample_7_4:main.c
/*----------------------------------------------------------------------*/
/*	Polygon & Texture						*/
/*----------------------------------------------------------------------*/
#include	"sgl.h"

extern PDATA 	PD_PLANE;
extern TEXTURE	tex_sample[];
extern PICTURE	pic_sample[];

#define		max_texture		2

void set_texture(PICTURE *pcptr , Uint32 NbPicture)
{
	TEXTURE *txptr;
 
	for(; NbPicture--> 0; pcptr++){
		txptr = tex_sample + pcptr->texno;
		slDMACopy((void *)pcptr->pcsrc,
			(void *)(SpriteVRAM + ((txptr->CGadr) << 3)),
			(Uint32)((txptr->Hsize * txptr->Vsize * 4) >> (pcptr->cmode)));
	}
}

void ss_main(void)
{
	static ANGLE	ang[XYZ];
	static FIXED	pos[XYZ];

	slInitSystem(TV_320x224,tex_sample,1);
	set_texture(pic_sample,max_texture);
	slPrint("Sample program 7.4" , slLocate(9,2));

	ang[X] = ang[Y] = ang[Z] = DEGtoANG(0.0);
	pos[X] = toFIXED(  0.0);
	pos[Y] = toFIXED(  0.0);
	pos[Z] = toFIXED(170.0);

	while(-1){
		slPushMatrix();
		{
			slTranslate(pos[X] , pos[Y] , pos[Z]);
			slRotX(ang[X]);
			slRotY(ang[Y]);
			slRotZ(ang[Z]);
			ang[Y] += DEGtoANG(2.0);
			slPutPolygon(&PD_PLANE);
		}
		slPopMatrix();

		slSynch();
	}
}

 プログラムの流れ自体は、リスト 7-2 と大差ありません。

 まず29行目に注目してください。
今まで暗黙のうちに使用していたイニシャライズルーチンですが、 第二パラメータがこれまでと違っています。ここにはSGLに渡すテクスチャテーブル へのポインタを指定します。 (実際のテーブルは“texture.c”で定義。リスト 7-5 参照。) これまではテクスチャを使用していなかったので、“NULL”を代入していたというわけです。

 30行目ではテクスチャデータをV-RAMに転送しています。
このテクスチャデータ転送はイニシャライズ後いつでも実行できるので、 ゲーム中にテクスチャを描き替えるといったテクニックも容易に行うことができます。

 12行目以降は実際のテクスチャデータ転送ルーチンになります。
ここではテクスチャテーブルの先頭アドレスとテクスチャ登録数を受け取っています。 そして18行目の“slDMACopy”関数で、DMAを使ってデータを高速転送しています。
この関数の第一パラメータは転送元アドレス、第二パラメータが転送先アドレス、 第三パラメータが転送サイズとなっています。

【void slDMACopy ( void *src , void *dst , Uint32 cnt ) ;】
 CPUに内蔵されたDMAを使用してデータのブロック転送を行います
。 パラメータには、転送元メモリー領域の先頭アドレス、転送先メモリ領域の 先頭アドレス、ブロック転送量(単位:バイト)をそれぞれ代入します。
当該関数は、DMA起動後すぐに転送を終了します。
転送完了を知りたい場合は、関数“slDMAWait”を使用してください。

 次にテクスチャデータを見てみましょう。

リスト7-5 sample_7_4:texture.c

#include	"sgl.h"
/********************************/
/*	Texture Data		*/
/********************************/

TEXDAT sonic_64x64[]={					/* テクスチャテ−タ1 */
	 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff,
					:
					:
				      中略
					:
};

TEXDAT    am2_64x32[]={					/* テクスチャテ−タ2 */
	 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff,
					:
					:
				      中略
					:
};

TEXTURE tex_sample[]={					/* SGLに渡すテーブル */
	TEXDEF(64,64,0),
	TEXDEF(64,32,64*64*1),
};

PICTURE	pic_sample[]={					/* VRAM転送用テーブル */
	PICDEF(0,COL_32K,sonic_64x64),
	PICDEF(1,COL_32K,am2_64x32),
};

 TEXDATマクロで記述された部分が、実際のテクスチャデータになります。
上記リストでは省略していますが、ソースには全てのデータが入っています。 なお、テクスチャデータのフォーマットについてはここでは言及しません。 リファレンスマニュアルの“関数リファレンス”を参照してください。

 TEXTUREマクロで記述された部分がSGLに渡すテクスチャテーブルです。
それぞれのテクスチャのサイズ(横×縦)と、実際のテクスチャデータの先頭 アドレスからのオフセット値をセットします。

 最後に、PICTUREマクロ部分がVRAM転送用のテーブルになります。
テクスチャナンバー、カラーモード、テクスチャデータへのポインタ をそれぞれセットします。

 それでは最後になりましたが、ポリゴンデータのアトリビュートを見てみましょう。

リスト7-6 sample_7_4:polygon.c

#include	"sgl.h"

#define		PN_SONIC		0
#define		PN_AM2			1

POINT point_plane[] = {
        POStoFIXED(-40.0 , -40.0 , 0.0) ,
        POStoFIXED( 40.0 , -40.0 , 0.0) ,
        POStoFIXED( 40.0 ,  40.0 , 0.0) ,
        POStoFIXED(-40.0 ,  40.0 , 0.0)
};

POLYGON polygon_plane[] = {
        NORMAL(0.0,0.0,1.0), VERTICES(0 , 1 , 2 , 3)
};

ATTR attribute_plane[] = {
	ATTRIBUTE(Single_Plane, SORT_CEN, PN_SONIC, No_Palet, No_Gouraud, CL32KRGB|MESHoff, sprNoflip, No_Option),
};

PDATA PD_PLANE = {
        point_plane , sizeof(point_plane)/sizeof(POINT),
        polygon_plane, sizeof(polygon_plane)/sizeof(POLYGON),
        attribute_plane
};

 “ATTRIBUTE”の第三パラメータが“PN_SONIC”になっています。
すなわち登録ナンバー[0]のテクスチャである「SONIC」がポリゴンに貼 られて表示されるというわけです。
また、このパラメータを“PN_AM2”に変更してみてください。
今度はテクスチャが登録ナンバー[1]の「AM2」マークに変わるはずです。
さらに、第一パラメータの“Single_Plane”を“Dual_Plane”に変更することで、 テクスチャを裏側から見ることも可能です。

7-5. Color

 4番目のパラメータ“Color”では、ポリゴンの色やテクスチャのカラーパレット へのオフセットアドレスを指定します。
ポリゴンの場合、色データの指定方式はRGBダイレクトに限られます。書式は、 “C_RGB(r,g,b)”となります。r,g,bはそれぞれ光の三原色を示し、0〜31の 十進数で指定します。
テクスチャの場合は、色データの指定方式は"Mode"(アトリビュートの第六パラメータ。 "7-7 Mode" 参照。)での指定に左右されます。 32768色RGBモードの場合はマクロ“No_Palet”を、それ以外のインデックスモードの 場合はカラーパレットへのオフセットアドレスを指定します。

7-6. Gouraud

 5番目のパラメータ“Gouraud”にはグーローシェーディングに使用するグーローテーブル を指定します。グーローシェーディングとは、ポリゴンとポリゴンの境界線がハッキリしてい るフラットシェーディングに対する用語で、ポリゴン面に陰影処理を施し、ポリゴン同士の境 界線を消すことによって曲面らしく見せる技法のことです。セガサターンでは、ポリゴンの頂 点間の色のグラデーションを利用して、グーローシェーディングを実現しています。

<図7-8 グーローシェーディング>
フラットシェーディング     グ−ロシェーディング

 それでは、サンプルプログラム(リスト 7-7)を見てみましょう。 グーローシェーディングの施された立方体が、Y軸を支点に回転します。

リスト7-7 sample_7_6:main.c

/*----------------------------------------------------------------------*/
/*	Gouraud Shading							*/
/*----------------------------------------------------------------------*/
#include	"sgl.h"

extern PDATA PD_CUBE;

#define		GRoffsetTBL(r,g,b)	(((b & 0x1f) <<0) | ((g & 0x1f) << 5) | (r & 0x1f))
#define		VRAMaddr		(SpriteVRAM+0x70000)

static Uint16 GRdata[6][4] = {
	{ GRoffsetTBL(  0,-16,-16) , GRoffsetTBL(  0,-16,-16) ,
	  GRoffsetTBL(  0,-16,-16) , GRoffsetTBL(-16, 15,  0) } , 
	{ GRoffsetTBL(  0,-16,-16) , GRoffsetTBL(  0,-16,-16) ,
	  GRoffsetTBL(-16, 15,  0) , GRoffsetTBL(  0,-16,-16) } , 
	{ GRoffsetTBL(-16, 15,  0) , GRoffsetTBL(  0,-16,-16) ,
	  GRoffsetTBL(  0,-16,-16) , GRoffsetTBL(  0,-16,-16) } , 
	{ GRoffsetTBL(  0,-16,-16) , GRoffsetTBL(-16, 15,  0) ,
	  GRoffsetTBL(  0,-16,-16) , GRoffsetTBL(  0,-16,-16) } , 
	{ GRoffsetTBL(  0,-16,-16) , GRoffsetTBL(-16, 15,  0) ,
	  GRoffsetTBL(  0,-16,-16) , GRoffsetTBL(  0,-16,-16) } , 
	{ GRoffsetTBL(-16, 15,  0) , GRoffsetTBL(  0,-16,-16) , 
	  GRoffsetTBL(  0,-16,-16) , GRoffsetTBL(  0,-16,-16) } 
};

void ss_main(void)
{
	static ANGLE	ang[XYZ];
	static FIXED	pos[XYZ];

	slInitSystem(TV_320x224,NULL,1);
	slPrint("Sample program 7.6" , slLocate(9,2));

	ang[X] = DEGtoANG(30.0);
	ang[Y] = DEGtoANG( 0.0);
	ang[Z] = DEGtoANG( 0.0);
	pos[X] = toFIXED( 0.0);
	pos[Y] = toFIXED( 0.0);
	pos[Z] = toFIXED(200.0);

	slDMACopy(GRdata,(void *)VRAMaddr,sizeof(GRdata));

	while(-1){
		slPushMatrix();
		{
			slTranslate(pos[X] , pos[Y] , pos[Z]);
			slRotX(ang[X]);
			slRotY(ang[Y]);
			slRotZ(ang[Z]);
			slPutPolygon(&PD_CUBE);
		}
		slPopMatrix();

		ang[Y] += DEGtoANG(1.0);

		slSynch();
	}
}

 立方体を描画して回転させるルーチン自体は、今までのものと大差ないので説明 を省きます。これまでと違うのは41行目、グーローテーブルをVRAMに転送していると ころです。考え方はテクスチャデータの転送と同じで、最初に必要なテーブルを全て VRAMに格納してしまいます。

 それでは、次にアトリビュートを見てみましょう。

リスト7-8 sample_7_6:polygon.c

#include	"sgl.h"

#define		GRaddr		0xe000

static POINT point_CUBE[] = {
	POStoFIXED(-20.0 , -20.0 ,  20.0) ,
	POStoFIXED( 20.0 , -20.0 ,  20.0) ,
	POStoFIXED( 20.0 ,  20.0 ,  20.0) ,
	POStoFIXED(-20.0 ,  20.0 ,  20.0) ,
	POStoFIXED(-20.0 , -20.0 , -20.0) ,
	POStoFIXED( 20.0 , -20.0 , -20.0) ,
	POStoFIXED( 20.0 ,  20.0 , -20.0) ,
	POStoFIXED(-20.0 ,  20.0 , -20.0)
};

static POLYGON polygon_CUBE[] = {
	NORMAL( 0.0 , 0.0 , 1.0), VERTICES(0 , 1 , 2 , 3),
	NORMAL(-1.0 , 0.0 , 0.0), VERTICES(4 , 0 , 3 , 7),
	NORMAL( 0.0 , 0.0 ,-1.0), VERTICES(5 , 4 , 7 , 6),
	NORMAL( 1.0 , 0.0 , 0.0), VERTICES(1 , 5 , 6 , 2),
	NORMAL( 0.0 ,-1.0 , 0.0), VERTICES(4 , 5 , 1 , 0),
	NORMAL( 0.0 , 1.0 , 0.0), VERTICES(3 , 2 , 6 , 7)
};

static ATTR attribute_CUBE[] = {
	ATTRIBUTE(Single_Plane, SORT_MIN, No_Texture, C_RGB(31,16,31), GRaddr,   MESHoff|CL_Gouraud, sprPolygon,No_Option),
	ATTRIBUTE(Single_Plane, SORT_MIN, No_Texture, C_RGB(31,16,31), GRaddr+1, MESHoff|CL_Gouraud, sprPolygon,No_Option),
	ATTRIBUTE(Single_Plane, SORT_MIN, No_Texture, C_RGB(31,16,31), GRaddr+2, MESHoff|CL_Gouraud, sprPolygon,No_Option),
	ATTRIBUTE(Single_Plane, SORT_MIN, No_Texture, C_RGB(31,16,31), GRaddr+3, MESHoff|CL_Gouraud, sprPolygon,No_Option),
	ATTRIBUTE(Single_Plane, SORT_MIN, No_Texture, C_RGB(31,16,31), GRaddr+4, MESHoff|CL_Gouraud, sprPolygon,No_Option),
	ATTRIBUTE(Single_Plane, SORT_MIN, No_Texture, C_RGB(31,16,31), GRaddr+5, MESHoff|CL_Gouraud, sprPolygon,No_Option),
};

PDATA PD_CUBE = {
	point_CUBE , sizeof(point_CUBE)/sizeof(POINT),
	polygon_CUBE , sizeof(polygon_CUBE)/sizeof(POLYGON) ,
	attribute_CUBE
};

 アトリビュートに注目してください。
第5パラメータ“Gouraud”に、先ほどグーローデータを格納したVRAMアドレスがセット されています。ここでのVRAMアドレスは(相対アドレス÷8)になります。

 第6パラメータ“Mode”にも注目してください。
グーローシェーディングを使う場合、必ずここに“CL_Gouraud”を指定する必要があります。 なお、グーローシェーディングを使わない時は、第5パラメータ、“Gouraud”には マクロ“No_Gouraud”を指定してください。

7-7. Mode

 6番目のパラメータは“Mode”です。
ここではポリゴンに様々な条件や設定を付加することができます。 ここで指定できるマクロは以下の通りです。

表7-4 Mode
 グループ  マクロ  内容 
【1】 No_Window Windowの制限を受けない(default)
Window_In Windowの内側に表示する
Window_OutWindowの外側に表示する
【2】 MESHoff 通常表示(default)
MESHon メッシュで表示する
【3】 ECdis EndCodeを無効にする
ECenb EndCodeを有効にする(default)
【4】 SPdis 透明ピクセルも表示する(default)
SPenb 透明ピクセルは表示しない
【5】 CL16Bnk 16色カラーバンクモード(default)
CL16Look 16色ルックアップテーブル
CL64Bnk 64色カラーバンクモード
CL128Bnk 128色カラーバンクモード
CL256Bnk 256色カラーバンクモード
CL32KRGB 32768色RGBモード
【6】 CL_Replace 上書き(標準)モード(default)
CL_Shadow 影モード
CL_Half 半輝度モード
CL_Trans 半透明モード
CL_Gouraud グーローシェーディングモード
【7】 HSSon ハイスピードシュリンクを使用
HSSoff ハイスピードシュリンクを使わない(default)
【8】 MSBon フレームバッファに書き込むときにMSBを立てる
MSBoff フレームバッファに書き込むときにMSBを立てない(default)

 各グループにつき一つのオプションを指定することができます。
or演算子“|”で連続表記してください。
省略されたグループは、デフォルトが指定されたものとして扱われます。

注意
 全てのグループを省略表記することはできません。全てをデフォルトにする場合は、 ダミーで“No_Window”と指定してください。

 グループ【5】は、テクスチャのカラーモード指定するためのものなので、 テクスチャを使用しない場合は、必ずデフォルト(“CL_16Bnk”あるいは指定しない) にしてください。ここに他のモードを指定すると、ポリゴンが表示されなくなります。

 グループ【6】の例外として、“CL_Gouraud |- CL_Half”と“CL_Gouraud |- CL_Trans” が使用できます。 半輝度グーローシェーディング、半透明グーローシェーディングを使いたい時に利用してください。
なお、グーローシェーディングを使用する場合は、第5パラメータの設定と併せてここにも“CL_Gouraud” をセットする必要があります。
半輝度、半透明、グーローシェーディングを使用する場合、ポリゴンではRGBダイレクト、 テクスチャーは32768色RGBモードのみサポートされます。 その他の設定では正しく表示できませんので注意してください。

7-8. Dir

 7番目のパラメータは“Dir”です。オブジェクトがポリゴンなのかテクスチャなのか、 また、テクスチャならばどのように反転させるのかを指定します。

表7-5 Dir
 マクロ    内  容  
sprNoflip テクスチャを通常表示します
sprHflip テクスチャを左右反転します
sprVflip テクスチャを上下反転します
sprHVflip テクスチャを上下左右反転します
sprPolygon ポリゴンを表示します
sprPolyLineポリラインを表示します
sprLine 初めの2点を使用した直線を表示します

注意
 オブジェクトにテクスチャを使っていない場合は、“sprHflip”や“sprVflip” を指定しないでください。
“sprLine”は、他のポリゴンと同様に4点として指定してください (初めの2点を繰り返し指定)。

7-9. Option

 最後のパラメータは“Option”です。ポリゴン、テクスチャに対するその他の設定は、 ここで指定します。現在のSGL(Ver 3.0)でサポートしているオプションは次の5つです。

表7-6 Option
 マクロ        内    容     
UseLight 光源計算を行う
UsePaletteポリゴンのカラーがパレット形式であることを示す
UseNearClip4頂点がslWindowClipLevelで指定した画面外に出たら表示しない
UseDepth平行光源でのデプスキューの計算を行う
UseGouraudリアルタイムグーローによる光源計算を行う(slPutPolygonXでのみ有効)

 これらのオプションはor演算子“ |”を使って複数指定することができます。

注意
 オプションを使わない場合は、マクロ“No_Option”を指定してください。
ポリゴンのカラーがパレット形式の時に光源計算を行いたい場合は、“UsePalette”と“UseLight”を併用してください。

付記 本章に登場した SGL ライブラリ関数

 本章では、次表の関数を解説しました。

表7-7 本章に登場した SGL ライブラリ関数
 関数型  関数名  パラメータ  機 能 
voidslDMACopySrc,dst,cntCPU DMAを用いたブロック転送


戻る進む
SGL User's ManualPROGRAMMER'S TUTORIAL
Copyright SEGA ENTERPRISES, LTD., 1997