gpt4 book ai didi

matrix - 这是一个正确的透视 FOV 矩阵吗?

转载 作者:行者123 更新时间:2023-12-04 22:50:53 28 4
gpt4 key购买 nike

我有一个透视 FOV,但在旋转时,它“看起来”不正确 - 较远的物体比较近的物体移动得更快,在屏幕中间通过它们。

所以:这是正确的吗?使用右手坐标,如果这很重要?

    public static Matrix4x4 PerspectiveFOV(float fov, float aspect, float near, float far)
{
float yScale = 1.0F / (float)Math.Tan(fov / 2);
float xScale = yScale / aspect;
float farmnear = far - near;
return new Matrix4x4(
xScale, 0, 0, 0,
0, yScale, 0, 0,
0, 0, far / (farmnear), 1,
0, 0, -near * (far / (farmnear)), 1
);
}

谢谢。

最佳答案

我看到了一些问题。
首先,tan() 的参数应该从度数转换为弧度。

其次,OpenGL 中透视投影的公式与您的略有不同。正如指定的 here ,它在分母中使用“near-far”而不是“far-near”。分子项也不同。稍微修改您的函数并从 Java 转换为 C,我生成了一个与 gluPerspective() 给出的投影矩阵相同的投影矩阵,如下所示:

静态无效 my_PerspectiveFOV(双视野,双方面,双近,双远,双* mret){
双 D2R = M_PI/180.0;
双yScale = 1.0/tan(D2R * fov/2);
双 xScale = yScale/方面;
double Nearmfar = 近 - 远;
双 m[] = {
xScale, 0, 0, 0,
0, yScale, 0, 0,
0, 0, (远 + 近)/Nearmfar, -1,
0, 0, 2*far*near/nearmfar, 0
};
geom_matrix4_copy(m, mret);
}

关于matrix - 这是一个正确的透视 FOV 矩阵吗?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/6060169/

28 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com