「API/Gu/sceGuDrawArray」の編集履歴(バックアップ)一覧はこちら
追加された行は緑色になります。
削除された行は赤色になります。
**機能
頂点を指定し図形を描画する。
**API
#asciiart(blockquote){void sceGuDrawArray ( int prim,
int vtype,
int count,
const void * indices,
const void * vertices
)
}
**第一引数(prim)
描画する図形の種別を指定します。
|||必要となる&BR()vertice構造体数|
|GU_POINTS|1つの点を描画します|1|
|GU_LINES|2つの点を結ぶ幅1ドットのラインを描画します|2|
|GU_LINE_STRIP|n点を結ぶ幅1ドットのラインを描画します|n(3以上)|
|GU_TRIANGLES|3点を結ぶ三角形を描画します&BR()三角形の内部は頂点カラーもしくはテクスチャーで塗りつぶされます|3|
|GU_TRIANGLE_STRIP|幅1ドットのラインで3点を結ぶ三角形を描画します|3|
|GU_TRIANGLE_FAN|||
|GU_SPRITES|2点を対角とし四角形を描画します&BR()四角形の内部は頂点カラーもしくはテクスチャーで塗りつぶされます|2|
**第二数(vtype)
描画する図形の頂点情報を管理するvertice構造体のデータタイプを指定します。
&bold(){必須項目}
頂点座標
|GU_VERTEX_8BIT|頂点座標8bit(1byte)で指定します|
|GU_VERTEX_16BIT|頂点座標16bit(2byte)で指定します|
|GU_VERTEX_32BITF|頂点座標32bit float(4byte)で指定します|
トランスフォーム
|GU_TRANSFORM_2D|2Dとして描画する場合に指定|
|GU_TRANSFORM_3D|3Dとして描画する場合に指定|
&bold(){オプション}
UV座標
|GU_TEXTURE_8BIT|8-bit texture coordinates|
|GU_TEXTURE_16BIT|16-bit texture coordinates|
|GU_TEXTURE_32BITF|32-bit texture coordinates (float)|
頂点カラー
|GU_COLOR_5650|16-bit color (R5G6B5A0)|
|GU_COLOR_5551|16-bit color (R5G5B5A1)|
|GU_COLOR_4444|16-bit color (R4G4B4A4)|
|GU_COLOR_8888|32-bit color (R8G8B8A8)|
インデックスバッファ
|GU_INDEX_8BIT|8-bit vertex index|
|GU_INDEX_16BIT|16-bit vertex index|
ウェイト(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)|Number of weights (1-8)|
詳細不明(ベクトルブレンディング?)
|GU_VERTICES(n)|Number of vertices (1-8)|
&bold(){補足}
UV座標と頂点カラーは両方指定できますが、テクスチャを貼る場合は
頂点カラー情報は無駄になりますので転送負荷軽減のためにも指定しない
方がいいでしょう。
インデックスバッファと法線についてはサンプルソースが見つかっていないので
指定方法は不明です。
vertice構造体を定義する際、各情報は下記の順序で指定してください。
下記は全部指定した場合です。使わない部分は指定しないでください。
[for vertices(1-8)]
[weights (0-8)]
[texture uv]
[color]
[normal]
[vertex]
また、構造体のサイズは必ず4バイトの倍数にならなければなりません。
そうならない場合、無駄なメンバを作ってでも4の倍数にしてください。
&bold(){例}
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
**第三引数(count)
vertice構造体の数を指定
**第四引数(indices)
インデックスバッファの先頭アドレスを指定
**第五引数(vertices)
頂点情報バッファの先頭アドレスを指定
**機能
頂点を指定し図形を描画する。
**API
#asciiart(blockquote){void sceGuDrawArray ( int prim,
int vtype,
int count,
const void * indices,
const void * vertices
)
}
**第一引数(prim)
描画する図形の種別を指定します。
|||必要となる&BR()vertice構造体数|
|GU_POINTS|1つの点を描画します|1|
|GU_LINES|2つの点を結ぶ幅1ドットのラインを描画します|2|
|GU_LINE_STRIP|n点を結ぶ幅1ドットのラインを描画します|n(2以上)|
|GU_TRIANGLES|3点を結ぶ三角形を描画します&BR()三角形の内部は頂点カラーもしくはテクスチャーで塗りつぶされます|3|
|GU_TRIANGLE_STRIP|最初の3点の三角形から始め、残りの頂点をそれに連結させ、三角形の連なりを描画します|3|
|GU_TRIANGLE_FAN|最初の1点を共有する複数の三角形を描画します|3|
|GU_SPRITES|2点を対角とし長方形を描画します&BR()四角形の内部は頂点カラーもしくはテクスチャーで塗りつぶされます|2|
**第二数(vtype)
描画する図形の頂点情報を管理するvertice構造体のデータタイプを指定します。
&bold(){必須項目}
頂点座標
|GU_VERTEX_8BIT|頂点座標8ビット符号付き整数(char)で指定します|
|GU_VERTEX_16BIT|頂点座標16ビット符号付き整数(short)で指定します|
|GU_VERTEX_32BITF|頂点座標332ビット浮動小数点数(float)で指定します|
トランスフォーム
|GU_TRANSFORM_2D|2Dとして描画する場合に指定|
|GU_TRANSFORM_3D|3Dとして描画する場合に指定|
&bold(){オプション}
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)|
&bold(){補足}
UV座標と頂点カラーは両方指定できますが、初期状態ではテクスチャを貼る場合は
頂点カラー情報は無駄になりますので、転送負荷軽減のためにも指定しない
方がいいでしょう。
UV座標はOpenGLやDirectX等のようにテクスチャサイズに対する割合で
指定するのではなく、ピクセル単位で絶対的な位置を指定します。
頂点に使用する構造体を定義する際、各情報は下記の順序で指定してください。
下記は全部指定した場合です。使わない部分は指定しないでください。
[頂点スキニングのウェイト (0-8)]
[UV座標]
[頂点カラー]
[法線]
頂点座標
頂点ブレンディングを使用する場合、ブレンドする頂点の数だけ
これを繰り返します。
また、構造体のサイズは必ず&bold(){4バイト}の倍数にならなければなりません(アラインメント)。
そうならない場合、無駄なメンバ(パッド)を作ってでも4の倍数にしてください。
&bold(){例}
/* アラインメントが一致する場合 */
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)
&bold(){indices==NULL}の場合、vertice構造体の数を指定。
&bold(){indices!=NULL}の場合、indicesの要素数を指定。
**第四引数(indices)
インデックスバッファの先頭アドレスを指定、またはNULL
**第五引数(vertices)
頂点情報バッファの先頭アドレスを指定