- ベストアンサー
DirectXで曲面の描画
- DirectX9で滑らかな曲面の描画を考えています。
- 具体的には、座標を与えて波を打つような曲面を作成したいです。
- 自分でメッシュを作成することで実現可能かどうか、またXファイルを使わずにメッシュを作成する方法について知りたいです。
- みんなの回答 (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(・・・) > といった要領で独立した曲面を描画することになるのでしょうか? そうですね。 関数化して使うといいと思います。
その他の回答 (1)
- itemi_qche
- ベストアンサー率71% (5/7)
メッシュ作成には頂点バッファとインデックスバッファが必要だと思いますよ。 (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(・・・) といった要領で独立した曲面を描画することになるのでしょうか?
お礼
お礼が遅れましたが、ありがとうございました。