njDrawSprite3D | English |
---|---|
▲|INDEX|■ | |
3Dスプライトの描画 |
#include <Ninja.h> void njDrawSprite3D( sp, n, attr ) NJS_SPRITE *sp Int n Uint32 attr
スプライトはXYZ空間に描画されます。
アトリビュートは以下の設定が可能です。
NJD_SPRITE_ANGLE | テクスチャの回転を有効にします。 |
NJD_SPRITE_COLOR | テクスチャのカラー演算を有効にします。 カラーデータはnjSetConstantMaterial()でセットした値を使います。 |
NJD_SPRITE_HFLIP | テクスチャを左右反転します。 |
NJD_SPRITE_VFLIP | テクスチャを上下左右反転します。 |
NJD_SPRITE_ALPHA | 半透明を使用する場合にセットします。抜きテクスチャの場合でもセットします。 |
NJD_SPRITE_SCALE | 常に画面正面を向きます。 |
スプライト構造体 typedef struct { NJS_POINT3 p; /* point */ NJS_VECTOR v; /* normal */ Float sx,sy; /* scale */ Angle ang; /* angle */ NJS_TEXLIST *tlist; /* texture list */ NJS_TEXANIM *tanim; /* animation list */ } NJS_SPRITE; p 3D座標を設定します。 v 現バージョンでは使用しません。 sx,sy 横縦の拡大率を指定します。 ang 回転角を設定します。ただし、attrにNJD_SPRITE_ANGLEを設定した場合有効になります。 tlist スプライトで使用するテクスチャのテクスチャリストを設定します。 テクスチャリストはあらかじめnjLoadTexture()でロードされていなければなりません。 tanim テクスチャアニメーションパターンを設定します。 この構造体の並びがテクスチャ番号に対応します。 テクスチャアニメーション構造体 typedef struct { Sint16 sx,sy; /* size */ Sint16 cx,cy; /* center */ Sint16 u1,v1; /* tex1 */ Sint16 u2,v2; /* tex2 */ Sint16 texid; /* texture id */ Sint16 attr; /* attribute */ } NJS_TEXANIM; sx,sy スプライトのサイズを指定します。 テクスチャのサイズとは無関係に指定できます。 cx,cy テクスチャの中心座標を設定します。左上からの相対位置で指定しこの位置が描画位置に対応します。 また、回転の中心になります。 u1,v1 テクスチャ左上のUV座標を設定します。 テクスチャサイズに関係なく0〜255を指定します。 u2,v2 テクスチャ右下のUV座標を設定します。 テクスチャサイズに関係なく0〜255を指定します。 texid テクスチャリストの何番目のテクスチャを使用するか設定します。 attr 現バージョンでは使用しません。
NJS_TEXANIM anim[] = { { 128,128, 64, 64, 0, 0,127,127, 0, 0 }, { 128,128, 64, 64,128, 0,255,127, 0, 0 }, { 128,128, 64, 64, 0,128,127,255, 0, 0 }, { 128,128, 64, 64,128,128,255,255, 0, 0 }, { 128,128, 64, 64, 0, 0,127,127, 1, 0 }, { 128,128, 64, 64,128, 0,255,127, 1, 0 }, { 128,128, 64, 64, 0,128,127,255, 1, 0 }, { 128,128, 64, 64,128,128,255,255, 1, 0 }, }; main() { NJS_SPRITE sprite; 各種初期設定 sprite.tlist = &texlist; sprite.tanim = anim; sprite.ang = 0; sprite.sx = 1.0f; sprite.sy = 1.0f; sprite.p.x = 0.0f; sprite.p.y = 0.0f; sprite.p.z = 0.0f; njInitSystem( NJD_RESOLUTION_640x480, 1 ); njInitMatrix( matrix, 128 ); njInit3D( vbuf, 1024, abuf, fbuf, 32 ); njInitView( &view ); njCreateLight( &light, NJD_DIR_LIGHT ); njSetView( &view ); njInitTexture( tex, 100 ); njLoadTexture( &texlist ); while(1) { njClearMatrix(); njTranslate( NULL, 0.f, 0.f, -400.f ); njDrawSprite3D( &sprite, 2, NJD_SPRITE_ANGLE ); sprite.angle += 100; ...... } }
njDrawSprite3D | ▲|INDEX|■ |
---|