gpt4 book ai didi

java - OpenGL透视投影: How to define left and right

转载 作者:行者123 更新时间:2023-11-30 05:25:56 24 4
gpt4 key购买 nike

如何设置透视矩阵的坐标,例如左、右、上、下正交投影,并添加视场角和纵横比。我只见过透视矩阵在没有左、右、下、上的方法中使用其他参数。这是我的正交矩阵:

public static Matrix4f Orthographic(float left, float right, float bottom, float top, float near, float far) {
Matrix4f result = Identity();

result.elements[0 + 0 * 4] = 2.0f / (right - left);

result.elements[1 + 1 * 4] = 2.0f / (top - bottom);

result.elements[2 + 2 * 4] = 2.0f / (near - far);

result.elements[0 + 3 * 4] = (left + right) / (left - right);
result.elements[1 + 3 * 4] = (bottom + top) / (bottom - top);
result.elements[2 + 3 * 4] = (far + near) / (far - near);

return result;
}

现在我想创建具有相同参数但添加了 fov 的视角一。

最佳答案

在透视投影中,投影矩阵描述了从针孔相机看到的世界上的 3D 点到视口(viewport)的 2D 点的映射。
相机平截头体(截棱锥体)中的眼睛空间坐标被映射到立方体(标准化设备坐标)。

Viewing frustum透视投影的距离可以由 a x 6 距离定义。

以下距离leftrightbottomtop是距中心的距离近平面上平截头体侧面的 View 。 nearfar 指定到平截头体的近平面和远平面的距离。

r = right, l = left, b = bottom, t = top, n = near, f = far

x: 2*n/(r-l) 0 0 0
y: 0 2*n/(t-b) 0 0
z: (r+l)/(r-l) (t+b)/(t-b) -(f+n)/(f-n) -1
t: 0 0 -2*f*n/(f-n) 0

如果投影是对称的,其中视线是视锥体的对称轴,则可以简化矩阵并可以通过视场角(fov_y)来指定,长宽比 (w/h) 以及到近平面和远平面的 2 个距离

a  = w / h
ta = tan( fov_y / 2 );

2 * n / (r-l) = 1 / (ta * a)
2 * n / (t-b) = 1 / ta
(r+l)/(r-l) = 0
(t+b)/(t-b) = 0

所以对称透视投影是:

x:    1/(ta*a)  0      0              0
y: 0 1/ta 0 0
z: 0 0 -(f+n)/(f-n) -1
t: 0 0 -2*f*n/(f-n) 0

关于java - OpenGL透视投影: How to define left and right,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/58615238/

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