我画使用XNA绘图在C#避免差距显卡采用浮点数C#
View = Matrix.CreateLookAt(new Vector3(0f, 100f, 0f), Vector3.Zero, Vector3.Forward);
Projection = Matrix.CreatePerspectiveFieldOfView(MathHelper.ToRadians(20.0f), ((Game1)Game).graphics.GraphicsDevice.Viewport.AspectRatio, 1.0f, 10000.0f);
我的相机永远不会发生变化,只有我的游戏OBJET移动。 我移动它们按以下方式获得平滑的运动
float speed = 0.001f;
pos.Z = pos.Z + (gameTime.ElapsedGameTime.Milliseconds * speed);
,但是,我有马路花砖(原语VertexPositionTexture)其他后呈现给道路的感觉驱动器上。
它的作品,但有时它是我不想要的我的道路瓷砖之间的像素间距。 我认为它与浮点坐标有关。
我该如何解决这个问题?
在此先感谢! 我希望我的解释清楚我的问题。
编辑1:如果有人想投下这篇文章,请评论为什么。 没有反馈很难开发。
编辑2:有关基元的信息。
资源上ROD1 400×50
using System;
using System.Collections.Generic;
using Microsoft.Xna.Framework;
using Microsoft.Xna.Framework.Audio;
using Microsoft.Xna.Framework.Content;
using Microsoft.Xna.Framework.GamerServices;
using Microsoft.Xna.Framework.Graphics;
using Microsoft.Xna.Framework.Input;
using Microsoft.Xna.Framework.Media;
namespace WindowsGame1
{
class Rod
{
public static Microsoft.Xna.Framework.Graphics.VertexBuffer buffer;
public static Texture2D[] tex;
public static BasicEffect effect;
public Vector3 pos;
public int typ;
public const float Width = 24f;
public const float Height = 5;
public Rod(Vector3 pos,Random r)
{
this.pos = pos;
typ = r.Next(tex.Length);
}
static public void Initialize(GraphicsDevice g)
{
buffer = new VertexBuffer(g, VertexPositionTexture.VertexDeclaration, 6, BufferUsage.WriteOnly);
VertexPositionTexture[] vertices = new VertexPositionTexture[6];
vertices[0].Position = new Vector3(-Width, 0f, -Height);
vertices[0].TextureCoordinate.X = 0;
vertices[0].TextureCoordinate.Y = 0;
vertices[1].Position = new Vector3(Width, 0f, Height);
vertices[1].TextureCoordinate.X = 1;
vertices[1].TextureCoordinate.Y = 1;
vertices[2].Position = new Vector3(-Width, 0f, Height);
vertices[2].TextureCoordinate.X = 0;
vertices[2].TextureCoordinate.Y = 1;
vertices[3].Position = new Vector3(Width, 0f, Height);
vertices[3].TextureCoordinate.X = 1;
vertices[3].TextureCoordinate.Y = 1;
vertices[4].Position = new Vector3(-Width, 0f, -Height);
vertices[4].TextureCoordinate.X = 0;
vertices[4].TextureCoordinate.Y = 0;
vertices[5].Position = new Vector3(Width, 0f, -Height);
vertices[5].TextureCoordinate.X = 1;
vertices[5].TextureCoordinate.Y = 0;
buffer.SetData<VertexPositionTexture>(vertices);
effect = new BasicEffect(g);
effect.TextureEnabled = true;
}
public void SetTyp(Random r)
{
typ = r.Next(tex.Length);
}
public void Update(GameTime gameTime, Double speed)
{
// pos = new Vector3(pos.X, pos.Y, pos.Z + (gameTime.ElapsedGameTime.Milliseconds * speed));
pos.Z = pos.Z + (float)(gameTime.ElapsedGameTime.Milliseconds * speed);
}
public void Draw(Matrix View, Matrix Projection, GraphicsDevice g)
{
effect.World = Matrix.CreateScale(1.01f) * Matrix.CreateTranslation(pos);
effect.View = View;
effect.Projection = Projection;
effect.Texture = tex[typ];
foreach (EffectPass pass in effect.CurrentTechnique.Passes)
{
g.SetVertexBuffer(buffer);
pass.Apply();
g.DrawPrimitives(PrimitiveType.TriangleList, 0, 2);
}
}
}
}
尝试使用'double'或'decimal'代替 – 2013-02-12 14:49:51
感谢Daniel Hilgarth! ,但不幸的是它没有效果。 – 2013-02-12 15:05:39
它缺少一些重要的信息,如绘图代码。但我的建议是围绕瓷砖的位置和大小。 – dowhilefor 2013-02-12 15:17:17