3Dグラフィック用関数

初期化・設定・指定系処理

3次元グラフィック初期化

D3_Init

関数型 無し
引数 無し
D3関数を使用して3次元グラフィック処理を始める前に必ず一度呼び出す。
特別に指定がある処理を除いて、繰り返し呼び出す必要は無い。

void pceAppInit( void ){
  D2_Init();
  D3_Init();

 

視野の設定

D3_SetViewRange

関数型 無し
引数 int width, int height, int distance, int depth
3次元画像を投影する仮想スクリーン(視野)の設定を行う。
仮想スクリーンの幅width・高さheight・視点からの距離distance・最大視野深度depthの範囲の物体が描画される。

D3_SetViewRange(20,20,20,40); // 視界範囲の設定

 

ジオメトリ変換係数の構築

D3_BuildGeometryCoef

関数型 無し
引数 無し
ジオメトリ変換用の各種係数を構築し 視野設定情報を元に現在のウィンドウに投影する前処理を行う。
この関数の呼び出し前にウィンドウと視野の設定を必ず行っておく必要がある。

D2_WindowSet(10,10,108,68);//P/ECEの上下左右10ドット縮めたウィンドウ指定
D3_SetViewRange(20,20,20,40); // 視界範囲の設定
D3_BuildGeometryCoef(); // ジオメトリ係数の構築

 

スクリーンのZバッファ消去

D3_ScreenZBufferClear

関数型 無し
引数 無し
スクリーン全体のZバッファの消去を行なう
3Dグラフィック描画前に行わないと正常に描画されない

D3_ScreenZBufferClear(); // Zバッファの消去
D3_PolygonDecord(D3_GeometryVertex, sample_polygon, 17); // ポリゴン面の展開

 

ウィンドウのZバッファ消去

D3_WindowZBufferClear

関数型 無し
引数 無し
ウィンドウ範囲内のZバッファの消去を行なう
3Dグラフィック描画前に行わないと正常に描画されない

D3_WindowZBufferClear(); // Zバッファの消去
D3_PolygonDecord(D3_GeometryVertex, sample_polygon, 17); // ポリゴン面の展開

 

行列演算

行列の初期化

D3_MatrixInit

関数型 無し
引数 D3_MATRIX *matsrc
4行4列の行列を単位行列に初期化する。
下位4ビットが小数の固定小数点方式なので、対角成分の1は256で表される。

D3_MatrixInit(&Matrix); // 行列Matrixを単位行列化

 

行列の加算

D3_MatrixAdd

関数型 無し
引数 D3_MATRIX *matdst, D3_MATRIX *matsrc
4行4列の行列同士の加算を行う。
行列maddstに行列matsrcを加算する。

D3_MatrixAdd(&Matrix2, &Matrix1); // 行列Matrix1の値をMatrix2に加える

 

行列の複写

D3_MatrixCopy

関数型 無し
引数 D3_MATRIX *matdst, D3_MATRIX *matsrc
4行4列の行列をコピーする。
行列matdstに行列matsrcをコピーする。

D3_MatrixCopy(&Matrix2, &Matrix1); // 行列Matrix1の値をMatrix2に複写する

 

行列の乗算

D3_MatrixMultiply

関数型 無し
引数 D3_MATRIX *matdst, D3_MATRIX *matsrc
4行4列の行列同士の乗算を行う。
行列matdstに行列matsrcを乗算する。

D3_MatrixMultiply(&Matrix2, &Matrix1); // 行列Matrix1の値をMatrix2に乗算する

 

行列のスタック初期化

D3_MatrixStackInit

関数型 無し
引数 無し
4行4列の行列用のスタックポインターの初期化を行う。

D3_MatrixStackInit(); // 行列スタックポインターの初期化

行列のスタックへの格納

D3_MatrixPush

関数型 無し
引数 D3_MATRIX *matsrc
4行4列の行列用のスタック領域へ行列matsrcを格納する。

D3_MatrixPush(&Matrix); // 行列Matrixの一時退避

行列のスタックからの取り出し

D3_MatrixPop

関数型 無し
引数 D3_MATRIX *matsrc
4行4列の行列用のスタック領域から行列matsrcを取り出す。

D3_MatrixPop(&Matrix); // 行列Matrixへの取り出し

 

行列の移動処理

D3_MatrixMove

関数型 無し
引数 D3_MATRIX *matsrc, int x, int y, int z
行列marsrcをベクトルx,y,zで移動させる。

D3_MatrixMove(&Matrix, Xmove, Ymove, Zmove); // 行列Matrixを移動させる

 

行列の拡大処理

D3_MatrixSize

関数型 無し
引数 D3_MATRIX *matsrc, int x, int y, int z
行列marsrcを拡大率x,y,zで拡大させる。
下位4ビットが小数の固定小数点方式なので、等倍の指定は256となる。

D3_MatrixSize(&Matrix, Xsize, Ysize, Zsize); // 行列Matrixを拡大させる

 

行列のX軸回転処理

D3_MatrixXRot

関数型 無し
引数 D3_MATRIX *matsrc, ushort rot
行列marsrcを回転角rotでX軸回転させる。
回転角は1周で65536となる。

D3_MatrixXRot(&Matrix, Xrot); // 行列MatrixをX軸回転させる

行列のY軸回転処理

D3_MatrixYRot

関数型 無し
引数 D3_MATRIX *matsrc, ushort rot
行列marsrcを回転角rotでY軸回転させる。
回転角は1周で65536となる。

D3_MatrixYRot(&Matrix, Yrot); // 行列MatrixをY軸回転させる

行列のZ軸回転処理

D3_MatrixZRot

関数型 無し
引数 D3_MATRIX *matsrc, ushort rot
行列marsrcを回転角rotでZ軸回転させる。
回転角は1周で65536となる。

D3_MatrixZRot(&Matrix, Zrot); // 行列MatrixをZ軸回転させる

 

オブジェクト行列の作成

D3_BuildObjectMatrix

関数型 無し
引数 無し

オブジェクト用の4行4列の行列を作成する。
オブジェクト座標D3_X, D3_Y, D3_Z、オブジェクト回転D3_RadX, D3_RadY, D3_RadZ、オブジェクト拡大率D3_SizeX, D3_SizeY, D3_SizeZを元に
オブジェクト行列D3_ObjectMatrixを作成する。

D3_RadX = 0xc000; D3_RadY = 0; D3_RadZ = 0; // オブジェクトの角度
D3_SizeX = 0.5*256; D3_SizeY = 0.5*256; D3_SizeZ = 0.5*256; // オブジェクト拡大率
D3_X = 0; D3_Y = 0; D3_Z = 0; // オブジェクト座標
D3_BuildObjectMatrix(); // オブジェクト行列の作成

 

カメラ行列の作成

D3_BuildCameraMatrix

関数型 無し
引数 無し

カメラ用の4行4列の行列を作成する。
カメラ座標D3_CameraX, D3_CameraY, D3_CameraZ 、カメラ回転D3_CameraRadX, D3_CameraRadY, D3_CameraRadZを元に
カメラ行列D3_CameraMatrixを作成する。

D3_CameraRadX = 0; D3_CameraRadY = 0; D3_CameraRadZ = 0; // カメラの角度
D3_CameraX = 0; D3_CameraY = 0; D3_CameraZ = -40; // カメラの座標
D3_BuildCameraMatrix(); // カメラ行列の作成

 

グラフィック描画

頂点の展開

D3_Vertex2Geometry

関数型 無し
引数 D3_VERTEX *versrc, D3_VERTEX *verdst, int vernum

頂点座標のジオメトリ展開を行う。
頂点座標テーブルversrcから、変換後の頂点座標格納テーブルverdstに頂点数vernumだけ格納する。

D3_Vertex2Geometry(Vertex, D3_GeometryVertex, 22); // 頂点テーブルVertexから22頂点をジオメトリ変換

 

ポリゴン面の展開と描画

D3_PolygonDecord

関数型 無し
引数 D3_VERTEX *versrc, D3_POLYGON *polsrc, int polnum

ポリゴン面の展開を行う。
展開された頂点座標テーブルvertexと面属性テーブルpolsrcからポリゴン数polnumだけ展開する

D3_PolygonDecord(D3_GeometryVertex, Polygon, 17); // 頂点テーブルD3_GeometryVertexと面属性テーブルPolygonから17ポリゴン展開する

 

ライティングによる輝度補正

D3_PolygonLighting

関数型 無し
引数 D3_VERTEX *versrc, D3_POLYGON *polsrc, int vernum, int polnum

 

 

 

低レベル描画関数(高レベル関数の内部呼び出し関数群)

ポリゴン(多角形)の描画開始

D3_PolygonDraw

関数型 無し
引数 無し

設定された頂点情報を元に描画開始する。
頂点数D2_VertexNumber個の多角形として
頂点座標D2_SpriteVertexX[],D2_SpriteVertexY[],D2_SpriteVertexZ[]テーブル情報を元に描画する
ただしアルゴリズムの関係上、凹形状は正常に描画されない事がある
基本的にはD2_PolygonDrawと同様だが、Z座標による奥行きが有効になる

 

 

シェーディングポリゴン(多角形)の描画開始

D3_PolygonShadeDraw

関数型 無し
引数 無し

設定された頂点情報を元に描画開始する。
頂点数D2_VertexNumber個の多角形として
頂点座標D2_SpriteVertexX[],D2_SpriteVertexY[],D2_SpriteVertexZ[]テーブルと
頂点色D2_SpriteVertexC[]テーブル情報を元に描画する
色情報は0〜63までの多階調設定可能でディザリングモード時のみ有効になる
ディザリングモードがOFFの時は4階調に丸め込まれる
ただしアルゴリズムの関係上、凹形状は正常に描画されない事がある
基本的にはD2_PolygonShadeDrawと同様だが、Z座標による奥行きが有効になる

 

 

頂点群からポリゴン面の法線ベクトル算出

D3_Polygon2Vector

関数型 無し
引数 D3_VECTOR *vecdst

設定された頂点座標で表されるポリゴンの法線ベクトルを算出する

 

 

ベクトルの正規化

D3_VectorNormalize

関数型 無し
引数 D3_VECTOR *vecdst

ベクトル情報を正規化する

 

 

光源との相対量測定

D3_BaskLightIntensity

関数型 int
引数 D3_VECTOR *vecdst

光源と法線ベクトルの相対量を測定する

 

 

Zバッファによる頂点変形スプライトの描画

D3_SpriteStretchDraw

関数型 無し
引数 無し
 

 

 

スプライト面の表裏チェック

D2_SpriteFaceIsFront

関数型 int
引数 無し

頂点座標D2_SpriteVertexX[],D2_SpriteVertexY[]からなる平面の表裏の判断を行う
表なら真を、裏なら偽を返す

if ( D2_SpriteFaceIsFront() ) D2_PolygonDraw(); // 表向きの時のみ描画する

 

 

TOPに戻る

このページのコンテンツの著作権は放棄しません
またここのコンテンツを使用してのいかなる損害も保障いたしません
基本的にフリーソフト扱いですが、サポートやパッケージなどの要望がありましたらご連絡下さい