我想知道下面使用的方法是否是在绘制屏幕之前确定模型位置的正确方法。 因为我想创建一个复制我的模型的地板。我发现自己面临着“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();
}
答案 0 :(得分:0)
据我所知,您的方法对于定位模型是正确的。 Z战斗问题是什么,当两个3D面在相同的平面中相互重叠时发生。正如你所说,你“复制你的模型”听起来这是问题,而不是模型定位本身。要解决战斗,您可以在绘制模型的第二个副本之前将一些非零值设置为GraphicsDevice.RasterizerState.DepthBias
。来自documentation:
“具有高z偏差值的多边形出现在具有a的多边形前面 值低,无需按顺序排序。例如, 值为1的多边形出现在多边形前面,其值为 0“。