TSXScene

タスク

 TSXSceneオブジェクトは、シーンのレンダリング、および、シーンの管理を行います

 

リファレンス目次

プロパティ

(凡例:    読み取り専用)

カメラ CameraFrame
投影変換情報 FarZ
NearZ
FovH
FovV
AspectRatio
ProjectionMatrix
スクリーン変換情報 ScreenMatrix
設定 SortAlpha
その他 StateRestorer
BlendOpEnable

 

メソッド

コンストラクタ Create
デストラクタ Destroy
座標変換設定 SetProjection
SetViewPort
描画設定 RegisterBlendMode
描画 PushBillboard
PushBillboardLite
PushSprite
PushSpriteLite
Render
Clear
その他 SphereVisibility
FlushBBSP

 

リファレンス〜プロパティ

CameraFrame

CameraFrame : TSXFrame

 レンダリング時の、視点の位置・姿勢を司るフレームを示します。

 

FarZ
NearZ

FarZ : Single

NearZ : Single

 遠方クリッピング面、近方クリッピング面までの距離をそれぞれ示します。

 遠方クリッピング面より遠く、あるいは、近方クリッピング面より近くにある物体は描画されません。

 SetProjectionメソッドで決定されます

 

FovH
FovV

FovH : Single

FovV : Single

 画角(field of view)をラジアン単位で示します。FovHは水平方向、FovVは垂直方向の画角です。

 SetProjectionメソッドで決定されます

 

AspectRatio

AspectRatio : Single

 ビューポートの縦ピクセル数 / 横ピクセル数 を示します。

 SetProjectionメソッドで決定されます

 

ProjectionMatrix

ProjectionMatrix : D3DMatrix

 投影変換行列を示します。視野座標系から、正規座標系へ変換する行列です。

 SetProjectionメソッドで決定されます

 

ScreenMatrix

ScreenMatrix : D3DMatrix

 スクリーン変換行列を示します。正規座標系からスクリーン座標系へ変換する行列です。

 SetViewportメソッドで決定されます

 

SortAlpha 

SortAlpha : Boolean

 Trueならば、半透明体のソートを描画前に行います。

 Falseならば、半透明体のソートを行いません。

 

StateRestorer 

StateRestorer : TSXStateRestorer

 レンダリングステートを保存、復元するためのオブジェクトです。

 

BlendOpEnable 

BlendOpEnable : Boolean

 レンダリンクステートD3DRS_BLENDOPの設定が、この環境で有効かどうかを示します。Trueならば有効です。Falseならば無効であり、常にD3DRS_BLENDOPの値は、D3DBLEDOP_ADDとみなされます。

 RegisterBlendModeで新しいブレンドモードを追加するときの参考にしてください。

 

 

リファレンス〜メソッド

Create

constructor Create (ADG:TDGCarad; debugName:String = '');

 TSXSeneオブジェクトを生成します。

 ADGには、使用するTDGCaradコンポーネントを指定してください。

 debugNameは、デバッグログに出力される際の、このオブジェクトの名前です。プログラムの挙動とは直接関係ありません。


Destroy

destructor Destroy;

 TSXSceneオブジェクトを解放します。


SetProjection

procedure SetProjection(fov,aspect, nearZ,farZ:Single; setHorizontalFov:Boolean = True);

 ビューボリューム(視界)についての設定を行います。

 fovで、画角(視線から左右または上下どれだけの範囲を画面に納めるか、という角度)をラジアン単位で指定します。

 aspectで、ビューポートの縦横比を、縦 / 横の値で指定します

 nearZで、これ以上近づくと画面にレンダレングされない、という距離を指定します

 farZで、これ以上遠ざかると画面にレンダレングされない、という距離を指定します

 setHorizontalFovがTrueのとき、引数fovは水平方向の画角として設定され、Falseのとき、引数fovは垂直方向の画角として設定されます。

 

SetViewPort

procedure SetViewPort(left,top,right,bottom:DWord);

 ビューポート(フォーム内での描画先の矩形)の範囲を指定します。

 

RegisterBlendMode

