OpenGL 中的视线矢量

2023-11-30

我遇到的问题是我无法在 OpenGL 中获得“视线”矢量。我做了一些研究,发现它应该是变换后的 Z 向量,但它不想工作。我有这段代码来检索块的速度(我希望它从“相机”向前移动),但它始终与相机无关,但与渲染的世界相比始终以相同的方式移动:

GLfloat matrix[16]; 
    glGetFloatv (GL_MODELVIEW_MATRIX, matrix);
    GLfloat d = sqrt( matrix[8]*matrix[8] + matrix[9]*matrix[9] + matrix[10]*matrix[10]);
    xmov = matrix[8]/d;
    ymov = matrix[9]/d;
    zmov = matrix[10]/d;

我做错了什么?


好吧,现在在你澄清你真正想做的事情之后,我很确定这是正确的答案:

您可能习惯了称为ModelView矩阵。它本质上由两部分组成,你不觉得很奇怪吗?嗯,这是对我来说的,我想了一会儿,这是有道理的。最终顶点位置计算如下:

gl_Position = ProjectionMat * ModelViewMat * VertexPos;

你看,无论你将“相机”从原点移动多少,对于 OpenGL 来说都没有区别[x,y,z]或通过以下方式移动对象[-x,-y,-z]- 你会得到相同的结果。然而,将“相机”位置区分为可能与原点不同的位置是有用的。

gl_Position = ProjectionMat * ViewMat * ModelMat * VertexPos;

正如我所说,我认为最自然的方法是将计算分成两个矩阵:Model and View。现在场景中的每个对象都必须改变Model矩阵,相机位置通过改变来设置View矩阵。说得通?

我给你举个例子。如果您的相机位于[5,0,0](对应于Translate(-5,0,0)),以及你的对象[-5,0,0],它将着陆距离相机 10 个单位。现在,当您将相机进一步远离原点(增加第一个平移距离)时,“相机”和物体之间的距离就会增加。

对象翻译是该模型,相机平移为the View.

所以不难得出结论,如果你想ignore相机位置,只需剥离View等式中的一部分;现在将绘制每个对象without考虑相机位置,因此仅相对于您的视口。

gl_Position = ProjectionMat * ModelMat * VertexPos;

我们的假设模型现在将从视口沿 X 轴着陆 5 个单位不管您当前正在“关注”的内容,我认为这几乎就是您想要实现的目标。

无论如何,你可能会使用一个很好的教程

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

