dポイントプレゼントキャンペーン実施中!

DirectX9で曲面の描画を考えています。
x=0.0~10.0、y=0.0~10.0、z=exp(-x^2-y^2)といった座標を与えて、
波を打つような曲面を作成したいのですが
(QNo.2528542のような滑らかな曲面でなくてもよいです)
自分でメッシュを作成することで実現可能なのでしょうか?
メッシュを作成するには頂点(バッファ)を指定するの思うのですが、
その頂点は射影行列を施した後の(x座標、y座標、Z値)になり、
上のような3次元空間上の座標から直接メッシュが作り出せないものかと考えています。
ティーポットのようなメッシュをXファイルを使わずに作り出すにはどうしたらよろしいでしょうか?
(↑曲面の描画 イコール メッシュの作成と考えての質問です、そもそもこの思考が間違っていますか?)

だらだらと書き綴りましたがよろしくお願いします。

A 回答 (2件)

内容がわかりづらくて申し訳ない。

。。
200行近くあるので,掲載しきれないもので。

> メッシュで描画すると複数のメッシュを
> mesh1.DrawSubset();
> mesh2.DrawSubset();
> のように同時に描画できると思うのですが、
> ご回答いただいた方法ですと
> device.SetStreamSource(0, vb1, 0); //メッシュ1の頂点の設定
> device.Indices = ib1; // メッシュ1インデックスの設定
> device.DrawIndexedPrimitives(・・・)
> device.SetStreamSource(0, vb2, 0);
> device.Indices = ib2;
> device.DrawIndexedPrimitives(・・・)
> といった要領で独立した曲面を描画することになるのでしょうか?

そうですね。
関数化して使うといいと思います。
    • good
    • 0
この回答へのお礼

お礼が遅れましたが、ありがとうございました。

お礼日時:2007/01/29 17:13

メッシュ作成には頂点バッファとインデックスバッファが必要だと思いますよ。


(x, y, z)でプロットしたいだけならC#だと,

VertexBuffer vb = new VertexBuffer(・・・・)
GraphicsStream data = vb.Lock(0, 0, LockFlags.None);
data.Write(new CustomVertex.PositionColored(x, y, z, color);
・・・ 繰り返し
vb.Unlock();

// 0番目のバッファからN番目のバッファまでをつなぐ
short[] indices =
{
0, 1, 2, 3, 4, 5 ・・・
}

のように頂点とインデックスを登録して,

device.VertexFormat = CustomVertex.PositionColored.Format;
device.SetStreamSource(0, vb, 0); //頂点の設定
device.Indices = ib; // インデックスの設定
device.DrawIndexedPrimitives(・・・)

で,できると思いますよ。
曲面を作りたいなら,インデックスバッファは3つ区切りで三角形を書き連ねる。
いろいろ省略しましたがDirectXのサンプルを参考に。。

この回答への補足

検証に時間がかかり、返答とお礼が遅れて申し訳ありません。
まだ実現できているわけではないのですが、
ご回答いただいた要領で3次元の座標から曲面が描画できそうであることがわかり、大変参考になりました。
私は質問でも含めさせていただいたように、曲面はメッシュで実現するものと思っていたのですが、
メッシュで描画すると複数のメッシュを
mesh1.DrawSubset();
mesh2.DrawSubset();
のように同時に描画できると思うのですが、
ご回答いただいた方法ですと
device.SetStreamSource(0, vb1, 0); //メッシュ1の頂点の設定
device.Indices = ib1; // メッシュ1インデックスの設定
device.DrawIndexedPrimitives(・・・)
device.SetStreamSource(0, vb2, 0);
device.Indices = ib2;
device.DrawIndexedPrimitives(・・・)
といった要領で独立した曲面を描画することになるのでしょうか?

補足日時:2007/01/27 18:23
    • good
    • 0

お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!