XNA - 如何将对象绘制得更远

时间:2012-04-21 13:53:12

标签: c# 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 个答案:

答案 0 :(得分:1)

几何考虑:将物体移离相机意味着沿着由两点定义的线移动物体:相机的位置和物体的位置。

现在很容易!

1)找到矢量对象,即

Vector3 direction = objectPosition - cameraPosition;

2)将对象与该向量一起移动一定量,即:

2.1)规范化方向

direction.Normalize();

2.2)在该方向上移动对象x的数量

objectPosition += direction * x;

你有它。