![](http://oshiete.xgoo.jp/images/v2/pc/qa/question_title.png?5a7ff87)
DirectX9で曲面の描画を考えています。
x=0.0~10.0、y=0.0~10.0、z=exp(-x^2-y^2)といった座標を与えて、
波を打つような曲面を作成したいのですが
(QNo.2528542のような滑らかな曲面でなくてもよいです)
自分でメッシュを作成することで実現可能なのでしょうか?
メッシュを作成するには頂点(バッファ)を指定するの思うのですが、
その頂点は射影行列を施した後の(x座標、y座標、Z値)になり、
上のような3次元空間上の座標から直接メッシュが作り出せないものかと考えています。
ティーポットのようなメッシュをXファイルを使わずに作り出すにはどうしたらよろしいでしょうか?
(↑曲面の描画 イコール メッシュの作成と考えての質問です、そもそもこの思考が間違っていますか?)
だらだらと書き綴りましたがよろしくお願いします。
No.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(・・・)
> といった要領で独立した曲面を描画することになるのでしょうか?
そうですね。
関数化して使うといいと思います。
No.1
- 回答日時:
メッシュ作成には頂点バッファとインデックスバッファが必要だと思いますよ。
(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(・・・)
といった要領で独立した曲面を描画することになるのでしょうか?
お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!
似たような質問が見つかりました
- Excel(エクセル) Excel VBAについてです。 少しだけ知識はあるのですが、 うまくいかなかったので 質問させてい 3 2022/09/13 18:40
- 数学 球面と接する直線の軌跡が表す領域 4 2023/07/30 12:37
- その他(音楽・ダンス・舞台芸能) 手描き動画の楽曲使用について 2 2023/02/11 00:59
- 介護福祉士・ケアマネージャー・社会福祉士 介護関係者の方に真面目な相談です!! 大変悩んでます…。。 介護専門学生ですが訪問介護に3日実習いき 1 2022/05/23 16:56
- 美術・アート ペンタブとオフィス系ソフト 1 2022/10/08 19:27
- 数学 数学 標高zがz=x^2-y^2で与えられている地形を、点Pが水準面上で曲線(x,y)=(t,t^2 3 2023/08/03 21:52
- その他(プログラミング・Web制作) このプログラミングをどう組みますか? Googlecolabでやってるんですが、出来る方お願いします 1 2022/07/13 10:52
- 数学 極座標A(2,π/6)となる点を通り、OAに垂直な直線lの曲方程式を求めよ という問題を直交座標を利 1 2022/08/04 17:31
- マンガ・コミック AIの発展で、これからの漫画は面白くなると思いますか? 6 2023/05/09 13:42
- YouTube YouTubeで弾いてみた動画を載せる際の著作権について 1 2022/07/14 16:41
関連するカテゴリからQ&Aを探す
デイリーランキングこのカテゴリの人気デイリーQ&Aランキング
-
WM_SIZEとWM_SIZINGの違い (Win...
-
UpdateData( FALSE); による文...
-
Windowのちらつき防止
-
VB.netでのライン描画方法がわ...
-
word
-
Labelの文字をスクロールする際...
-
GDI+で高速な描画
-
VB6,リストボックスの特定行の...
-
CDC(LineTo)で描画した線を透過...
-
ティアリングについて
-
Spreadで表全体を選択した場合...
-
VB.NETでPictureBoxへの描画に...
-
windows7 VS2013 MFCの描画処理...
-
Form1 Load で実行されない。
-
CreateFontで回転させて印刷出...
-
MFCのタイマーのつかい方を教え...
-
テキストボックス 自動スクロ...
-
MFCでOnPaintのタイミング
-
TextBoxに文字を書いても表示さ...
-
VC++2010 描画処理について
マンスリーランキングこのカテゴリの人気マンスリーQ&Aランキング
-
PCで「使用可能な場合はグラフ...
-
[VB.net] DataGridViewの列ヘッ...
-
UpdateData( FALSE); による文...
-
NVIDIAのシェーダーキャッシュ
-
VB6,リストボックスの特定行の...
-
TextBoxに文字を書いても表示さ...
-
word
-
MFCでOnPaintのタイミング
-
エクセルでガンチャートを作成...
-
MFCのタイマーのつかい方を教え...
-
InvalidateRectの使い方について
-
VC++プログラムをつかったBMP画...
-
CScrollViewの使用方法について
-
VB.netでのライン描画方法がわ...
-
CStaticコントロールの静的イメ...
-
Labelの文字をスクロールする際...
-
Form1 Load で実行されない。
-
VBAにGDI+を参照させる方法
-
C++にて、塗りつぶされた円を描...
-
GetGlyphOutline() ご利用経験...
おすすめ情報