English
PROGRAMMER'S GUIDEVDP1ライブラリ
戻る進む
VDP1ライブラリ

6.VDP1 3Dリファレンス


6.1 データ仕様


Title

データ仕様

Data

クラスタ定義

Data Name

SprCluster

No

typedef     struct SprCluster {
     Uint16          no;           /*     クラスタ番号                */
     Uint16          angleSeq;     /*     回転順序                  */
     MthXyz          angle;        /*     親クラスタの座標系における回転       */
     MthXyz          point;        /*     親クラスタの座標系における原点の座標    */
     SprObject3D     *object       /*     3Dオブジェクト               */
     SprCluster      *next;        /*     次クラスタ                 */
     SprCluster      *child;       /*     子クラスタ                 */
     SprInbetInf     *inbetInf;    /*     オブジェクト間接続ポリゴン情報       */
     void            (*transStart)(SprCluster*);
                                   /*     座標変換開始前ユーザコールバックルーチン  */
     void            (transEnd)(SprCluster*, SprObject3D*, MthMatrix*, MthXyz*);
                                   /*     座標変換終了後ユーザコールバックルーチン  */
     void            *context;     /*     ユーザコンテキストエリア          */
} SprCluster;

noはユーザコールバックルーチンがクラスタテーブルを識別するためのもので、設定は任意です。

angleSeq = ROT_SEQ_ZYX : オブジェクトの回転操作をZ→Y→Xの順番で行う
           = ROT_SEQ_ZXY :        ”    Z→X→Y  ”
           = ROT_SEQ_YZX :        ”    Y→Z→X  ”
           = ROT_SEQ_YXZ :        ”    Y→X→Z  ”
           = ROT_SEQ_XYZ :        ”    X→Y→Z  ”
           = ROT_SEQ_XZY :        ”    X→Z→Y  ”

3Dオブジェクト、次クラスタおよび子クラスタが接続されない場合、各々
object、next、childを0にします。

オブジェクト間接続ポリゴン情報がない場合は、inbetInfを0にします。

transStartはこのクラスタの座標変換開始前に呼び出されるユーザのコールバック ルーチンを指定します。ルーチン内ではクラスタの移動、オブジェクトデータの 変更などを行います。コールバックルーチンがない場合には0にします。

[transStartルーチンのコーリングシーケンス] void transStart(SprCluster *cluster);
cluster :自クラスタテーブル

transEndはこのクラスタの座標変換終了後に呼び出されるユーザのコールバック
ルーチンを指定します。このコールバックルーチンはクラスタに接続される3D
オブジェクト毎に呼び出されます。コールバックルーチンがない場合には0にします。

