如何正确计算这个最终的一致矩阵
How do I correctly compute this final uniform matrix?
我试图了解矩阵变换是如何在opengl/glsl中工作的,我想知道如何制作一个具有每种缩放/旋转/平移潜力的4x4 id矩阵。
所以,在所有的绑定等等之后,我只需要均匀/输入1个矩阵来指定它的位置/自旋。
这个想法对我来说似乎是正确的,但我不知道如何让物体在不扭曲的情况下移动。它旋转得很好,而且可以缩放。
但是idk如何将转换应用于id矩阵(如果有意义的话)。无论如何,这是我的相关代码:
//update matrix
glUniformMatrix4fv(transform, 1, GL_FALSE, glm::value_ptr(ident));
//spin according to z
void object::spinz(float a) { ident = glm::rotate(ident, a, glm::vec3(0.0f, 0.0f, 1.0f)); }
这将修改我的
glm::mat4 ident();//id matrix
但当我试着给它翻译时:
void object::translate(float x, float y, float z);
该方法本身只会扭曲对象/矩阵/结果
ident += glm::vec4(x, y, z, 0);
我做错了什么?我是否应该尝试只有一个统一的输入?
解决方案:翻译的想法是错误的。一个正确的看起来更像这样:(但主要是对每个对象单独执行)
glm::mat4 test = glm::translate(glm::mat4(1.0f), glm::vec3(x, y, z));
finaluniformmatrix *= test;
或者基本上做一个唯一的平移矩阵,然后乘以整个投影*视图矩阵。
编辑:一个更便宜的翻译是:
matrix[3][0]=x;matrix[3][1]=y;matrix[3][2]=z; //where xyz are xyz coordinates.
ps:为什么我得到了反对票?这是我发现(一段时间前),你需要一个唯一的单位矩阵来渲染单独的对象,而不仅仅是一个相同的矩阵。(比如混合投影、视图、标识,为每个对象添加它们)
您可以使用多个单独的矩阵运算,并将它们相乘,将它们转换为指定整个运算的单个矩阵。任何数量的4x4矩阵都可以相乘,并且阶数很重要。
还要注意不均匀的缩放和旋转,这有时会产生"扭曲"对象的效果。
您可以非常简单地构建平移、旋转-x、旋转y-、旋转-z和缩放4x4矩阵,并将它们相乘以创建单个矩阵。
http://www.flipcode.com/documents/matrfaq.html#Q11
http://www.flipcode.com/documents/matrfaq.html#Q41
我不确定你使用的代码是什么——我建议从一开始就只使用4x4矩阵和乘法运算。
- 为什么我必须添加一个小数才能在C++中正确计算此数学
- 为什么程序没有正确计算值
- 如何在 C++ 中使用 if-then 语句正确计算用户输入
- 我需要知道如何正确计算平均值和偏差
- 无法让我的递归函数正确计算字符串中的字母(c ++)
- 无法正确计算公式
- C++ 时间机器无法正确计算经过的时间量
- C++ctime.h将无法正确计算时间
- GCD程序如何正确计算结果
- Openmp:无法正确计算并行 for 循环内作业的状态
- 如何使用C++正确计算BMP图像中每像素的字节数
- C 正确计算总和
- 程序未正确计算减法
- 如何改进我的代码以正确计算唯一行数
- C++,A* 搜索程序无法正确计算到出口的距离
- C++如何正确计算常量字符中的字符数
- 如何正确计算这个最终的一致矩阵
- 这就是你如何正确计算Vector3 Transform和TransformCoordinate的方法吗?
- 阶乘在main中显示错误的答案.在函数中正确计算
- 无法使程序正确计算