问题标签 [glm-math]

For questions regarding programming in ECMAScript (JavaScript/JS) and its various dialects/implementations (excluding ActionScript). Note JavaScript is NOT the same as Java! Please include all relevant tags on your question; e.g., [node.js], [jquery], [json], [reactjs], [angular], [ember.js], [vue.js], [typescript], [svelte], etc.

0 投票
1 回答
1130 浏览

c++ - GLMmodel 顶点中的 -431602080.000000 值是什么意思?

我使用GLMmodel对象来表示 C++ 程序中的 Google Sketch Up 模型。这些对象有一个成员(顶点),其中包含对象所有顶点的列表,其方式如下:[GLfloat x 顶点 1 分量,GLfloat 顶点 1 分量,GLfloat z 顶点 1 分量,GLfloat x 分量顶点 2...]。当我读取所有这些值时,除了前三个(第一个顶点的坐标)都是三个 -431602080.000000 之外,我得到了所有这些值的小数字。这在我的程序中没有意义。我用谷歌搜索了它,我发现这个值经常出现在 C++ 程序中,但我不知道它是什么意思。有任何想法吗?

0 投票
4 回答
1614 浏览

c++ - 如何使用 SSE 或 GLSL 优化“u[0]*v[0] + u[2]*v[2]”代码行

我有以下功能(来自开源项目“重铸导航”):

我通过 VS2010 CPU 性能测试运行它,它告诉我,在这个函数中的所有重铸代码库代码行中u[0]*v[0] + u[2]*v[2]CPU 最热。

我如何 CPU 优化(例如通过 SSE 或GLM 之类的 GLSL(如果在这种情况下更容易或更快且合适))这条线?

编辑:调用出现的上下文:

0 投票
0 回答
506 浏览

c++ - glm 库 ext.hpp 编译问题(Xcode iOS)

我正在尝试将glm/ext.hpp扩展标题包含到我的项目中。虽然glm.hpp可以毫不费力地包含在内,并且项目可以简单地构建,但该库的扩展会产生大量编译时错误。例如,有一些辅助的内联头文件 ( .inl) 带有一些引发错误的宏定义:

  • int_10_10_2.inl:语义问题
  • type_vec2.hpp:

冲突的构造可能是什么(提示分析哪些文件最有帮助)?有没有其他人成功地将 ext.hpp 包含在 Xcode 项目中?

0 投票
6 回答
65124 浏览

c++ - 如何打印通过引用传递的 glm::vec3 类型的向量值?

我有一个小的 obj 加载器,它需要两个参数并将它们传递回输入变量。但是这是我第一次这样做,我现在不知道如何打印所述值。这是我测试加载程序是否正常工作的主要功能。我有两个类型glm::vec3的向量来保存顶点和法线数据。

上面评论的那一行是产生无用信息的原因。如果我这样离开它并运行程序,我会收到一堆错误(太无格式且无法在此处粘贴),如果我添加引用运算符,我会得到如下输出:

知道我做错了什么吗?

0 投票
2 回答
1023 浏览

c++ - Swig 包装 GLM 库

我目前正在开发一个 2D 游戏引擎,并且在实现 LUA 脚本/解释器时遇到了一个绊脚石。

我正在使用 SWIG,并且基础知识一切正常。

