私は XNA の 3D にかなり慣れていませんが、残念ながら解決策が見つからない問題に遭遇しました。(問題が何であるかさえ知りません)。
簡単に言うと、次を使用してゲームでクワッドを描画しています。
effect.World = Matrix.Identity *
Matrix.CreateRotationX(Rotation.X) *
Matrix.CreateRotationY(Rotation.Y) *
Matrix.CreateRotationZ(Rotation.Z) *
Matrix.CreateTranslation(Position);
// Apply camera-matrixes
effect.View = viewMatrix;
effect.Projection = projectionMatrix;
graphics.VertexDeclaration = vertDec;
// Begin effect drawing
effect.Begin();
foreach (EffectPass pass in
effect.CurrentTechnique.Passes)
{
pass.Begin();
graphics.DrawUserIndexedPrimitives
<VertexPositionNormalTexture>(
PrimitiveType.TriangleList,
quad.Vertices, 0, 4,
quad.Indexes, 0, 2);
pass.End();
}
effect.End();
私の効果には、次のプロパティもあります。
this.effect.TextureEnabled = true;
this.effect.Texture = texture;
そして、それは機能します。私のクワッドはきれいに描かれていて、私は幸せです. ただし、わずかな問題が 1 つあります。あるクワッドが別のクワッドまたは通常のモデルの後ろにある場合、どちらが上に描画されるかを決定する方法は、それらを描画する順序です。
Quad B の前に Quad A を描画すると、Z 軸で 40 単位小さくても、B は Quad A の上に表示されます。私が言わなければならない非常に混乱しているように見えます!;)
現在、通常のメッシュでこのような問題は発生していません。これは、プリミティブが関与している場合に発生します。まったく同じ問題が通常の線の描画にも当てはまります。
graphics.DrawUserIndexedPrimitives<VertexPositionColor>(
PrimitiveType.LineStrip,
pointList,
0, // vertex buffer offset to add to each element of the index buffer
6, // number of vertices in pointList
new short[] { 0, 1 }, // the index buffer
0, // first index element to read
1 // number of primitives to draw
だから私が本当に求めているのは:
A) これは正常ですか?いつ何を描画するかを決定する特別なエンジンを構築する必要がありますか? 私のプロジェクトでは、適切なタイミングで描画することでこれを簡単に回避できますが、できなかったゲームを想像することはできます。たとえば、fps はそのビルボードをいたるところに描画できませんでした! ;)
B) これが正常でない場合、何が原因であり、エラーをデバッグするための解決策/良い方法は何か.
これを整理するための助けをいただければ幸いです!:)