Main Page | Modules | Data Structures | File List | Data Fields | Globals

ps2util_surface.c File Reference

3DオブジェクトOBJECT のマネージャ More...

#include <stdlib.h>
#include <stdio.h>
#include "libps2.h"
#include "util_hash.h"

Include dependency graph for ps2util_surface.c:

Include dependency graph

Go to the source code of this file.

Defines

#define HASH_SIZE   128
 Hash size.


Functions

char ps2util_obj_Init (void)
void ps2util_obj_Finish (void)
OBJECTps2util_obj_Create_fromXML (char *xml)
 3d object を生成する

void ps2util_obj_Free (OBJECT *obj)
 3d object を撤去する

void ps2util_obj_Set_effect (OBJECT *obj, unsigned effect)
 3d objectにエフェクトを指定する

void ps2util_obj_Set_texture (OBJECT *obj, TEXTURE *tex)
 OBJECTにテクスチャTEXTUREを割り当てる

void ps2util_obj_Renew_transMatrix (OBJECT *obj)
 OBJECTの座標変換行列を更新する

void ps2util_obj_Draw (OBJECT *obj)
 OBJECTをスクリーンに描画する


Variables

Util_hashhash_handler
 Hash-Object handler.

FMATRIX ps2util_unitMatrix


Detailed Description

3DオブジェクトOBJECT のマネージャ

3DオブジェクトOBJECTread_xml_3d_file を用いて生成されるが、 read_xml_3d_file に同じファイルを2度読ませると、 2度ともメモリに展開してしまう。

そこで, 1度読み込んだOBJECTはハッシュに登録しておき、 2度同じファイルが指定されたら、ハッシュから参照してコピー/生成する。

Definition in file ps2util_surface.c.


Define Documentation

#define HASH_SIZE   128
 

Hash size.

Definition at line 21 of file ps2util_surface.c.


Function Documentation

OBJECT* ps2util_obj_Create_fromXML char *  xml  ) 
 

3d object を生成する

Parameters:
xml XMLファイル名を指定
Returns:
成功時に 生成されたOBJECT を戻し、失敗時にはNULLを戻す
この関数はxmlで指定されたXMLファイルを展開し、3Dオブジェクトを生成する。 生成された3Dオブジェクト・データはハッシュ・テーブルに登録され、 以降、同じ名前が指定されるとハッシュ・テーブルに登録された 3Dオブジェクト・データを参照するようになる。

ちなみに、ps2util_objの接頭辞が付いている関数はOBJECTを操作するための関数である。

Definition at line 58 of file ps2util_surface.c.

void ps2util_obj_Draw OBJECT obj  )  [inline]
 

OBJECTをスクリーンに描画する

Parameters:
obj OBJECTのポインタ

Definition at line 165 of file ps2util_surface.c.

void ps2util_obj_Finish void   ) 
 

Definition at line 50 of file ps2util_surface.c.

void ps2util_obj_Free OBJECT obj  ) 
 

3d object を撤去する

Parameters:
obj OBJECTのポインタ
ps2util_obj_Create_fromXMLと対になっており、 OBJECTによって表現されている3Dオブジェクト・データをメモリから撤去する。

ただし、データを撤去する前にハッシュ・テーブルを参照して、 指定されたデータが他のOBJECTによって使われていないかどうかを調べて、 もし使われているなら消さない。完全に他のOBJECTに使われなくなった時点で メモリから撤去される。

Definition at line 93 of file ps2util_surface.c.

char ps2util_obj_Init void   ) 
 

Definition at line 34 of file ps2util_surface.c.

void ps2util_obj_Renew_transMatrix OBJECT obj  ) 
 

OBJECTの座標変換行列を更新する

Parameters:
obj OBJECTのポインタ
OBJECTは 位置を表すメンバ変数xyz, 姿勢を表すメンバ変数angleを持つが、これらを変更するだけでは 3Dオブジェクトを操作することはできない。重要なのが、座標変換行列である。 座標変換行列を計算/セットしなければ3Dオブジェクトは動かない。

この関数はxyzとangleから座標変換行列を計算してOBJECTの 座標変換行列を表すメンバtransferにセットする。

つまりxyzとangleの数値を変更した後はこの関数で必ず座標変換行列を 更新しなければならない。

Definition at line 149 of file ps2util_surface.c.

void ps2util_obj_Set_effect OBJECT obj,
unsigned  effect
 

3d objectにエフェクトを指定する

Parameters:
obj OBJECTのポインタ
effect 3Dオブジェクトのエフェクト
指定できるエフェクトは、フラット/グーロー・シェーディング、 テクスチャ「使用/不使用」、アルファ・ブレンディング「使用/不使用」 がある。

ps2util_obj_Create_fromXMLread_xml_3d_fileなどで生成された OBJECTの初期エフェクトは, グーロー・シェーディング、テクスチャ使用、 アルファ・ブレンディング「使用」 である。

例えばアルファ・ブレンディングを「不使用」、テクスチャを「不使用」で エフェクト設定する場合は、この関数を次のようにして記述する。

OBJECT* obj;
...
ps2util_obj_Set_effect( obj, EFFECT_ALPHABLEND_UNUSE | EFFECT_TEXTURE_UNUSE );

エフェクト指定に用いるマクロは

EFFECT_SHADING_FLAT,EFFECT_GOURAUD,EFFECT_TEXTURE_USE, EFFECT_TEXTURE_UNUSE,EFFECT_ALPHABLEND_USE,EFFECT_ALPHABLEND_UNUSE

の6種類がある。

Definition at line 112 of file ps2util_surface.c.

void ps2util_obj_Set_texture OBJECT obj,
TEXTURE tex
 

OBJECTにテクスチャTEXTUREを割り当てる

Parameters:
obj OBJECTのポインタ
tex TEXTUREのポインタ

Definition at line 137 of file ps2util_surface.c.


Variable Documentation

Util_hash* hash_handler [static]
 

Hash-Object handler.

Definition at line 27 of file ps2util_surface.c.

FMATRIX ps2util_unitMatrix [static]
 

Initial value:

 {{1, 0, 0, 0},
                                     {0, 1, 0, 0},
                                     {0, 0, 1, 0},
                                     {0, 0, 0, 1}}

Definition at line 28 of file ps2util_surface.c.


Generated on Thu Apr 22 09:46:27 2004 for ps2util by doxygen 1.3.3