function RegisterBlendMode(info:TSXBlendInfo):TSXBlendMode

TSXBlendInfo = record
  Sort:Boolean;               //Zソートする必要がある
  //以下、レンダリングステート設定用
  AlphaTestEnable:Boolean;    //カラーキー処理用、αテスト、FalseならAlphaFuncは無視
  AlphaFunc:D3DCMPFUNC;          //αテスト用比較関数

  AlphaBlendEnable:Boolean;   //もし、このメンバがFalseなら、以下の設定はスキップ
  SrcBlend:D3DBLEND;
  DestBlend:D3DBLEND;
  BlendOp:D3DBLENDOP;              //BlendOpが設定できるビデオカードのみ
end;

 infoで示される、新しいブレンドモードを追加します。新しいブレンドモードを識別するための値が返り値に入ります。

 TSXBlendInfoについては以下のとおりです。

Sort ソートの必要の有無を示します
Trueならば、描画の前にソートの必要あり
Falseならば、描画の前にソートの必要なし
AlphaTest Trueならば描画時にαテストを行います
AlphaFunc αテスト時のテスト関数を指定します。AlphaTest = Falseなら、この値は無視されます
AlphaBlendEnable Trueならば、αブレンディングを行います。この値がFalseのとき、以下の3つのパラメータは無視されます
SrcBlend これから書き込まれる色に対する係数を指定します
DestBlend これまで書き込んであった色に対する係数を指定します
BlendOp どのように合成するかを指定します。BlendOpEnable = Trueの環境でのみ有効です

 

PushBillboard 

procedure PushBillboard (ref:TSXFrame; pos:D3DVector;
      points:Array of TSXVertexBB; tex:TDGTexture;
      blendMode:TSXBlendMode = sxbColorKey; scaling:Boolean = True;
      filter:Boolean = True; topMost:Boolean = False;
	addrU:D3DTEXTUREADDRESS = D3DTADDRESS_CLAMP;
      addrV:D3DTEXTUREADDRESS = D3DTADDRESS_CLAMP);

TSXVertexBB = record
  Case Integer of
    0:(
      dx,dy:Single;     //中心からの相対座標
      color:D3DCOLOR;   //色
    	specular:D3DCOLOR;
  	tu,tv:Single;     //テクスチャ座標
      );
    1:(
      size:TVector2D;
      );
end;

 ビルボードを描画する準備を行います。次のRenderメソッド実行時に、バックバッファに反映されます。

 refで示されるフレームのposの位置を基準にして、pointsで示される四角形にtexで示されるテクスチャ貼ってを表示します。texにNilを指定すると、テクスチャ無しになります。

 blendModeでブレンドモードの指定が可能です

 scalingをTrueにすると、視点からの距離に応じて四角形の大きさを変更します。Falseにすると、視点からの距離によらず、一定の大きさの四角形を描きます。Falseの場合、画面上でのピクセル数でpoints[n].dx, points[n].dy を設定してください。

 filterをTrueにすると、バイリニアフィルタリングを適用して、拡大処理を滑らかにします。Falseの場合、ポイントフィルタリングを適用し、ギザギザした拡大になります。通常は前者でかまいませんが、文字を入れたテクスチャの描画などには後者が良いでしょう。

 topMostをTrueにすると、ほかの全てのオブジェクト(メッシュ・ビルボード・スプライト)より前面に表示されます。半透明体でもソートは行われません。 topMost = trueなオブジェクトが複数存在する場合は、後でPushされた物の方が前面に表示されます。

 addrU, addrV にて、テクスチャのアドレッシングモードを変更できます。デフォルトではD3DTADDRESS_CLAMP(テクスチャ座標0以下は0とみなし、テクスチャ座標1.0以上は1.0とみなす)

 注意 : pointsには必ず頂点を4つ指定してください。

 

PushBillboardLite 

