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 中的视线矢量 的相关文章

  • Godot 3d 得到向前矢量

    我想知道是否有办法获取 godot 3d 中空间节点的前向向量 统一起来 这就是transform forward Godot 给了我一个旋转向量 但我不知道如何将其转换为方向向量 戈多版本的transform forward是什么 前进是
  • 按偶数和奇数索引对向量进行排序。由 小码哥发布于

    是否有一种单行 或简单的无循环 解决方案可以按偶数和奇数索引对向量进行排序 例子 long entries 0 1 2 10 11 indices 0 1 2 3 4 std vector
  • 如何在OpenGL中像这样绘制连接的带状线

    我想用以下方式绘制一系列连接线 GL LINE STRIP 我尝试过自己编写代码 但没有得到想要的结果 所以我来到这里 帮助我找出我错在哪里 这里我只给出我的draw 函数 glBegin GL LINE STRIP glVertex2f
  • 使用带有可变参数字符串的函数

    我正在研究带有可变参数的函数 并决定创建一个函数来创建带有参数的向量 我的功能是创建一个int矢量工作 vector
  • 无法在 QGLWidget 中设置所需的 OpenGL 版本

    我正在尝试在 Qt 4 8 2 中使用 QGLWidget 我注意到 QGLWidget 创建的默认上下文不显示 OpenGL 3 1 以上的任何输出 Qt wiki 有一个教程 http qt project org wiki How t
  • 带有 std::vector 的 VBO

    我用 C 和 OpenGL 编写了一个模型加载器 我用过std vectors 来存储我的顶点数据 但现在我想将其传递给glBufferData 但是数据类型却截然不同 我想知道是否有办法可以相互转换std vector至已记录的const
  • 添加一条适合 R 中绘图峰值的曲线?

    如果给定两个向量及其图 是否有一个函数可以添加一条适合峰值的曲线 例如 我有 x c 0 20 X 1 0 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 y 1 19 4 17 9 8
  • OpenSceneGraph 将相机设置在初始位置

    我是第一次使用 OpenSceneGraph 我有点迷失 因为文档确实不太清楚 所以 我有这段代码加载一个带有房子的 obj 文件 并且我在我想要的 人 所在的地方淹没了一个小盒子 所以现在 我不想把那个盒子放在那里 而是想把相机放在那里
  • Windows 上的 OpenGL SDK

    我正在尝试编写一个 OpenGL 应用程序 因此我安装了 Windows 7 SDK 然而 它似乎是OpenGL 1 1 define GL VERSION 1 1 1 如何找到我安装的 OpenGL 版本 dll 以及在哪里可以找到较新的
  • 如何在片段着色器中将 gl_FragCoord 转换为世界空间点?

    我的理解是 如果您有视图投影矩阵 屏幕宽度和屏幕高度的逆矩阵 则可以将 gl FragCoord 转换为片段着色器中世界坐标中的点 首先 你转换gl FragCoord x and gl FragCoord y通过分别除以宽度和高度 然后将
  • 使用普通画布/文本输出更新LayeredWindow

    有没有一种方法可以使用画布在表单上绘图 然后使用 updatelayeredwindow 这样表单就不可见 但文本可见 就像只显示文本的半透明表单一样 如果没有 那么有没有办法只用画布 opengl directx 制作某种半透明形式 我想
  • Java 的 3D 场景图库?

    我正在寻找一个可靠的 Java 3D 场景图 API 它具有良好的文档 活跃的社区和允许商业使用的许可证 我排除了com sun scenegraph https scenegraph dev java net 因为它是 GPL 而且看起来
  • Shader的功能参数表现

    我试图了解如何在着色器语言中实现传递参数 我读过几篇文章和文档 但仍然有一些疑问 特别是我试图理解与C 函数调用 特别强调性能 之间略有差异HLSL Cg and GLSL但我猜下划线的实现非常相似 到目前为止我所理解的 除非另有说明 函数
  • Vector.erase(Iterator) 导致内存访问错误

    我正在尝试对以下内容进行 Z 索引重新排序videoObjects存储在一个vector 该计划旨在确定videoObject这将被放在第一个位置vector 将其删除 然后插入到第一个位置 不幸的是erase 函数总是会导致内存访问错误
  • R 将向量重塑为多列

    假设我在 R 中有一个向量 如下所示 d lt seq 1 100 我想将这个向量重塑为 10x10 矩阵 这样我就可以得到以下数据 1 2 3 10 1 2 3 10 11 12 13 20 21 22 23 30 91 92 93 10
  • 使用 vtk 给定一组点创建多条折线

    我需要使用 vtk 和 paraview 显示 50 个粒子空间中的轨迹 目前我的数据是pos x y t n 其中 n 是第 n 个粒子的标签 我已将所有数据保存在 vtk 文件中 该文件的组织方式如下 vtk DataFile Vers
  • 如何使用OpenGL数组纹理?

    我正在尝试在OpenGL中使用精灵表 通过数组纹理实现它这就是我加载纹理的方式 QImage image image load C QtProjects project images spritesheet png png const un
  • 使用 size_t 值反向遍历向量

    我想以相反的方向遍历向量的值 如您所知 向量的大小为 size t 当我使用以下代码时 for size t r m size 1 r gt 0 r x r f r for size t c r 1 c lt m size c x r m
  • 3D 数组到 3D std::vector

    我在代码函数中用 3D std vector 替换了 3D 数组 它进入了无限循环 你能给我一个提示吗 我真的需要使用向量而不是数组 谢谢 我最初的代码是 arr is a 3D array of a sudoku table the 3
  • 调整向量大小会使迭代器失效吗?

    我发现这个C 代码 vector

随机推荐

  • 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