機能
頂点を指定し図形を描画する。
API
void sceGuDrawArray ( int prim,
int vtype,
int count,
const void * indices,
const void * vertices
)
第一引数(prim)
描画する図形の種別を指定します。
|
|
必要となる vertice構造体数 |
GU_POINTS |
1つの点を描画します |
1 |
GU_LINES |
2つの点を結ぶ幅1ドットのラインを描画します |
2 |
GU_LINE_STRIP |
n点を結ぶ幅1ドットのラインを描画します |
n(2以上) |
GU_TRIANGLES |
3点を結ぶ三角形を描画します 三角形の内部は頂点カラーもしくはテクスチャーで塗りつぶされます |
3 |
GU_TRIANGLE_STRIP |
最初の3点の三角形から始め、残りの頂点をそれに連結させ、三角形の連なりを描画します |
3 |
GU_TRIANGLE_FAN |
最初の1点を共有する複数の三角形を描画します |
3 |
GU_SPRITES |
2点を対角とし長方形を描画します 四角形の内部は頂点カラーもしくはテクスチャーで塗りつぶされます |
2 |
第二数(vtype)
描画する図形の頂点情報を管理するvertice構造体のデータタイプを指定します。
必須項目
頂点座標
GU_VERTEX_8BIT |
頂点座標8ビット符号付き整数(char)で指定します |
GU_VERTEX_16BIT |
頂点座標16ビット符号付き整数(short)で指定します |
GU_VERTEX_32BITF |
頂点座標332ビット浮動小数点数(float)で指定します |
トランスフォーム
GU_TRANSFORM_2D |
2Dとして描画する場合に指定 |
GU_TRANSFORM_3D |
3Dとして描画する場合に指定 |
オプション
UV座標
GU_TEXTURE_8BIT |
8ビット符号付き整数(char)テクスチャ座標 |
GU_TEXTURE_16BIT |
16ビット符号付き整数(short)テクスチャ座標 |
GU_TEXTURE_32BITF |
32ビット浮動小数点数(float)テクスチャ座標 |
頂点カラー
GU_COLOR_5650 |
16ビットカラー (R5G6B5A0) |
GU_COLOR_5551 |
16ビットカラー (R5G5B5A1) |
GU_COLOR_4444 |
16ビットカラー (R4G4B4A4) |
GU_COLOR_8888 |
32ビットカラー (R8G8B8A8) |
インデックスバッファ
GU_INDEX_8BIT |
8ビット(unsigned char)インデックスバッファ |
GU_INDEX_16BIT |
16ビット(unsigned short)インデックスバッファ |
ウェイト(3D)
GU_WEIGHT_8BIT |
8-bit weights |
GU_WEIGHT_16BIT |
16-bit weights |
GU_WEIGHT_32BITF |
32-bit weights (float) |
法線(3D)
GU_NORMAL_8BIT |
8-bit normals |
GU_NORMAL_16BIT |
16-bit normals |
GU_NORMAL_32BITF |
32-bit normals (float) |
頂点スキニングのウェイト(重み)
GU_WEIGHTS(n) |
ウェイトの数 (1-8) |
頂点ブレンディング
GU_VERTICES(n) |
ブレンドする頂点の数 (1-8) |
補足
UV座標と頂点カラーは両方指定できますが、初期状態ではテクスチャを貼る場合は
頂点カラー情報は無駄になりますので、転送負荷軽減のためにも指定しない
方がいいでしょう。
UV座標はOpenGLやDirectX等のようにテクスチャサイズに対する割合で
指定するのではなく、ピクセル単位で絶対的な位置を指定します。
頂点に使用する構造体を定義する際、各情報は下記の順序で指定してください。
下記は全部指定した場合です。使わない部分は指定しないでください。
[頂点スキニングのウェイト (0-8)]
[UV座標]
[頂点カラー]
[法線]
頂点座標
頂点ブレンディングを使用する場合、ブレンドする頂点の数だけ
これを繰り返します。
また、構造体のサイズは必ず4バイトの倍数にならなければなりません(アラインメント)。
そうならない場合、無駄なメンバ(パッド)を作ってでも4の倍数にしてください。
例
/* アラインメントが一致する場合 */
typedef struct{
float u, v;
uint32_t color;
float nx, ny, nz;
float x, y, z;
} MyVertex;
#define MyVertexType GU_VERTEX_32BITF|GU_TEXTURE_32BITF| \
GU_COLOR_8888|GU_NORMAL_32BITF
/* アラインメントが不一致の場合 */
typedef struct{
float u, v;
uint32_t color;
float nx, ny, nz;
short x, y, z;
short pad; /* パッド */
} MyVertexSmart;
#define MyVertexSmartType GU_VERTEX_16BIT|GU_TEXTURE_32BITF| \
GU_COLOR_8888|GU_NORMAL_32BITF
第三引数(count)
indices==NULLの場合、vertice構造体の数を指定。
indices!=NULLの場合、indicesの要素数を指定。
第四引数(indices)
インデックスバッファの先頭アドレスを指定、またはNULL
第五引数(vertices)
頂点情報バッファの先頭アドレスを指定
最終更新:2010年05月11日 23:43