OpenGL 中的视线矢量 的相关文章

  • std::vector 迭代器失效

    之前有几个关于这个问题的问题 我的理解是调用std vector erase只会使位于某个位置的迭代器无效after被擦除的元素 然而 擦除一个元素后 该位置的迭代器是否仍然有效 当然 前提是它不指向end 擦除后 我对向量如何实现的理解似
  • glDrawElements 只绘制半个四边形

    这是我的功能 void Object draw2 if mIsInitialised return Tell OpenGL about our vertex and normal data glEnableClientState GL VE
  • 将字符串解析为结构变量

    我试图将字符串解析为其中包含不同变量的结构向量 这是我到目前为止所拥有的 但似乎不起作用 struct client string PhoneNumber string FirstName string LastName string Ag
  • 用线性增加的值填充向量

    我会用线性增加的值填充 初始化一个向量 例如 对于这个向量中的每个元素 我希望下一个是a比以前更多 或者kth元素的值为k a 像这样的东西 float a 1 132 vector
  • 纹理的内部格式

    看下面的OpenGL函数 void glTexImage2D GLenum target GLint level GLint internalFormat GLsizei width GLsizei height GLint border
  • 如何在不使用 Kinect SDK 函数的情况下将深度空间中的点转换为 Kinect 中的颜色空间?

    我正在做一个增强现实应用程序 将 3D 对象叠加在用户的彩色视频之上 使用 Kinect 1 7 版本 虚拟对象的渲染在 OpenGL 中完成 我已经成功地在深度视频上叠加了 3D 对象 只需使用 NuiSensor h 标头中深度相机的固
  • 用 HashMap[Int, Vector[Int]] (Scala) 表示图(邻接列表)?

    我想知道如何 如果可能的话 我可以通过以下方式制作 可变 图的邻接列表表示HashMap Int Vector Int HashMap当然是可变的 目前我将其设置为HashMap Int ArrayBuffer Int 但我可以更改 Arr
  • 为什么 glClear 不清除我的屏幕?

    这是我编写的一个简单的 opengl 程序 我试图在绘制三角形之前清除屏幕 我在 init 函数中调用了 glClear 但是 它似乎无法清除屏幕 include
  • 在两个点之间创建一条曲线,每个点都具有标准化向量

    因此 我需要一种写入方法来在两点之间创建一条曲线 每个点都有一个指向任意方向的归一化向量 我一直在尝试设计这样一种方法 但一直无法理解数学 在这里 由于一张图片胜过一千个文字 这就是我所需要的 在图中 矢量垂直于红线 我相信向量需要进行相同
  • 将运算符 << 添加到 std::vector

    我想添加operator lt lt to std vector
  • 将类对象放置在向量中?

    我注意到我可以将一个类放置在一个向量中 这是我的程序 我收到以下错误 out blackjack exe blackjack obj blackjack obj error LNK2019 unresolved external symbo
  • 在 OpenGL 中使用不同的着色器程序?

    我必须在 OpenGL 中针对不同的对象使用两个不同的着色器程序 我发现我必须使用glUseProgram 在不同的着色器程序之间切换 但对此没有太多信息 鉴于我有两个用于不同对象的不同着色器程序 如何为每个着色器程序生成和绑定 VAO 和
  • 如何向 3D 表面添加文本

    我使用plot surface 创建了具有平行四边形底座的矩形棱柱 我需要向其中一个表面添加一些文本 我试过ax text 3 0 5 1 red 1 1 0 color red 但文本在表面上不可见 import matplotlib p
  • 如何在结构或类向量中快速搜索具有特定值的对象?由 小码哥发布于

    如果向量中有数千个结构或类对象 如何快速找到所需的对象 例如 制作游戏 我需要最快的碰撞检测方法 每个图块都是一个结构体 矢量图中有很多图块 其值是 x和y 所以基本上我这样做 For i 0 i
  • 无法使用 vcglib 简化 3D 模型,断言“0”失败

    I used vcglib https github com cnr isti vclab vcglib简化 3D 模型文件 我使用了 master a8e87662 git 存储库 我运行示例 trimesh clustering htt
  • 使用 OpenCV 描述符与 findFundamentalMat 匹配

    我之前发布了有关同一程序的问题 但没有收到答案 我已经纠正了当时遇到的问题 但又面临新的问题 基本上 我使用未校准的方法自动校正立体图像对的旋转和平移 我使用 SURF 等特征检测算法来查找两个图像 左右立体图像对 中的点 然后再次使用 S
  • Windows下使用GLEW使用OpenGL扩展

    我一直在 Windows 上使用 OpenGL 扩展痛苦的方式 https stackoverflow com questions 14413 using opengl extensions on windows GLEW 是更简单的方法吗
  • Opengl 视频纹理

    我正在使用 Visual Studio 10 在 Windows 上用 C 开发 opengl 应用程序 目前我在立方体上使用静态纹理 但我想集成视频纹理 你知道我可以使用哪个库来打开和解密视频吗 查看 ffmpeg libavformat
  • 在 iOS 上的 SceneKit 中导入 3d 模型

    从 URL 导入 obj 文件并将其转换为 SCNNode 时遇到问题 这是代码 swift3 let url URL init string https cloud box com shared static ock9d81kakj91d
  • 在 OpenGL 中渲染纹理 1 到 1

    所以我想做的是使用 OpenGL 和 C 将纹理渲染到平面上 作为显示图像的一种方式 但是我需要确保在渲染纹理时没有对纹理进行任何处理 抗锯齿 插值 平滑 模糊等 这是 OpenGL 处理渲染纹理的默认方式吗 或者是否需要设置一些标志才能禁

随机推荐

  • GAE / Android 示例中的 @Nullable @Named

    我正在尝试开发示例 GAE Android 应用程序 有地方实体 在生成的 PlaceEndpoint 类中有一个方法 ApiMethod name listGame public CollectionResponse
  • 如何在 php 中进行 geoip 查找?

    我见过的所有教程都指向类似的功能geoip record by name 我总是收到此错误 Fatal error Call to undefined function geoip record by name in home
  • 将折扣百分比添加到 Woocommerce 中的可变产品价格范围

    使用 Woocommerce 我使用以下代码成功地从产品档案页面中删除了销售徽章和价格 Remove Sales Flash add filter woocommerce sale flash woo custom hide sales f
  • Android - 无法打开 [SQL] 数据库错误

    我目前正在为 Android SDK 制作一个应用程序 它允许我打开 复制应用程序外部已经制作的数据库 我无法让我的程序读取数据库中的表 遵循一些建议question我之前发布过 我写了一个类 可以直接调用SQLiteDatabase 并使
  • 下拉列表为默认值

    有没有一种简单的方法可以将 Please select 默认选项添加到 MVC 3 中的 DropDownListFor 中 所以 我做了这样的事情 Html DropDownListFor model gt model Dessert n
  • 在Ajax Jquery函数中添加if else函数

    是否可以在我的 JS 中添加其他 else 函数 如下所示 如果响应 成功重定向到主页如果响应 失败重定向到失败 ajax type POST url action data form data success function respo
  • 确定具有函数依赖关系的候选键很简单

    设 R A B C D E 为关系模式 F A C B D C E E A 查找所有候选键 我相信由于无法映射 该集合中不存在 CK B 或 D 到除 B gt D 之外的任何其他关系 这是否意味着没有候选密钥 尽管我能够将 A 映射到除
  • Moz RTCPeerConnection() 上 FireFox 中的 NS_ERROR_UNEXPECTED

    我在 webrtc 1 1 视频通话应用程序中使用adapter js 它在 Google Chrome 上运行良好 双方都可以看到彼此的视频并可以听到音频 但是 当我在 FireFox 上运行相同的应用程序时 我在控制台上收到来自 ada
  • Google Chrome 中的 getElementById 问题

    我有这条简单的线 alert window parent frames 0 document getElementById textToSearch value 我有 2 个框架 第一个框架是一个 id 为 textToSearch 的文本
  • Java 8 int 数组映射

    我想转换整型数组 to Map
  • 检查浏览器是否支持 HTML5 时间选择器

    我用 JavaScript 构建了一个时间掩码 它非常适合 PC Mac iPhone 和 iPad 但在大多数 Android 手机中无法一致工作 我不想详细解释为什么此功能无法一致工作 在 Android 中 所以我禁用它 对于三星来说
  • 使用神经网络和 ReLU 逼近正弦函数

    我正在尝试用神经网络 Keras 来近似正弦函数 是的 我读过相关的帖子 Link 1 Link 2 Link 3 使用具有 sigmoid 的四个隐藏神经元和具有线性激活的输出层效果很好 但也有一些设置提供的结果对我来说似乎很奇怪 由于我
  • 如何从 Javascript 设置 WebSocket Origin 标头?

    我正在尝试使用 javascript 从本地发出 websocket 请求test dev页面到在 ip 上运行的服务器123 123 123 123代表test com 请求通过 但是123 123 123 123服务器看到Origin
  • 使用 DateTime.TryParseExact 解析非标准日期格式

    您好 我正在尝试解析 1012012 2012 年 1 月 1 日 等日期字符串 阅读 Api 它说要使用 d d 其中日期没有前导 0 无法让它适用于像 1012012 这样的日期 尝试使用 d MMM YYYY 表示 2012 年 1
  • iframe 内的 Facebook 表单应用程序丢失 Windows 平台中 Safari 浏览器的 cookie

    我有一个使用 iframe 构建的 Facebook 应用程序 除了 Windows 平台上的 Safari 之外 它在大多数现代浏览器上都可以正常工作 在 Safari Windows 平台上 当用户从初始表单页面移动到带有问题的第二页时
  • SSIS 脚本任务 COMException / FileNotFoundException 错误

    您好 我有以下 VBS 如果我将其放入 vbs 文件并运行它 则运行不会出现任何问题 Dim objshell Set objshell CreateObject Shell Application objshell NameSpace C
  • 使用gdb检查寄存器的值

    如何查看寄存器保存的值 我有以下装配线 mov 0x8 rax rax cpm ebx rax 使用命令 gdb p x ebx gdb p x rbx 3 0xb 我得到了存储在该寄存器中的值 但是 当我尝试查看内存位置 rax 中存储的
  • 如何使用 Ajax/JavaScript (Rails) 动态更新此投票计数器?

    我建立了一个简单的投票系统 votes controller rb class VotesController lt ApplicationController def vote up post Post find params id vo
  • 将列表环绕为切片操作

    考虑以下简单的 python 代码 gt gt gt L range 3 gt gt gt L 0 1 2 我们可以按如下方式对该数组进行切片 gt gt gt L 1 3 1 2 有没有办法通过向左移动来环绕上面的数组 1 2 0 通过简
  • OpenGL 中的视线矢量

    我遇到的问题是我无法在 OpenGL 中获得 视线 矢量 我做了一些研究 发现它应该是变换后的 Z 向量 但它不想工作 我有这段代码来检索块的速度 我希望它从 相机 向前移动 但它始终与相机无关 但与渲染的世界相比始终以相同的方式移动 GL