- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
我目前正在尝试实现一个基于室内地图的 AR 浏览器,但我面临几个问题,让我们看一下图:
在这个图中,我已经将坐标更改为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
设置
您可以设置一个单独的 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/
在 unsafeDupablePerformIO 的定义( source 、 docs )中,我找到了对唯一的 realWorld# 的引用。所以我想知道所有这些以 # 结尾的函数或值是在哪里定义的?
关闭。这个问题是opinion-based .它目前不接受答案。 想要改进这个问题吗? 更新问题,以便 editing this post 提供事实和引用来回答它. 关闭 5 年前。 Improve
在现代 v8 Javascript 中,String.prototype.slice 的算法复杂度是多少? 明确地说,我正在寻找真实世界的实用数据或经验法则。 快速测试 我试图通过在最新的 Chrom
我正在阅读文章 Double-checked locking and the Singleton pattern ,关于如何破坏双重检查锁定,以及 Stack Overflow 上的一些相关问题。 我
Goerzen 等人 present CSV 文件解析器的简单实现,用于向 Real World Haskell 的读者介绍 Parsec 解析组合器库。 这是他们的简洁程序的一个版本: import
ResultBox1->Text = (sin(TextBox1->Text)) * TextBox2->Text 这就是我想要的工作,但我正在处理字符串 我似乎无法转换字符串,进行触发,然后转换回字
我想验证给定的字符串是 URL。匹配文本中的 URL 也很好,但不是必需的。我已经搜索并进行了实验,但到目前为止,我还没有找到可以满足这些要求的东西: 不得接受在被视为链接时会带来安全风险的字符串。例
在第3章,有一个例子叫“MySecond.hs”,我真的不明白是这样的代码: safeSecond :: [a] -> Maybe a 它总是在文件的第一行,删除它不会造成任何麻烦。任何人都可以启发我
我正在尝试使用 HTML Canvas 表示 LED 矩阵的闪烁。对我来说重要的是,每个 LED 的尺寸和它们之间的距离代表它们在现实世界中的真实尺寸(例如,以毫米为单位)。 如果我为一台计算机找到一
根据another question ,现实世界 Haskell 的部分内容现已过时。我只学习了第 5 章,但在将一个简单示例编译为可执行二进制文件时遇到问题。 给出了两个模块: module Sim
我正在尝试通过 mentioned chapter 。在阅读和思考练习时,我遇到了一些困难。 首先,fill 和 nest 函数的签名不应该是 :: Int -> Doc -> String 吗?我认
第 3 章定义了以下递归类型来表示二叉树: data Tree a = Node a (Tree a) (Tree a) | Empty deriv
这个问题不是重复的 A question with the same title already exists ,但 answer在我看来,只部分解决了它,我也对它没有解决的问题感兴趣。 前言 真实世
我是一名优秀的程序员,十分优秀!