背景:私は高さフィールドをレンダリングするためにGPUレイキャスティングを使用するタイルベースの地形レンダラーを作成しています。私のグラフィックスコーディングはC++/OpenGLでしたが、C#/ XNA4(すなわちDirectX9)を少しの学習経験として試してみることにしました。XNA4 DrawUserIndexedPrimitivesで使用されている頂点のセットが正しくありません。
問題:DrawUserIndexedPrimitivesへの呼び出しは、以前の呼び出しで指定された頂点配列を使用しているように見えます。
詳細: タイルレンダラは、タイルの境界ボックスの背面をラスタライズして動作します。ピクセルシェーダはレイキャスティングを実行します。
private void RenderTile(GraphicsDevice device)
{
device.DrawUserIndexedPrimitives(
PrimitiveType.TriangleList,
this.BoundingBoxVertex, 0, 8,
this.BoundingBoxIndex, 0, 12);
}
とバウンディングボックスのワイヤーフレームをレンダリングする:ボックスを描画するための呼び出しはこれです
この生成private void RenderBoundingBox(GraphicsDevice d)
{
d.DrawUserIndexedPrimitives(
PrimitiveType.LineList,
this.BoundingBoxRenderVertex, 0, 8, // vertex format is different here,
// but the positions are the same.
this.BoundingBoxRenderIndex, 0, 12);
}
:私たちは、それ自体で別のタイルを使用している場合
を(全地形は2×2タイルです):
012私たちは一緒に両方をレンダリングする場合ただし、バウンディングボックスは、転置されています
私は私が前にレンダリングされたタイルをもたらしたXNAコードでの基本的なミスを犯してきたと仮定していますタイルの頂点ですが、見つけられません。
同じセットのデータ(float[]
)は、高さマップテクスチャと境界ボックスを作成するために使用されるため、境界ボックスの作成ではエラーには見えません。