トップページ > 記事閲覧
頂点バッファについて
名前:たこ 日時: 2016/10/30 18:26

地形のポリゴンをを生成し生成された数十万個のポリゴンを 一定数(一万個程度)ごとに頂点バッファを作って描画しています 基本的にうまく動いていて満足をしていたのですが 地形の一部 およそ2~3ポリゴンを書き換える必要が出たときに その2~3ポリゴンのために 現状一つの頂点バッファをまるまる書き換えています これはとても無駄なことだなと思いました そこで頂点バッファの火器の方法で書き換えることができないかを試したのですが画面に何も描画されなくなってしまいました 改善方法などがありましたら ご教授いただけると ありがたいです DX.SetVertexBufferData(ポリゴン番号*3, 頂点配列のポインタ, ポリゴン番号*3+3, VertexHandle);                
メンテ

Page: 1 |

Re: 頂点バッファについて ( No.1 )
名前:管理人 日時:2016/10/31 01:04

例として示された記述ですと SetVertexBufferData の第3引数の値が誤っているかもしれません 第3引数が「書き換えたい頂点の終端番号」となってしまってはいないでしょうか? SetVertexBufferData の第3引数は「書き換えたい頂点の数」なので、 例えば2ポリゴンだけ変更したい場合は 6 となります よろしければご確認ください m(_ _)m
メンテ
Re: 頂点バッファについて ( No.2 )
名前:たこ 日時:2016/10/31 08:27

プログラムを下記のように書き換えましたが ポリゴン描画がやっぱりおかしいです プログラム Polygons ps = new Polygons(); Polygon p0 = new Polygon(new Vector3(new Vector(0, 0, 0), new Vector(0, 0, 2), new Vector(2, 0, 0)), new UV3(new UV(0, 0), new UV(0, 0), new UV(0, 0))); Polygon p1 = new Polygon(new Vector3(new Vector(2, 0, 2), new Vector(2, 0, 4), new Vector(4, 0, 2)), new UV3(new UV(0, 0), new UV(0, 0), new UV(0, 0))); Polygon p2 = new Polygon(new Vector3(new Vector(10, 0, 10), new Vector(2, 0, 4), new Vector(4, 0, 2)), new UV3(new UV(0, 0), new UV(0, 0), new UV(0, 0))); ps.Add(p0, 0); ps.Add(p1, 1); ps.Add(p2, 0); ps.Draw(hdl); DX.ScreenFlip(); p0が0 p1が1 p2が0で最後にはp1とp2が表示されるはず 実際はp0とp2が表示される polygonsの中身 class Polygons { DX.VERTEX3D[] VertexList = new DX.VERTEX3D[40]; // DX.VERTEX3D[] VertexArrey; int VertexHandle; public Polygons() { VertexHandle = DX.CreateVertexBuffer(120, DX.DX_VERTEX_TYPE_NORMAL_3D); } int c = 0; public unsafe void Add(Polygon p,int n) { VertexList[3*n]=p.Vertex[0]; VertexList[3*n+1]=p.Vertex[1]; VertexList[3*n+2]=p.Vertex[2]; IntPtr VertexPointer; // VertexArrey = VertexList.ToArray(); fixed (DX.VERTEX3D* v = VertexList) { VertexPointer = (IntPtr)v; } DX.SetVertexBufferData(n*3, VertexPointer, 3, VertexHandle); } public unsafe void Draw(int hdl) { DX.DrawPolygon3D_UseVertexBuffer(VertexHandle, hdl, 1); } } とても汚いコードで申し訳ないですが 何卒改善方法をご教授いただけるとありがたいです
メンテ
Re: 頂点バッファについて ( No.3 )
名前:管理人 日時:2016/11/02 17:38

SetVertexBufferData の第二引数に渡すのは頂点バッファに転送する頂点データの 先頭アドレスとなりますので、 こちらの部分を fixed (DX.VERTEX3D* v = VertexList) { VertexPointer = (IntPtr)v; } このように変更していただければ直ると思います fixed (DX.VERTEX3D* v = &VertexList[3*n] ) { VertexPointer = (IntPtr)v; }
メンテ
Re: 頂点バッファについて ( No.4 )
名前:たこ 日時:2016/11/02 22:36

教えていただいたとうおりに修正したところうまく動きました お忙しい中お教えいただきありがとうございます。
メンテ

Page: 1 |

題名
名前
コメント
パスワード (記事メンテ時に使用)

   クッキー保存