2

以下で使用する方法が、画面に描画する前にモデルの位置を決定する正しい方法であるかどうかを知りたいと思いました。モデルを複製してフロアを作成したい場合。「Zファイティング」の問題に直面していることに気づきました^ ^。

どうもありがとうございます

描画前のモデルの st 位置へのコード サンプル:

model_Position.X = (float) 1.0;
model_Position.Z = (float) 3.0;
model_Position.Y = (float) 5.0;

// Draw the model. A model can have multiple meshes, so loop.
foreach (ModelMesh mesh in model_ground_land1.Meshes)
{
    // This is where the mesh orientation is set, as well 
    // as our camera and projection.
    foreach (BasicEffect effect in mesh.Effects)
    {
        effect.EnableDefaultLighting();
        effect.World = transforms[mesh.ParentBone.Index]  *
    Matrix.CreateRotationY(model_Rotation) * Matrix.CreateTranslation(model_Position);
        effect.View = View;
        effect.Projection = Projection;
    }
    // Draw the mesh, using the effects set above.
    mesh.Draw();
}
4

1 に答える 1

0

私が見る限り、あなたの方法はモデルの配置に適しています。Zファイティングの問題は、2つの3D面が同じ平面に重なり合って描画されたときに発生します。「モデルを複製する」と言うように、これが問題であり、モデルの配置自体ではないように思われます。GraphicsDevice.RasterizerState.DepthBias戦闘を解決するには、モデルの2番目のコピーを描画する前に、ゼロ以外の値をに設定します。ドキュメントから:

「zバイアス値が高いポリゴンは、値が低いポリゴンの前に表示され、描画順序で並べ替える必要はありません。たとえば、値が1のポリゴンは、値が0のポリゴンの前に表示されます。」

于 2013-03-16T09:34:26.050 に答える