在引擎中,我将 GLM(OpenGL 数学库http://glm.g-truc.net/)用于所有向量和矩阵相关区域。

我真的需要通过 SWIG 向 LUA 公开 glm(在基本级别),这样我就可以在 LUA 中调用方法,例如:

GLM 是一个相当复杂的库(可能是轻描淡写的哈哈),我不需要暴露整个东西,我认为这将是荒谬的工作量。我只是希望能够访问 glm::vec2 类的 xy 组件。

我确信这一定很容易,因为 SWIG 不需要完整的类定义,并且必须有一种方法让 SWIG 假设 glm::vec2 类只有 x,y 参数。

我不确定是否在 SWIG 中使用代理类是这样做的方法?还是其他方法?我对 LUA 集成和 SWIG 也很陌生。

我真的不想走的一条路线是放弃 GLM 并编写我自己的向量/矩阵库,它更简单,没有模板等,然后我可以简单地用 SWIG 包装,但我觉得这会浪费时间我最终会得到一个功能不那么强大的数学库:(。

在此先感谢,如有必要,我可以提供更多信息。

0 投票
3 回答
19891 浏览

c++ - 四元数 -> 欧拉角 -> 旋转矩阵问题 (GLM)

我正在编写一个程序,它加载一个包含场景描述的文件,然后使用 OpenGL 显示它。我将 GLM 用于我的所有数学运算。场景文件中的旋转以四元数格式存储。我的场景管理系统以欧拉角的形式对对象进行旋转,这些角度稍后在绘制时转换为旋转矩阵。

因此,我的加载过程采用四元数旋转,将它们转换为欧拉角以存储在我的对象类中,然后将这些欧拉角转换为旋转矩阵以进行绘制。我正在使用 glm::eulerAngles 和 glm::eulerAngleYXZ 函数(分别)来执行这两个操作。

但是,我得到的结果不正确。例如,如果我理解正确,四元数 {0.500 -0.500 0.500 0.500}(即 WXYZ)应该描述从 +Z 轴到 +Y 轴的箭头旋转。然而,当我运行程序时,我得到了指向 +X 轴的箭头。

我会假设我对四元数的理解存在一些缺陷,但我可以通过跳过中间欧拉角形式来获得预期的结果。通过使用 glm::toMat4 将四元数直接转换为旋转矩阵,我得到一个将 +Z 箭头指向 +Y 的旋转。

考虑到这两种方法看起来既简单又正确,我在协调这两种不同的输出时遇到了麻烦。为了简化我的问题,为什么这两种看似等效的方法会产生不同的结果:

0 投票
1 回答
1193 浏览

c++ - OpenGL/GLSL/GLM - Skybox 像第三人称一样旋转

我刚刚开始实现天空盒,并且正在使用 OpenGL/GLSL 和 GLM 作为我的数学库。我认为问题与矩阵有关,并且我无法找到利用 GLM 库的实现:

天空盒的模型加载得很好,但是相机会绕着它旋转,就好像它在 3d 第三人称相机中围绕它旋转一样。

对于我的天空盒矩阵,每次我的相机更新时我都会更新它。因为我使用 glm::lookAt,所以它的创建方式基本上与我的视图矩阵相同,只是我使用 0、0、0 作为方向。

这是我的视图矩阵创建。它在渲染对象和几何图形时效果很好:

同样,我的天空矩阵也是以同样的方式创建的,只有一个变化:

我知道天空盒不应用平移,只考虑旋转,所以我不确定问题是什么。有没有更简单的方法来做到这一点?

视觉辅助:

还没有任何动静直接上路 当我第一次启动程序时直接

当我旋转相机时: 在此处输入图像描述

我的问题是:如何设置正确的矩阵来使用 glm:lookAt 渲染天空盒?

0 投票
3 回答
15451 浏览

c++ - glm::rotate() 调用无法编译?

我无法调用 glm::rotate(mat4, int, vec3(x,y,z)); 去工作。VS 2010 告诉我

我正在使用 glm-0.9.1

我见过这个堆栈溢出问题,但解决方案仍然会触发智能感知错误:glm rotate usage in Opengl

我真的不能让它接受任何重载方法。不过,我可能只是遗漏了一些明显的东西。

我试图在代码中使旋转调用明显,它有点落后。

这是一些代码:

0 投票
2 回答
1579 浏览

c++ - 在 Open GL 2.0 和 glm 中创建第一人称相机

我对 Open GL 和 c++ 非常陌生,并且遇到了创建第一人称相机的问题。我不懂矩阵数学,所以这对我来说更加困难。到目前为止,为了计算相机的旋转,我已经这样做了:

每次更新调用都会调用该函数。

为了通过鼠标处理相机的旋转,我做了以下事情:

为了处理运动,我做了以下事情:

我的问题在于我的相机不会朝着您面对的方向移动,并且它永远不会停止旋转:/。另外,如果你能给我指一个指南或关于矩阵数学的东西,那就太棒了:)

编辑2: '

我刚刚启动了一个新的进程鼠标功能,它沿着屏幕的 x 轴移动,作为相机的正确旋转。但是,无论我向左还是向右移动鼠标都没有关系,这两个动作都会使我向右旋转。与 3d 空间中的 x 轴相同,但这发生在向下。关于造成这种情况的任何想法?

0 投票
2 回答
14533 浏览

c++ - 使用 GLM 正确旋转 Open GL 相机

我有一个相机类,它的初始化如下:

以下是其他导入功能:

我的问题是,当我编译项目时,编译器会输出一条错误消息:

据我了解 vec = mat4 * vec 应该产生一个旋转向量?由于我无法测试此代码,因此我不知道该功能是否正常工作。

编辑

根据评论和 awnsers 更新了代码。我的问题是现在我得到一个蓝屏,在渲染功能的某个地方......

编辑 2

现在的问题是用鼠标旋转相机,它只是不起作用,由于某种原因,x 轴上的变化经常影响 y 轴上的变化,反之亦然。此外,如果我在 x 轴(y 旋转)上向右或向左移动鼠标,相机将向左旋转......