pprocedure TSXScene.PushBillboardLite (ref:TSXFrame; pos:D3DVector; color:D3DCOLOR;
  size:Single; tex:TDGTexture; blendMode:TSXBlendMode = sxbColorKey;
  scaling:Boolean = True; filter:Boolean = True; topMost:Boolean = False;
  specular:D3DCOLOR = $00000000;
  addrU:D3DTEXTUREADDRESS = D3DTADDRESS_CLAMP;
  addrV:D3DTEXTUREADDRESS = D3DTADDRESS_CLAMP);
);

 ビルボードを描画する準備を行います。次のRenderメソッド実行時に、バックバッファに反映されます。

 refで示されるフレームのposの位置を基準にして、posで示される位置を中心にtexで示されるテクスチャ貼ってを表示します。

 ビルボードの横の大きさはsizeで指定し、色はcolorで指定します。縦の大きさはtexの縦横比に応じて自動的に決定されます。

 blendModeでブレンドモードの指定が可能です

 scalingをTrueにすると、視点からの距離に応じて四角形の大きさを変更します。Falseにすると、視点からの距離によらず、一定の大きさの四角形を描きます。Falseの場合、画面上でのピクセル数でsizeを設定してください。

 filterをTrueにすると、バイリニアフィルタリングを適用して、拡大処理を滑らかにします。Falseの場合、ポイントフィルタリングを適用し、ギザギザした拡大になります。通常は前者でかまいませんが、文字を入れたテクスチャの描画などには後者が良いでしょう。

 topMostをTrueにすると、ほかの全てのオブジェクト(メッシュ・ビルボード・スプライト)より前面に表示されます。半透明体でもソートは行われません。 topMost = trueなオブジェクトが複数存在する場合は、後でPushされた物の方が前面に表示されます。

 specularでスペキュラ色を指定します。この色はテクスチャ表示時に足されて表示されます。具体的にはテクセルの色を t とすると、描画色は 「color * t + specular」で決定さます。

 addrU, addrV にて、テクスチャのアドレッシングモードを変更できます。デフォルトではD3DTADDRESS_CLAMP(テクスチャ座標0以下は0とみなし、テクスチャ座標1.0以上は1.0とみなす)

 

PushSprite

procedure PushSprite(pos:TVector2D; points:Array of TSXVertexSP;
      tex:TDGTexture; blendMode:TSXBlendMode = sxbColorKey;
      filter:Boolean = True; topMost:Boolean = False; rhw:Single = 0.0;
	addrU:D3DTEXTUREADDRESS = D3DTADDRESS_CLAMP;
	addrV:D3DTEXTUREADDRESS = D3DTADDRESS_CLAMP);
);

 スプライトを描画する準備を行います。次のRenderメソッド実行時に、バックバッファに反映されます。

 スクリーン座標上のposの位置を基準にして、pointsで示される四角形にtexで示されるテクスチャ貼ってを表示します。texにNilを指定すると、テクスチャ無しになります。points配列は必ず4つの要素でなければならず、points[0]が左上、points[1]が右上、points[2]が左下、points[3]が右下の点をそれぞれ示します。

 blendModeでブレンドモードの指定が可能です

 filterをTrueにすると、バイリニアフィルタリングを適用して、拡大処理を滑らかにします。Falseの場合、ポイントフィルタリングを適用し、ギザギザした拡大になります。通常は前者でかまいませんが、文字を入れたテクスチャの描画などには後者が良いでしょう。

 topMostをTrueにすると、ほかの全てのオブジェクト(メッシュ・ビルボード・スプライト)より前面に表示されます。半透明体でもソートは行われません。 topMost = trueなオブジェクトが複数存在する場合は、後でPushされた物の方が前面に表示されます。

 rhwには、デプスバッファに書かれる値を直接指定します。3Dで描かれた物体との整合性を取る際に利用しますが、ビルボードがあるので、あまり利用価値はないかもしれません。

 addrU, addrV にて、テクスチャのアドレッシングモードを変更できます。デフォルトではD3DTADDRESS_CLAMP(テクスチャ座標0以下は0とみなし、テクスチャ座標1.0以上は1.0とみなす)

 注意 : pointsには必ず頂点を4つ指定してください。

 

PushSpriteLite

procedure TSXScene.PushSpriteLite(pos:TVector2D; color:D3DCOLOR;
  tex:TDGTexture; blendMode:TSXBlendMode = sxbColorKey;
  filter:Boolean = True; topMost:Boolean = False; rhw:Single = 0.0;
  specular:D3DCOLOR = $00000000;
  addrU:D3DTEXTUREADDRESS = D3DTADDRESS_CLAMP;
  addrV:D3DTEXTUREADDRESS = D3DTADDRESS_CLAMP);
);

 スプライトを描画する準備を行います。次のRenderメソッド実行時に、バックバッファに反映されます。

 スクリーン座標上のposの位置を最も左上の点として、texで示されるテクスチャを表示します。texにNilを指定すると、テクスチャ無し(ただの四角形)になります。

 blendModeでブレンドモードの指定が可能です

 filterをTrueにすると、バイリニアフィルタリングを適用して、拡大処理を滑らかにします。Falseの場合、ポイントフィルタリングを適用し、ギザギザした拡大になります。通常はTrueでかまいませんが、文字を入れたテクスチャの描画などにはFalseが良いでしょう。このメソッドでは拡大も縮小もしないので、理論上はTrueにしてもFalseにしても同じ表示になるはずですが、ドライバのクセも考えると明示的に指定したほうが無難な判断と言えます。

 topMostをTrueにすると、ほかの全てのオブジェクト(メッシュ・ビルボード・スプライト)より前面に表示されます。半透明体でもソートは行われません。 topMost = Trueなオブジェクトが複数存在する場合は、後でPushされた物の方が前面に表示されます。

 rhwには、デプスバッファに書かれる値を直接指定します。3Dで描かれた物体との整合性を取る際に利用しますが、ビルボードがあるので、あまり利用価値はないかもしれません。

 specularでスペキュラ色を指定します。この色はテクスチャ表示時に足されて表示されます。具体的にはテクセルの色を t とすると、描画色は 「color * t + specular」で決定さます。

 addrU, addrV にて、テクスチャのアドレッシングモードを変更できます。デフォルトではD3DTADDRESS_CLAMP(テクスチャ座標0以下は0とみなし、テクスチャ座標1.0以上は1.0とみなす)

 

Render

procedure Render(rootFrame:TSXFrame; flushBBSP:Boolean = True); 

 rootFrameを最上位のフレーム(ワールド座標を提供するフレーム)として、レンダリングを行います。

 flushBBSPをTrueに設定すると、レンダレングが終わった後にビルボード・スプライトをすべてキューから削除します。

 

Clear

procedure Clear(dwFlags:DWord; color:DWORD; z:Single; stencil:DWord);

 ビューポートをクリアします。

 dwFlagsには、何をクリアするかを指定します。以下の値の和で指定してください。

 

D3DCLEAR_TARGET レンダリング先のサーフェスをクリア
D3DCLEAR_ZBUFFER  Zバッファをクリア
D3DCLEAR_STENCILBUFFER  ステンシルバッファをクリア

 colorで、レンダリング先のサーフェスをクリアする際の色を指定します

 z で、Zバッファをクリアする時の値を指定します

 stencilで、ステンシルバッファをクリアする時の値を指定します

 

SphereVisibility

//refフレーム内にある、球は見えるか、但し、距離がdepth以上なら見えないものとする
function SphereVisibility(ref:TSXFrame; sphere:TSphere3D; depth:Single):Boolean; overload;
    //↑と同じ、ただし、ref→ワールド座標までのマトリクスが求まっているとする
function SphereVisibility(worldM:D3DMATRIX; sphere:TSphere3D; depth:Single):Boolean; overload;

 refで示されるフレーム、または、ワールド座標までの変換座標がworldMに一致するフレームの中にある、球体sphereは、視界内に入っているか、テストします。Trueならば、球体は視界内に入っています。

 但し、視界は遠方クリッピング面までではなく、距離depthまで続いているとします。例えば霧のかかったシーンを描画するときに、近くまで可視判定が出来ればよいオブジェクトの可視判定を行うときなどに都合が良いでしょう。

FlushBBSP

procedure FlushBBSP;

 ビルボード・スプライトのためのキューに登録されているビルボード・スプライトをすべて消去します。