gpt4 book ai didi

android - 将真实世界坐标映射到 OpenGL 坐标系

转载 作者:行者123 更新时间:2023-11-30 00:15:57 28 4
gpt4 key购买 nike

我目前正在尝试实现一个基于室内地图的 AR 浏览器,但我面临几个问题,让我们看一下图: enter image description here

在这个图中,我已经将坐标更改为OpenGL的右手坐标系。

在我们的真实场景中,

给定角度 FOV/2 和相机高度 h 然后我可以获得最近的可见点 P(0,0,-n).

给定角度B 和相机高度h 然后我可以得到最近的点Q(0,0,-m)可见点和最长可见点。

问题来了:当我完成设置我的顶点(包括 P 和 Q)并使用方法 Matrix.setLookAtM

Matrix.setLookAtM(modelMatrix, 0, 0f,h,0f,0f,-2000f,0f,0f,1f,0f);

纵横比不正确。如果相机高度h设置为0.92并且FOV设置为68度,n应该是1.43,但是在OpenGL中坐标最近的点不是 (0,0,-1.43f)。所以我想知道如何解决这个问题,如何将真实世界的坐标映射到 OpenGL 的坐标系?

最佳答案

在渲染中,场景的每个网格通常由模型矩阵、 View 矩阵和投影矩阵进行变换。

  • 模型矩阵:
    模型矩阵定义场景中网格的位置、方向和相对大小。模型矩阵将网格的顶点位置转换为世界空间。

  • 查看矩阵:
    View 矩阵描述了观察场景的方向和位置。 View 矩阵从世界空间转换到 View (眼睛)空间。在视口(viewport)的坐标系中,X 轴指向左侧,Y 轴指向上方,Z 轴指向 View 外(请注意,在右手系统中,Z 轴是 X 轴的叉积轴和 Y 轴)。

    View 矩阵可以通过Matrix.setLookAtM设置

  • 投影矩阵:
    投影矩阵描述了从场景的 3D 点到视口(viewport)的 2D 点的映射。投影矩阵从 View 空间变换到裁剪空间,裁剪空间中的坐标被变换为范围为(-1, -1, -1) 到(1, 1, 1) 的归一化设备坐标(NDC)通过除以剪辑坐标的 w 分量。
    在透视投影中,投影矩阵描述了从针孔相机看到的世界中的 3D 点到 2D 点的映射的视口(viewport)。
    相机平截头体(截棱锥)中的眼空间坐标映射到立方体(归一化设备坐标)。

    透视投影矩阵可以通过Matrix.perspectiveM设置

enter image description here



您可以设置一个单独的 View 矩阵和一个单独的投影矩阵,最后将它们相乘。纵横比和视野是 [Matrix.perspectiveM] 的参数:

Matrix viewM = new Matrix();
Matrix.setLookAtM(viewM, 0, 0, 0, 0f, 0f,-2000f, 0f, 0f, 1.0f, 0.0f);

Matrix prjM = new Matrix();
Matrix.perspectiveM(prjM, 0, fovy, aspect, zNear, zFar);

Matrix viewPrjM = new Matrix();
Matrix.multiplyMM(viewPrjM, 0, prjM, 0, viewM, 0);

关于android - 将真实世界坐标映射到 OpenGL 坐标系,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/47277902/

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