DelphiXE3 [3D-FMX] メッシュ(Mesh) 2014/03/21 |
前回は [3D Shapes]内の「立方体」(Cube)について見てみましたので今回は同じく[3D Shapes]内の「メッシュ」(Mesh)について見てみます。
[3D Shapes]内
FMX | |
ヘルプより
カスタマイズ可能な 3D 図形を表します。
TMesh クラスでは、設計時に IDE 内で[オブジェクト インスペクタ]を使って新しい 3D 図形を設計できるように、上位クラス TCustomMesh の一連のプロパティを公開しています。
Data プロパティを使用すると、点、各点の法線およびテクスチャ、生成される三角形の描画順序を指定できます。設計された図形は、MaterialSource プロパティで指定された材質で塗りつぶされます。材質が指定されていない場合、図形は赤色で塗りつぶされます。 |
|
Data
バインディングのために、子の 1 つに関連付けられているデータを示します。 |
|
というわけでメッシュ=三角面の集合体です。
Dataプロパティで三角面の定義を行います。
Data.Normals | 頂点座標の法線ベクトルの一覧 |
Data.Points | 頂点座標の一覧 |
Data.TriangleIndices | 三角面の構成一覧 |
Data.TexCoordinates | 頂点におけるテクスチャの座標の一覧 |
ヘルプでは、オブジェクトインスペクタを使って、と書かれてますが、イベントハンドラ内で プログラムコードで記述するほうが簡単で編集しやすいと思います。実行しないと確認出来ませんが、オブジェクトインスペクタで 入力した数値が意図せず消えてしまうより遥かに良いです。
TwoSide プロパティがデフォルトの False の場合、三角面が裏向きだと画面表示されませんので、True にしておいた方が分かりやすいかもしれません。
取り敢えず、Form1 表示時のイベント OnShowイベントハンドラにプログラムコードを入力します。メッシュ Mesh1 を配置します。
procedure TForm1.Form3DShow(Sender: TObject);
begin
Mesh1.Data.Normals := '0 0 1 , 0 0 1 , 0 0 1';
Mesh1.Data.Points := '5 5 0 , -5 5 0 , 0 -5 0';
Mesh1.Data.TriangleIndices := '0 1 2';
end; |
保存・コンパイル・実行を行うと、下図のようになります。
右下点(5,5,0)→左下点(-5,5,0)→上中点(0,-5,0) という右回り(時計回り)で三角面を1つ描かせています。つまり左手式(親指が表面方向)ですね。TriangleIndices は頂点番号 0番目→1番目→2番目で三角面を構成する、という意味です。
次に、テクスチャを割り当ててみます。
TextureMaterialSource を配置し、メッシュ Mesh1 の MaterialSource プロパティに TextureMaterialSource1 を指定します。
TextureMaterialSource1 で Windows7標準サンプルピクチャの「アジサイ.jpg」をテクスチャとして指定し、コードを下記のようにします。
procedure TForm1.Form3DShow(Sender: TObject);
begin
Mesh1.Data.Normals := '0 0 1 , 0 0 1 , 0 0 1';
Mesh1.Data.Points := '5 5 0 , -5 5 0 , 0 -5 0';
Mesh1.Data.TriangleIndices := '0 1 2';
Mesh1.Data.TexCoordinates := '1 1 , 0 1 , 0.5 0';
end; |
保存・コンパイル・実行を行うと、下図のようになります。
これら数値を指定していけば、指定した分の三角面が表示されますので、複雑な形状を作図出来る、かもしれません。
|