Opengl 在图形编程中获取相机空间的宽度和高度

Opengl 在图形编程中获取相机空间的宽度和高度,opengl,graphics,3d,kudan,Opengl,Graphics,3d,Kudan,我有一个AR项目,我需要将屏幕坐标转换为世界坐标。我紧随其后,几乎成功了 唯一的问题是,当我尝试从同质剪辑空间转换到眼睛空间时,我使用了错误的投影矩阵。之所以投影矩阵是错误的,是因为我无法获得相机空间的正确宽度和高度。我使用了一个叫做Kudan的库,当我向前和向后移动相机手机时,我希望相机的宽度和高度会发生变化,因为向前移动时相机空间的大小会变小,反之亦然 作为最后的手段,目前我试图自己找到相机空间大小,我如何实现这一点 这是我的投影矩阵 Matrix4f projectionMatrix =

我有一个AR项目,我需要将屏幕坐标转换为世界坐标。我紧随其后,几乎成功了

唯一的问题是,当我尝试从同质剪辑空间转换到眼睛空间时,我使用了错误的投影矩阵。之所以投影矩阵是错误的,是因为我无法获得相机空间的正确宽度和高度。我使用了一个叫做Kudan的库,当我向前和向后移动相机手机时,我希望相机的宽度和高度会发生变化,因为向前移动时相机空间的大小会变小,反之亦然

作为最后的手段,目前我试图自己找到相机空间大小,我如何实现这一点

这是我的投影矩阵

Matrix4f projectionMatrix = new Matrix4f(-0.5f* currentCamWidth, 0.5f * currentCamWidth, -0.5f * currentCamHeight, 0.5f * currentCamHeight, -1f, node.getFullPosition().getZ());
当前凸轮宽度和当前凸轮高度始终不变。这些坐标是opengl坐标

当我前后移动照相手机时,我希望相机的宽度和高度会随着相机空间的大小而改变

为什么??仅仅因为你围绕着视角移动,并不意味着“虚拟镜头”的属性会改变

当它向前移动时,应该会变小,反之亦然

为什么??这不是摄像机的工作原理



在这里很难给出一个有用的答案,如果没有看到您目前编写的代码。目前这充其量只是猜测。

相机空间没有宽度/高度。你得到的最接近的东西是视场和纵横比。如何获得视场?我们可以从纵横比得到投影矩阵吗?@RobertLimanto要构造透视投影矩阵,你需要:1。纵横比或分辨率,2。znear,zfar3。视场角或焦距。看,我只是在寻找理论,你熟悉库丹吗?现在,我知道物体在相机空间中的位置,当我调整相机空间,使物体在相机屏幕的一角时。对象的坐标与我的屏幕大小不同。基本上,我正在尝试将屏幕坐标转换为相机空间坐标。但是如果不知道摄像机坐标的大小,这是不可能的。当你把摄像机移到离地面更近的地方时,可观察的视图会更小,因此,相机空间也会更小。@RobertLimanto:No.对于一个
Matrix4f
来说,读取起来就像一个4×4矩阵的构造函数,因此可能需要16个浮点数或4个浮点数的4个向量。不是你在那里经过的。我可以看出,您在考虑构造平截头体的参数,但即使如此,它也不正确。为什么?因为相机的参数在其位置改变时不会改变,所以将函数调用的结果转换为最后一个参数肯定是不对的。下面是一个非常全面的教程: