我很快就会有一个项目,我在尝试加载我在3D Studio Max中制作的模型时遇到了很多问题。我制作的模型就像我在XNA游戏中的地形一样。这是我到目前为止所做的:
方法:
GraphicsDeviceManager graphics;
SpriteBatch spriteBatch;
Model terrainModel;
Vector3 terrainPosition = Vector3.Zero;
Vector3 cameraPosition = new Vector3(0.0f, 60.0f, 160.0f);
Vector3 cameraLookAt = new Vector3(0.0f, 60.0f, 160.0f);
Matrix cameraProjectionMatrix;
Matrix cameraViewMatrix;
LoadContent()
spriteBatch = new SpriteBatch(GraphicsDevice);
cameraViewMatrix = Matrix.CreateLookAt(
cameraPosition,
Vector3.Zero,
Vector3.Up);
cameraProjectionMatrix = Matrix.CreatePerspectiveFieldOfView(
MathHelper.ToRadians(80.0f),
graphics.GraphicsDevice.Viewport.AspectRatio,
1.0f,
1000.0f);
terrainModel = Content.Load<Model>("alphastreet");
Draw(GameTime gameTime)
GraphicsDevice.Clear(Color.CornflowerBlue);
DrawModel(terrainModel, terrainPosition);
// TODO: Add your drawing code here
base.Draw(gameTime);
然后我想画画:
void DrawModel(Model model, Vector3 modelPosition)
{
foreach (ModelMesh mesh in model.Meshes)
{
foreach (BasicEffect effect in mesh.Effects)
{
effect.EnableDefaultLighting();
effect.PreferPerPixelLighting = true;
effect.World = Matrix.CreateTranslation(modelPosition);
effect.Projection = cameraProjectionMatrix;
effect.View = cameraViewMatrix;
}
mesh.Draw();
}
}
其他所有内容都与XNA文件一样。它自己的模型看起来像一条相当简单的街道。但是,在XNA加载模型时,它只是加载窗口中的一个大块。
我不知道我在做什么让这样的模型加载,但它让我把头发拉出来。任何帮助,将不胜感激。
此外,任何人都可以指导我走过/导游或创建第一人称射击相机的课程,因为那是我要去的游戏。我可能不应该选择那个,但是现在改变已经太晚了,所以如果你能在那里帮助你真的会拯救我的皮肤!
谢谢,杰克!
答案 0 :(得分:0)
模型中是否有多个网格,如果是,您是否尝试过分别渲染每个网格? 您是否尝试过使用身份矩阵进行世界和视图以确保这些不是问题? 我假设您没有对xna / directx进行任何其他状态更改,如果是这样,请尝试禁用这些。
对于FPS相机,您只需跟踪浮点变量中的x和y旋转,并根据鼠标在x和y中的移动距离更新每帧。从这些中你可以生成一个摄像机视图矩阵;如下所示:
var mx = Matrix.CreateRotationX(xangle);
var my = Matrix.CreateRotationY(yangle);
var pos = Matrix.CreateTranslation(position);
var view = mx * my * pos; // These might be in the wrong order, not sure off the top of my head
view.Invert();
相机始终处于倒置状态,因为向左移动会向右移动世界,向左转动可以使世界向右移动等等。