メッシュには標準で使える基本図形がいくつかあります。これを利用するとサンプルを作るのが楽になります。それと、私的見解なのですが、結構遊べます。
ここの説明は、分かりやすくしようとした結果として、正確でない場合があります。言いたい事はあっているんですが、表現の仕方が・・・です。分かり易い表現があれば、どなたか教えて頂けるとありがたいです。
箱ですね。左手座標系、軸平行の箱が入ったメッシュを作成します。
public static Mesh Box( Device device, //デバイス float width, //x軸方向の幅 float height, //y軸方向の高さ float depth //z軸方向の深さ );
原点はオブジェクトの中心になります。面の数は12個になるらしいです。法線ベクトルはまともな方向を向いています。ちゃんと面の明るさが正しく表示されます。
パルテノン神殿に使えそうです。
作成される円柱は、左手座標系です。
public static Mesh Cylinder( Device device, //デバイス float radius1, //z軸の負の側の面の半径。 //0.0以上の値。(0にすると円錘を作れる) float radius2, //z軸の正の側の面の半径。 //0.0以上の値。(両方0でも図形は作れる) float length, //円柱の長さ。z軸方向。 int slices, //2以上の値。ここの数で『slices柱』が出来る。 int stacks //円柱の長さ方向の分割数。 //変えてもあまり意味がない。1以上。 );
中心は原点で軸はz軸方向です。
円柱を作れる関数なのですが、「slices」を変えることによって三角柱や、四角柱も作れます。2角柱という変わったものも作れるのですが、微妙に厚さがあるように見えました。
面ですね。左手座標系で、n面ポリゴンを作ります。簡単に言うと、『三角面』や『四角面』が作れます。
public static Mesh Polygon( Device device, //デバイス float length, //各辺の長さ int sides //ポリゴンの辺の数。3以上です。 );
オブジェクトの中心は原点です。ポリゴンには表裏があります。表はz軸の正の方向に向いています。それと、周りの長さは「length*sides」で求められそうです。
玉です。左手座標系で球を作成します。軸はz軸です。
public static Mesh Sphere( Device device, //デバイス float radius, //球の半径。0.0以上。 int slices, //地球で言うと経線で分割された //領域の数。2以上。 int stacks //地球で言うと緯線で分割された //領域の数の数。2以上。 );
中心が原点です。球を作る関数ですが、「slices」や「stacks」の数が小さいとおもしろい図形が作れます。
「slices」や「stacks」は経線や緯線の数ではないので注意が必要です。(線の数でないため、1は無効になるのです)
はっきり言って、DirectXのデモ以外にどう利用して良いのか迷ってしまうものです。そもそも基本図形になりませんね。左手座標系です。
public static Mesh Teapot( Device device );
メッシュの中心は原点です。Zバッファを有効にしないと変になります。
むしろブレスレットと言った方が良いかも。左手座標系です。先に1つ注意です。中心はいつもの通り原点(0,0,0)です。z軸を軸ととするドーナツになります。つまり、z軸を中心に回転させたと同じ事。内径というのはドーナッツの中身の部分の半径です。外形というのは原点から、内径の中心までの半径です。
簡単に言うと、外形を大きくすれば、中央の穴が大きくなって、内径を大きくすれば、太くなるのです。
public static Mesh Torus( Device device, //デバイス float innerRadius, //内径。0.0以上。 float outerRadius, //外形。0.0以上。 int sides, //内径部分の分割数。3以上 int rings //外形部分の分割数。3以上。 //ここを変えると、三角トーラスや //四角形トーラスが作れます。 );
これもzバッファを使わないと変になります。内径が外形より大きいと、ミカンやリンゴのようになります。
円関係はそれなりの分割数がないと意味不明な事になります。しかしながら、利用価値がないわけではないです。そして、そのために、このページでは積極的に下限値を示しています。