2012-04-21 46 views
1

以下是我绘制某些由此处未显示的顶点定义的形状的方法。XNA - 如何绘制更远的物体

 Vector3 position = (5,5,1); 
     Matrix world = Matrix.CreateTranslation(position); 
     BasicEffect basicEffect = new BasicEffect(graphicsDevice); 


     Matrix view = Matrix.CreateLookAt(new Vector3(0, 0, -20), new Vector3(0, 0, 100), Vector3.Up); 
     Matrix projection = Matrix.CreatePerspectiveFieldOfView(MathHelper.PiOver4, 
                graphics.Viewport.AspectRatio, 
                1.0f, 
                100); 


     // Set BasicEffect parameters. 
     basicEffect.World = world; 
     basicEffect.View = view; 
     basicEffect.Projection = projection; 

     //....draw some shape with basicEffect 

我想画的形状相同仅得更远,而其中心停留在屏幕上的相同(X,Y)像素,但整体要小,因为它是更遥远。

我已经试过缩放位置矢量但与它没有成功:

   position .Z *= 2; 
       position .X *= 2; 
       position .Y *= 2; 

什么是做到这一点的正确方法?

回答

1

从几何角度考虑它:将物体从相机移开意味着将其沿着由两点定义的线移动:相机的位置和物体的位置。

现在很简单!

1)求矢量对象到摄像头,即

Vector3 direction = objectPosition - cameraPosition; 

2)由一定量的移动沿着该矢量中的对象,即:

2.1)归一化该方向

direction.Normalize(); 

2.2)在该方向上由一个量x移动对象

objectPosition += direction * x; 

在那里,你有它。