问题标签 [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.
c++ - 使用lookAt进行相机旋转
嘿伙计们,我正在尝试做一个使用 glm 库中的 lookAt 的 Camera 类。我有4个点,第一个是eye,即相机在空间中的位置,第二个是look,即相机正在看的点,第三个是upp,设置相机的方向,第四个是边,它是look-eye和upp-eye的叉积。
所以最后我得到了一个由 3 个向量组成的基础,所有这些向量都以眼点为原点。我得到了相机的坐标系。
在我的相机类中,我希望能够围绕相机的坐标系而不是世界的坐标系旋转。所以我正在做的是围绕相机坐标系的轴之一旋转。
我用这样的初始值构造类:
例如,当我想围绕 x 轴旋转坐标系时,我从 glm 调用函数,如下所示:
到目前为止,我了解到我的所有点仍然构成相机的坐标系,并且所有矢量彼此垂直。
但随后我使用通过lookAt 函数获得的这些点来定位相机在世界中的位置。
并将此矩阵与来自 OpenGL 的模型视图矩阵相乘
如果我开始旋转很多,旋转几次后的相机会“反映”旋转,就像我以另一种方式旋转一样(我不知道如何以更好的方式描述真正发生的事情=s)。
我真的不明白发生了什么。应用旋转后我应该对向量进行归一化吗?我的云台锁有问题吗(我对云台锁不太了解)?
c++ - GLM:无法再编译
有人再使用这个库吗?
去年对我来说很好,但现在我的代码没有编译:
(在带有 GCC 4.6.1 的 MinGW 上):
这是最新版本 0.9.4.3。
我的 Mac 上最新的 clang 出现了类似的问题:
这是一个只有头文件的库。这样的事情不应该发生...
我只将它用于一些 4x4 矩阵乘法和求逆。由于我的应用程序的其余部分广泛使用 LAPACK,因此我不需要 glm 做任何事情。但是我讨厌当我尝试使非常便携的代码像这样随机中断时。
c++ - 使用 openGL GLM 和着色器的不正确旋转
我的程序的目标是显示一个简单的在 Y 轴上旋转的彩色三角形,没有任何平移。我正在使用 GLM 库。问题是我的三角形的变换是不正确的:它有一个奇怪且不合逻辑的行为。这是我的 C++ 代码加上顶点着色器和片段着色器代码:
C++ 代码:
顶点着色器代码:
片段着色器代码:
当我为模型声明一个简单的矩阵旋转时,我将它发送到顶点着色器并将它用作 MVP 并且它可以工作。但是当我添加投影矩阵 + 视图矩阵时,它不能正常工作。这是一张图片:
通常,三角形应位于屏幕的中心。
有人可以帮助我吗?
opengl - 在OpenGL中使用统一参数(使用glm)
我必须执行以下操作:“将纹理拆分为多个部分。你有一个纹理,你应该传递纹理坐标 az uniform 参数。”
具体来说,我有 15 个立方体,我想应用一个纹理来覆盖它们的上侧(制作一张大图)
问题是,我不知道统一参数是什么,以及如何使用它来解决问题。它可能与这些方法之一有关吗?http://www.khronos.org/opengles/sdk/docs/man/xhtml/glUniform.xml
以下是我的代码的相关部分:
-
-
-
opengl - 使用旋转矩阵确定对象的右向量
我试图找到一个我已经计算了旋转矩阵的对象的右向量,以便它可以在 3d 空间中扫射。到目前为止,我已经得到
在盯着它看了一会儿之后,我发布了它左右移动的处理程序,思考问题是否真的存在于那里。
只要我只俯仰和偏航,这一直工作得很好。一旦物体试图滚动,它的右矢量就会与它应该的位置成 90 度角。我知道我可以提取 RotationMatrix 的第一行来获取 Right,但这与上述代码的结果相同。
图片说明问题 http://img442.imageshack.us/img442/5046/directionexample.jpg
c++ - 如何将欧拉角转换为前、上、右向量
我需要一个给定 Yaw、Pitch 和 Roll 的函数,可以在“世界坐标”中生成 Front(或 Look At)、Right 和 Up 向量。
在我的特定世界空间中,从原点 (0,0,0) 开始,X 向左为正,Z 为远离观察者/原点的正数,Y 为向上正数。
例如,给定...(以度为单位的角度)
yaw=0,pitch=0,roll=0,预期输出为:
- 前面 = (0.0,0.0,1.0)
- 对 = (-1.0,0.0,0.0)
- 向上 = (0.0,1.0,0.0)
yaw=90,pitch=0,roll=0,预期输出为:
- 前面 = (1.0,0.0,0.0)
- 对 = (0,0,0.0,1.0)
- 向上 = (0.0,1.0,0.0)
yaw=0,pitch=90,roll=0,预期输出为:
- 前面 = (0.0,1.0,0.0)
- 对 = (-1.0,0.0,0.0)
- 向上 = (0.0,0.0,-1.0)
yaw=0,pitch=0,roll=90,预期输出为:
- 前面 = (0.0,0.0,1.0)
- 右 = (0.0,1.0,0.0)
- 向上 = (1.0,0.0,0.0)
我正在使用的语言是 C++,如果最有意义的话,我很乐意使用 glm 来解决这个问题。如果我可以通过四元数到达那里,我也可以使用该解决方案,因为我发现了其他教程,这些教程描述了如何从欧拉角获得四元数。
quaternions - 我通过反复试验得出的结论,您能解释一下原因吗?
首先,我不确定这里是否欢迎这个问题,我检查了常见问题解答并发现“我希望其他人解释”的问题是。
主要问题是我需要在我的应用程序中存储所有对象的旋转两次。这是因为一方面,我使用Bullet Physics的物理模拟存储了它的表示。另一方面,我自己存储所有对象共有的旋转,无论它们是否在物理模拟中,例如灯光、任务目标等。除了物理库之外,我还使用了GLM数学库。
我必须同步两种表示。顺便说一句,位置和规模不会造成任何问题。困难在于物理模拟任何我自己的表示都是不同的,所以我不能只是复制值。我还没有发现所有这些差异,但它可能与左手坐标系与右手坐标系、度数与弧度以及 Y 坐标向上与 Z 向上有关。
我自己的表示只是将欧拉角存储在glm::vec3
向量中。由于我使用 OpenGL 进行绘图,我猜空间是右手的。对于欧拉角,顺序很重要。我计算旋转矩阵的方法是首先创建每个组件的矩阵,然后按X * Y * Z
顺序将它们相乘。此外,在我自己的表示中,正 Y 坐标指向上方。
物理模拟使用四元数来存储旋转。经过一些研究,我读到了这个库中空间是左手的假设。我没有关于哪个坐标是向上的信息,也没有关于返回欧拉角的顺序的信息。
这是将旋转从物理模拟转换为我自己的表示的代码,反之亦然。
我通过反复试验发现了这个肮脏的代码,它可以工作。但正如您所看到的,通过不同的四元数类型进行否定、组件混合和类型转换。我想其中许多是不必要的,并且可以更简单地执行任务。
您能否解释一下为什么我的转换确实有效以及如何简化它们?顺便说一句,如果转换不起作用,我想看看它的外观,这是一个屏幕截图......
c++ - 检索向量数据指针以传递二维向量数组
我有OpenGL方法:
其中 xtranslate 应该是一个 GLfloat 数组,其中每对连续的数字代表 2 个暗淡向量。在我的应用程序中,表示 xtranslate 的数据结构是:
如何获取指向此结构的数据指针,以便将其作为 GLFloat* 传递到上述方法中是有效的
我应该手动将结构“展平”成数组还是有一些更棘手的解决方案?
glm 是仅 OpenGL 模板的数学库。
顺便说一句,我已经看到 OpenSceneGraph API 对其矢量结构有这样的方法,但我找不到实现的源代码。
c++ - 此代码导致哪个欧拉角顺序?
使用数学库 GLM,我使用此代码将欧拉角旋转组合到旋转矩阵。
这会导致 XYZ 或 ZYX 的欧拉角序列吗?我不确定,因为矩阵乘法的行为与标量乘法不同。