gpt4 book ai didi

c# - 如何使用 BasicEffect 在 XNA 中绘制模型

转载 作者:太空狗 更新时间:2023-10-30 01:12:11 24 4
gpt4 key购买 nike

我想在 XNA 中绘制一个模型。我已经提前在 Blender 中制作了它,并将其导出为 fbx 文件格式,以便内容管道可以使用它。我应该向 WindowsGame() 的 Draw() 方法添加什么代码?我已经尝试了以下但我得到的只是一个灰色屏幕(灰色不是蓝色,这是清晰的颜色,请注意)模型是使用 content.Load 导入的,这不会引发任何错误,我称之为“碗” .

谁能告诉我为什么这在这里行不通?

protected override void Draw(GameTime gameTime)
{
GraphicsDevice.Clear(Color.CornflowerBlue);
BasicEffect b = new BasicEffect (graphics.GraphicsDevice, new EffectPool ( ));
foreach (ModelMesh m in Bowl.Meshes)
{
b.View = Cam.mView;
b.Projection = Cam.mProj;
b.World = mWorld;
b.EnableDefaultLighting ( );
b.Begin ( );
m.Draw ( );
b.End ( );
}

base.Draw(gameTime);
}

我刚刚注意到这在效率方面等同于谋杀,但我已经尝试了很多东西,我只需要它在我优化它之前工作。

最佳答案

当第一次尝试渲染某些东西时,一个真正常见的问题是相机没有看到你认为它正在看的东西。另一个可能的问题是该模型未达到您预期的规模。因此,例如,如果相机在 z 方向后退 5 个单位,但模型宽度为 10 个单位,则您的相机实际上位于模型内部。

就渲染问题而言,Microsoft 在这方面有很好的文档:http://msdn.microsoft.com/en-us/library/bb203933.aspx

您可以将此代码段用作帮助器:

private void DrawModel(Model m)
{
Matrix[] transforms = new Matrix[m.Bones.Count];
float aspectRatio = graphics.GraphicsDevice.Viewport.Width / graphics.GraphicsDevice.Viewport.Height;
m.CopyAbsoluteBoneTransformsTo(transforms);
Matrix projection = Matrix.CreatePerspectiveFieldOfView(MathHelper.ToRadians(45.0f),
aspectRatio, 1.0f, 10000.0f);
Matrix view = Matrix.CreateLookAt(new Vector3(0.0f, 50.0f, Zoom), Vector3.Zero, Vector3.Up);

foreach (ModelMesh mesh in m.Meshes)
{
foreach (BasicEffect effect in mesh.Effects)
{
effect.EnableDefaultLighting();

effect.View = view;
effect.Projection = projection;
effect.World = gameWorldRotation * transforms[mesh.ParentBone.Index] * Matrix.CreateTranslation(Position);
}
mesh.Draw();
}
}

关于c# - 如何使用 BasicEffect 在 XNA 中绘制模型,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/970779/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com