機能

頂点を指定し図形を描画する。

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)

頂点情報バッファの先頭アドレスを指定

タグ:

+ タグ編集
  • タグ:

このサイトはreCAPTCHAによって保護されており、Googleの プライバシーポリシー利用規約 が適用されます。

最終更新:2010年05月11日 23:43