我有一個包含在控件中的xna窗口窗體,現在我有兩個模型在屏幕的一個區域。事情是我需要同時旋轉兩個模型,我可以旋轉一個對象,這是一個坦克,另一個是在盒子中渲染的天空盒(風景)。地圖旋轉(天空盒)XNA
坦克隨着實時串行端口提供的數據移動,坦克完美移動,但我無法旋轉地圖。
(地面應與坦克一起移動)。
http://i61.tinypic.com/2efqrvc.jpg
我使用此代碼來渲染景觀:
private void SkyBoxRender()
{
RasterizerState originalRasterizerState = GraphicsDevice.RasterizerState;
RasterizerState rasterizerState = new RasterizerState();
rasterizerState.CullMode = CullMode.None;
GraphicsDevice.RasterizerState = rasterizerState;
aspectRatio = GraphicsDevice.Viewport.AspectRatio;
orientacion = Matrix.CreateFromYawPitchRoll(MathHelper.ToRadians(-85.0f), MathHelper.ToRadians(TiempoReal.rollPitch[1]), MathHelper.ToRadians(TiempoReal.rollPitch[0]));
cameraPositionSkyBox = distance * new Vector3((float)Math.Sin(angle), 0, (float)Math.Cos(angle));
foreach (EffectPass pass in skyBoxEffect.CurrentTechnique.Passes)
{
pass.Apply();
foreach (ModelMesh mesh in skyBox.Meshes)
{
foreach (ModelMeshPart part in mesh.MeshParts)
{
part.Effect = skyBoxEffect;
part.Effect.Parameters["World"].SetValue(Matrix.CreateScale(50.0f) * Matrix.CreateTranslation(cameraPositionSkyBox));
part.Effect.Parameters["View"].SetValue(view);
part.Effect.Parameters["Projection"].SetValue(Matrix.CreatePerspectiveFieldOfView(MathHelper.ToRadians(45.0f), aspectRatio, 1.0f, 10000.0f));
part.Effect.Parameters["SkyBoxTexture"].SetValue(skyBoxTexture);
part.Effect.Parameters["CameraPosition"].SetValue(cameraPositionSkyBox);
}
mesh.Draw();
}
}
GraphicsDevice.RasterizerState = originalRasterizerState;
}
我認爲這個問題是在該行part.Effect.Parameters [ 「世界」]的SetValue ..... 我不知道在那裏放置什麼來使地圖旋轉使用所有的軸。
我使用此代碼旋轉罐:
orientacion = Matrix.CreateFromYawPitchRoll(MathHelper.ToRadians(-85.0f),
MathHelper.ToRadians(floatAngle1), MathHelper.ToRadians(floatAngle2));
如果你看第二行,你可以注意到,我使用的角度來旋轉罐(它必須在這樣...),所以有什麼想法或建議?
更新: 解決了,怎麼樣?
在SkyBoxRender方法添加以下:
orientacionCamara = Matrix.CreateFromYawPitchRoll(MathHelper.ToRadians(0.0f), MathHelper.ToRadians(floatAngle1), MathHelper.ToRadians(floatAngle2));
然後我存檔使用此移動攝像機在地圖: part.Effect.Parameters [「查看」]的SetValue(Matrix.CreateLookAt (yourCameraPosition)* orientacionCamara);
現在以相同的角度移動相機,就像模型旋轉模型一樣,而不是此時的相機。
private void BeginRender3D()
{
GraphicsDevice.BlendState = BlendState.Opaque;
GraphicsDevice.DepthStencilState = DepthStencilState.Default;
Matrix[] transforms = new Matrix[modelo.Bones.Count];
modelo.CopyAbsoluteBoneTransformsTo(transforms);
**orientacion** = Matrix.CreateFromYawPitchRoll(MathHelper.ToRadians(-85.0f), MathHelper.ToRadians(floatAngle1), MathHelper.ToRadians(floatAngle2);
foreach (ModelMesh mesh in modelo.Meshes)
{
foreach (BasicEffect effect in mesh.Effects)
{
effect.EnableDefaultLighting();
effect.PreferPerPixelLighting = true;
effect.World = transforms[mesh.ParentBone.Index] * **orientacion**; //* orientacion
effect.View = Matrix.CreateLookAt(camaraPosicion, Vector3.Zero, Vector3.Up);
effect.Projection = Matrix.CreatePerspectiveFieldOfView(MathHelper.ToRadians(45.0f), aspectRatio, 1.0f, 10000.0f);
}
mesh.Draw();
}
fps++;
}
我希望它可以幫助任何人,謝謝你的建議傢伙。
對不起,我沒有看到任何帽,也許我的鍵盤配置可能是你的問題?但我看到所有沒有帽子。 –
ahh好的謝謝你的建議,我在這裏是新的 –
這不是一個答案,而是一個建議。 [XNA](http://en.wikipedia.org/wiki/Microsoft_XNA)不再開發。我建議轉移到當前蓬勃發展的Unity,並且開箱即用,以照顧遊戲的許多方面,例如,天空盒。 –