将相机对准矩形

时间:2012-08-31 10:33:14

标签: 3d xna camera projection-matrix

我们正在尝试对齐我们的相机,以便尽可能地看到一个矩形(因为我们处于3D状态,所以是平行六面体的一个面)。此处考虑的视口的纵横比与要对齐的矩形不匹配。

我们做什么:

在我们的场景中是这个矩形。相机位于它前面。以下是相机的配置:

projection = Matrix.CreatePerspectiveFieldOfView(
    Fov, AspectRatio, NearPlane, FarPlane
);

view = Matrix.CreateLookAt(Position, Target, this.Up);

float Fov = PI/4;

float AspectRatio = device.Viewport.AspectRatio;

Vector3 Target设置为矩形的中心。

Vector3 Position是我们正在寻找的价值。

然后初始化相机: 燕麦宽度=(浮动)GraphicsDevice.Viewport.Width;     float height =(float)GraphicsDevice.Viewport.Height;

float dist = (width / 2) + (height / 2);

float alpha = 0;
float beta = 0;
float gamma = 0;

alpha = (float)Math.Sqrt(Math.Pow(width / 2, 2) + Math.Pow(height / 2, 2));
beta = height / ((float)Math.Cos(MathHelper.ToRadians(70.3f)) * 2);
gamma = (float)Math.Sqrt(beta * beta - alpha * alpha);


position = new Vector3(width / 2, -height / 2, gamma);
target = new Vector3(width / 2, -height / 2, dist / 2);

camera = new Camera(GraphicsDevice.Viewport)
{
    Position = position,
    Target = target,
    Near = 1f,
    Far = 10000f
};

VS solution

还有一个精度:要创建视图,我们使用Matrix.CreateLookAt和投影Matrix.CreatePerspectiveFieldOfView。我们不确定这些是不是完美的选择,但听起来就像它。

我们得到了什么:

经过一些基本的三角函数后,我们得到了一个摄像头位置,当高度>宽度。如: enter image description here enter image description here

但是当宽度>时它不会高度: enter image description here

你呢......

...知道我们做错了什么吗?你有其他或更好的方法来实现这个目标吗?

1 个答案:

答案 0 :(得分:0)

找到金字塔的高度不起作用。只需使用Tan,因为Fov = PI/4代码应如下所示:

float tanGamma = (height / 2) * ((float)Math.Tan(MathHelper.ToRadians(67.5f)));