[transStartルーチンのコーリングシーケンス] void transEnd(SprCluster *cluster, SprObject3D *object,
MthMatrix *worldMatrix, MthXyz *worldVertPoint);
cluster :自クラスタテーブル object :3Dオブジェクトテーブル worldMatrix :ワールド座標系への変換マトリックス(3行4列) worldVertPoint :ワールド座標系での頂点座標値テーブル (3Dスプライトワークエリア定義マクロで #define SPR_3NEED_WORLD_VERTを定義した場合に返す。)

contextはユーザコールバックルーチンがクラスタ別に使用するコンテキストエリ アを指定します。ない場合には0にします。


Title

データ仕様

Data

オブジェクト定義

Data Name

SprObject3D

No

typedef     struct SprObject3D {
     Uint16          no;               /*     オブジェクト番号            */
     Uint16          dispFlag          /*     表示フラグ               */
     Uint16          vertCount;        /*     頂点数                 */
     Uint16          surfaceCount;     /*     面数                  */
     MthXyz          *vertPoint;       /*     頂点座標テーブル            */
     MthXyz          *vertNormal;      /*     頂点の法線ベクトルテーブル       */
     SprSurface     *surface;          /*     面定義テーブル             */
     MthXyz           *surfaceNormal;  /*     面の法線ベクトルテーブル        */
     MthXyz          *surfaceVert;     /*     面代表点座標テーブル          */
     Uint16          **shdIdxTbl;      /*     シェーディングインデックステーブル   */
     Fixed32          surfNormK;       /*     面法線ベクトルの計算補正値       */
     SprObject3D     *next;            /*     次3Dオブジェクト            */
} SprObject3D;

noはユーザコールバックルーチンがオブジェクトテーブルを識別するためのもので、設定は任意です。

dispFlag b15,b14 = 00 :      ポリゴン表示
                 = 10 :      ポリライン表示

b12 = 1 : 両面ポリゴン

b9,b8 = 00 : シェーディングなし 01 : フラットシェーディング 10 : グーローシェーディング

b4 = 1 : オブジェクト間接続ポリゴンオブジェクト

vertNormal    : グーローシェーディングを行うときに設定します。
surface       : 面を構成する頂点や、カラー情報を面ごとに定義したテーブルのポインタ
surfaceNormal : 面ごとの法線を定義したテーブルのポインタ
surfaceVert   : 面の輝度計算をするときに参照される面の代表点(中心点)座標テーブルのポインタを設
                定します。0を設定すると面定義の最初の頂点を代表点として使用します。
shdIdxTbl     : シェーディングテーブルによるフラットシェーディングを行う場合に、シェーディング
                テーブルのインデックステーブルを設定します。グーローシェーディング指定の場合に、
                このパラメータが指定されるとshdIdxTbl[0]をグーローシェーディングのグレイコー
                ドテーブルとします。フラットシェーディングでかつ面定義の描画モードがテクスチャ
                指定の場合に、このパラメータが指定されるとshdIdxTbl[0]をフラットシェーディン
                グのグレイコードテーブルとします。
surfNormK     : このオブジェクトに対してSPR_3SetNormVect()ルーチンにより面の法線ベクトルを計
                算する時、またはこのオブジェクトがオブジェクト間接続ポリゴンオブジェクトの場合
                に指定します。詳しくは数学計算ライブラリのMTH_ComputeNormVect()ルーチンのsur
                fNormKパラメータを参照してください。
                オブジェクト間接続ポリゴンオブジェクトの場合はマイナス値を指定します。

頂点の法線ベクトルテーブル、シェーディングインデックステーブルおよび次オブジェクトが接続されない場合、各々vertNormal、shdIdxTbl、nextを0にします。

シェーディングテーブルは次の形式でRGBコードの32階調で指定します。

Uint16 shadingTbl[32]; 0←暗 明→31

両面ポリゴン指定を1にすると、片面ポリゴンデータを両面表示します。


Title

データ仕様

Data

面定義

Data Name

SprSurface

No

typedef     struct SprSurface {
     Uint16     vertNo[4];     /*     面を構成する頂点番号      */
     Uint16     drawMode;      /*     描画モード           */
     Uint16     color;         /*     カラーデータ          */
} SprSurface;

drawMode    b15,b14 = 00 :  colorはカラーコード
                      01 :  colorはテクスチャのキャラクタ番号
                      10 :  colorはシェーディングテーブルのインデックス番号
                      11 :  colorは自動シェーディングの元RGBコード

b13,b12 = 00 : 座標変換後の4頂点のうち最小値をZソートの対象点とします。 01 : 座標変換後の4頂点のうち最大値をZソートの対象点します。 10 : 座標変換後の4頂点のうち中心値をZソートの対象点とします。

b11-b0 : スプライトの描画モードワードと同じです。 drawModeでテクスチャーを指定した場合、colorのビットは次のようになります。 color b15,b14ではテクスチャーの反転モードを指定します。 b15,b14 =00 :反転なし =01 :左右反転 =10 :上下反転 =11 :上下左右反転

b13-b0 :ラクスチャのキャラクタ番号


Title

データ仕様

Data

オブジェクト間接続ポリゴン情報

Data Name

SprInbetInf

No

typedef     struct SprInbetInf {
     Sint32               vertCount;         /*  取り出し頂点数          */
     SprObject3D          *fromObj;          /*  接続頂点データ取り出しオブジェクト*/
     Uint16               *fromVertNo;       /*  取り出し頂点番号配列       */
     SprObject3D          *toObj;            /*  接続頂点データ設定オブジェクト  */
     Uint16               *toVertNo;         /*  設定頂点番号配列         */
     SprInbetInf          *next;             /*  次オブジェクト間接続ポリゴン情報 */
} SprTexture;

 次のオブジェクト間接続ポリゴン情報がない場合はnextを0にします。


Title

データ仕様

Data

テクスチャテーブル

Data Name

SprTexture

No

typedef     struct SprTexture {
     Uint16               charNo;            /*  キャラクタ番号          */
     Uint16               colorMode;         /*  カラーモード           */
     Uint16               color;             /*  カラーデータ           */
     Uint16               width;             /*  キャラクタの幅          */
     Uint16               height;            /*  キャラクタの高さ         */
     Uint8                *charData;         /*  キャラクタデータのポインタ    */
     SprLookupTbl         *lookupTbl;        /*  ルックアップテーブルのポインタ  */
} SprTexture;

SprTexture texture[n]; 最終エントリの charNo は 0xffff(ストッパです) にします。

colorMode : b5 - b3 はスプライト描画モードワードと同じです。 color :カラーデータ カラーモード=1の時はルックアップテーブル番号 カラーモード=0、2、3、4の時はカラーバンクコード カラーモード=5の時は無視


Title

データ仕様

Data

3D環境データテーブル

Data Name

Spr3dStatus

No

typedef     struct Spr3dStatus {
     MthXyz          lightAngle;            /*  光源アングル             */
     MthXyz          viewCoordPoint;        /*  視点座標系内の視点位置        */
     MthXyz          viewPoint;             /*  視点座標               */
     MthXyz          viewAngle;             /*  視点アングル             */
     Sint32          viewAngleSeq;          /*  視点アングル回転操作         */
     Sint32          zSortMode;             /*  ZソートZ座標値の採用モード     */
     Fixed32         zSortZMin;             /*  Zソート現視点座標系Z最小値     */
     Fixed32         zSortZMax;             /*  Zソート現視点座標系Z最大値     */
     Fixed32         clipZMin;              /*  視点座標系クリップZ最小値      */
     Fixed32         clipZMax;              /*  視点座標系クリップZ最大値      */
     Sint32          clipLevel;             /*  クリッピングレベル          */
     MthXy           unitPixel;             /*  x,y1.0に対するスクリーンのピクセル数*/
} Spr3dStatus;


戻る進む
PROGRAMMER'S GUIDEVDP1ライブラリ
Copyright SEGA ENTERPRISES, LTD., 1997