当我在学习OpenGL时,我经常偶然发现所谓的眼空间坐标。
如果我是对的,你通常有三个矩阵。模型矩阵、视图矩阵和投影矩阵。虽然我不完全确定这背后的数学是如何工作的,但我知道将坐标转换为世界空间、视图空间和屏幕空间。
但是眼睛空间在哪里,我需要哪些矩阵来将一些东西转换为眼睛空间?
根据您使用的是固定函数管道(例如,如果您调用glmatrixmode()
)或使用着色器,操作是相同的--这只是您是直接在着色器中编写它们,还是OpenGL管道在工作中提供帮助的问题。
虽然在讨论固定函数管道方面有些不愉快,但它使对话更加简单,所以我将从这里开始。
在旧版OpenGL(即OpenGL3.1之前的版本,或使用兼容性概要文件)中,定义了两个矩阵堆栈:模型-视图和投影,当应用程序启动时,每个堆栈顶部的矩阵是一个单位矩阵(对角线为1.0,所有其他元素为0.0)。如果在该空间中绘制坐标,则实际上是在规范化设备坐标(NDCs)中呈现,它会剪掉范围[-1,1]以外的X、Y和Z中的任何顶点。视口转换(通过调用glviewport()
设置)将NDCs映射到窗口坐标(实际上是视口坐标,但通常视口和窗口的大小和位置相同),并将深度值映射到深度范围(默认情况下为[0,1])。
眼睛位于视锥面的顶点。
最后要讨论的转换是模型-视图转换,它负责移动坐标系(而不是物体;稍后将详细介绍),以便它们相对于眼睛和视锥面处于良好的位置。常见的建模转换是平移、缩放、旋转和剪切(OpenGL中没有本地支持)。
一般来说,3D模型是围绕局部坐标系建模的(例如,指定球面的坐标,原点位于中心)。建模转换用于将“当前”坐标系移动到一个新的位置,以便在渲染本地建模的对象时,将其定位在正确的位置。
现在,如果您正在进行这种现代OpenGL(core profile Version3.1和forward),您必须自己逻辑地执行所有这些操作(您可能只指定一个转换,将模型视图和投影转换折叠成一个矩阵乘法)。矩阵通常指定为着色器制服
。没有矩阵堆栈,模型-视图和投影转换分离,您需要得到正确的数学来模拟管道。(顺便说一句,透视图分割和视口转换步骤是在顶点着色器完成后由OpenGL执行的--您不需要做数学运算[可以,除非在gl_position
顶点着色器输出中未能将w设置为1.0,否则不会造成任何损害)。
问题内容: 嗨,大家好,我正在一个项目中,我们试图检测照片中眼睛是闭合还是睁开……到目前为止,我们所做的是先检测到人脸,然后再检测到眼睛,然后应用霍夫变换,希望虹膜是睁开眼睛时唯一的圆,问题是,闭眼时…也会产生一个圆 这是代码: 关于如何使其更准确的任何建议? 问题答案: 在大多数情况下,即眼睛部分张开或闭合时,环形霍夫变换不太可能很好地起作用。最好隔离眼睛周围的矩形区域(边界框),并根据像素强度
本文向大家介绍JavaScript 空间坐标的使用,包括了JavaScript 空间坐标的使用的使用技巧和注意事项,需要的朋友参考一下 基础知识 首先参考画布分为视口(窗口)与文档的含义 网页很多都是多屏,所以文档尺寸一般大于视口尺寸 视口尺寸不包括浏览器工具条、菜单、标签、状态栏等 当打开控制台后,视口尺寸相应变小 文档像 position 定位,视口类似 fixed 定位 文档坐标在页面滚动时
我目前正在尝试眼动跟踪,我已经成功地使用带有轮廓和霍夫变换的OpenCV构建了虹膜跟踪算法。但是下一步对我来说还不清楚。我想知道我所做的计算是否正确,可以将眼睛的中心转换到屏幕上。用户的头部具有固定位置。 我想要的是一种对所有偏离航线的人都有效的算法。有角度计算吗?所以当用户看起来更右,线性? 我现在做的是:首先,我让用户查看特定点,并使用RANSAC检测虹膜位置,该位置最接近屏幕上的位置。我用屏
主要内容:JSP的由来,Servlet与JSP异同点,JSP相对于Servlet的优点JSP(Java Server Pages)是一种动态网页开发技术。JSP 文件就是在传统的 HTML 文件中插入 Java 代码和 JSP 标签,后缀名为 。 JSP 与 PHP、ASP、ASP.NET 等语言类似,都运行在服务端。通常返回给客户端的就是一个 HTML 文件,因此只要有浏览器就能查看 JSP 页面。 JSP 使用 JSP 标签在 HTML 网页中插入 Java 代码,标签通常以
直到我在旧存储库中随机检查 ,我才听说过这个文件,它就是一个我自己没有编辑过也从未见过的文件。我不知道它是如何到达那里的。 似乎很常见 - 主要是如何删除它(例如这里和这里)。 这个文件是什么,是什么创建了它?
基本上,为什么有这个术语? 还有,接口是什么意思?