问题标签 [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++ - glm::ortho() 实际上是错误的吗?
我最近认为从 OpenGL 提供的旧(已弃用)功能(例如矩阵运算和固定函数管道)切换是一个好主意。
我使用 GLM 作为我的矩阵库来简化一些事情。问题是它可能导致的问题比它简化的要多……
透视投影在我的着色器和设置中运行良好,但是当我尝试切换到正交时,一切都崩溃了。我的点和简单的四边形不会显示。当我使用旧的 OpenGL 矩阵时,事情又开始起作用了。
我把它缩小到投影矩阵。我是这样称呼它的:
我将其与 opengl 提供的那个进行了比较,一旦被调用“
唯一的区别是 [0][0] 元素和 [1][1] 元素(据我所知,它们分别等于“2/width”和“2/height”)。从 OpenGL 矩阵中,值就是这样!但是,在 glm 矩阵上,值是 0。
一旦我在调用 glm::ortho 后手动切换了 glm 矩阵中的值,一切都恢复正常了!
所以我的问题是: glm::ortho() 函数真的坏了,还是我用错了?
c++ - WaveFront .obj 加载器未按应有的方式显示对象(VBO 和 VAO)
我正在开发 WaveFront .obj 加载器,我的第一个目标是从以下 .obj 文件中加载所有顶点和索引(显示带有弯曲边缘的立方体)。
我已经将所有顶点和索引加载到两个向量中,称为 verticesVec 和 indicesVec,并且我已经检查了它们(它们的所有输入都以正确的顺序排列,verticesVec[0] = 0.9 和 indicesVec[0] = 1)。我加载 VertexBufferObject 中的顶点和 VerticArrayObject 中的索引以及着色器字段设置。
但是,当我渲染立方体时,我得到以下不正确的图像。我已经重新检查了所有代码,但找不到出错的部分。它与向量和向量的字节大小有关吗?
以下代码来自我的 Draw/Render 方法,该方法执行所有渲染。
以及我的 .obj 加载器中缓冲区对象的初始化:
c++ - 使用顶点着色器 OpenGL 3.x 计算观察矩阵
我按照这篇文章构建了 GluLookAt 类型矩阵。
我计算那个 CPU 端,并以与透视矩阵相同的方式将其作为统一传递给着色器。
着色器看起来像这样。
如果将lookAtMatrix 作为单位矩阵传入,则场景会正确渲染,但是使用上面的代码将矩阵设置为...
导致一个空白的场景。场景是在 X/Y 上绘制的 10x10 网格,因此我一直期待场景的缩小视图。
(我玩过行和列,但我 99.9% 确信它们很好,因为透视矩阵很好)
c++ - opengl 在屏幕上渲染之前旋转对象以设置其正确的面
我正在使用 GLM 库通过 opengl 中的 obj 文件加载对象,但它在屏幕上颠倒显示。我还为用户提供了一种功能,因此他也可以通过鼠标相应地旋转所有对象。例如放大和放大并随 y 轴旋转。
问题是我不知道如何首先旋转对象以根据我的需要制作它的脸。之后我想绘制这个对象,然后鼠标可以发挥它的作用来旋转它。
我的绘图函数包含以下代码
这里的旋转功能都依赖于鼠标的移动,但是如果它被颠倒加载,我不知道如何首先让我的对象面向正确的方向,然后在这个绘图函数中允许它......这意味着我需要在调用它之前设置它的面绘图功能。
c++ - glm VECTORIZE2_VEC 重新定义 XCode 警告
我只在 XCode 中不断收到有关重新定义 glm 中的某些宏的警告。这不是一个大问题,但我发现警告很烦人。
如果我在罪魁祸首宏上放置一个#ifndef 块,但整个系统将无法工作?我将它们包含在一个静态库中,该库链接到一个也包含它们的应用程序。我虽然这可能是问题,所以我将它从两者之一中删除,看看它是否有帮助。它没有。
在 Windows 上使用 mingw g++ 时不会出现此警告,但在 Xcode 4 中会出现此警告。我使用的是 glm 版本 0.9.3.4。
警告:
这重复了数百次。
罪魁祸首代码(取自 glm 文件 _vectorize.hpp):
还有一些其他的宏与这个非常相似。
c++ - GLM 中的模型矩阵
我从自己的矩阵/向量操作迁移到 GLM,但我不明白一件事。
OpenGL 中的模型矩阵 - model_matrix = scale_matrix * rotate_matrix * translate_matrix,所以我们首先平移然后旋转,最后缩放。但是后来我尝试在 GLM 中这样做,只有当我使用逆序乘法(平移 * 旋转 * 缩放)时,它才会在正确的位置显示四边形,但对于 MVP 矩阵(投影 * 视图 * 模型)应该可以正常工作。
示例代码
顶点着色器
c++ - 旋转对象及其“子对象”
现在我正在旋转一个对象,我们称它为“mainBody”,但连接到 mainBody 的是几个附件,当我旋转我的 mainBody 时,它们也应该旋转,但现在它们没有。我没有使用父/子系统。主体有一个附件数组,并在 mainBody 绘制函数中绘制它们。
主体中的 glPopMatrix() 是在绘制设备项目后完成的。
我知道我过去用 pushMatrix(); 设法做到了这一点。和弹出矩阵();但现在它似乎不起作用。
我正在使用 c++、opengl 和 glm。
这是一些代码,向您展示了我现在拥有的内容:
和 glm 代码
以及绘制设备代码
c++ - 相机跟随播放器opengl
我一直在研究这个问题一段时间,但我找不到解决方案。现在我的相机正确地跟随玩家的位置,但是相机的旋转出错了。如果我只使用一次旋转,它会正确运行,比如我只沿 x 轴旋转,那么它可以正常工作。但是第二次我添加了另一个旋转,说“y”出了问题,相机开始朝错误的方向看。
现在我的相机只有一个位置和一个旋转。
这是一些代码。
也知道我正在使用 opengl、c++ 和 glm。
opengl - 如何通过 glm::mat4 转换 glm::vec3
我想用(camera.rotationMatrix)转换glm::vec3
(glm::mat4
camera.target)。我尝试乘以这给我一个错误:错误:'originalTarget * 中的'operator*' 不匹配((Camera*)this)->Camera::rotationMatrix
。我想我不能乘以 vec3 * mat4。GLM 是否有一些功能可以改变这一点?其他方式进行转换?
编码: