在自己的轴上旋转单个模型的矩阵
Rotate matrix of single model on its own axis
我目前有5个模型显示在屏幕上,我想做什么。下面是我的顶点着色器,用于单独转换模型,以便我可以让它们在不同的方向上移动:
#version 330
layout (location = 0) Position;
uniform mat4 MVP;
uniform vec3 Translation;
uniform mat4 Rotate;
void main()
{
gl_Position = MVP * * Rotate * vec4(Position + Translation, 1.0); // Correct?
}
以及在渲染循环中单独定位/移动我的模型:
//MODEL ONE
glUniform3f(loc, 0.0f, 4.0f, 0.0f); // loc is "Translate"
glUniformMatrix4fv(loc, 1, GL_FALSE, glm::value_ptr(rotationMatrix)); // loc is "Rotate"
_model1.render();
我也有一个glm::mat4 rotatemmatrix()返回旋转。但是当我将它与渲染循环中的其他矩阵相乘时,整个场景(减去摄像机)旋转到设定的角度。
我如何能够将我的旋转应用到模型上,而不依赖于它们自身轴上的世界?现在的问题是模型旋转,但从0,0,0的世界,而不是它自己的位置。
你的顶点着色器有几个语法错误:
- 没有
Position
变量的类型。从上下文中看,它应该是vec3
。 -
MVP
后两个*
标志
我认为那只是复制代码时的一个意外,你实际上有一个编译的顶点着色器。
要在从Translation
向量转换之前应用Rotate
矩阵描述的旋转,您应该能够简单地改变顶点着色器中的顺序:
vec4 rotatedVec = Rotate * vec4(Position, 1.0);
gl_Position = MVP * vec4(rotatedVec.xyz + Translation, 1.0);
如果您将Rotate
定义为3x3矩阵,则整个事情看起来会更简单,这足以进行旋转。
相关文章:
- QTableView:endMoveRows在模型中重置水平页眉大小
- 如何将一个ostringstream十六进制字符串字符对转换为单个unit8t等价的二进制值
- 多个If语句与使用逻辑运算符计算条件的单个语句的比较
- 将IBM Rhapsody模型集成到VS 2019中
- 旋转模型矩阵时的形状失真
- 成员函数调用和C++对象模型
- 连接 dockerized 模型和 dockerized 数据库时出现"无法 SQLConnect"错误
- 打印 ONNXRUNTIME::图形没有模型
- Eclipse CDT:单个项目中有多个C++文件
- 为什么我们将单个或多维数组的大小声明为常量值?
- C++内存模型和位字段的最大序列
- C++调用具有 *this 属性的单个帮助程序函数
- 使用SIR模型的疾病爆发模拟
- 如何读取单个字符并在输入两个字符序列时输出? 使用 while 循环和C++
- 如何将可变参数模板转换为多个单个模板?(C++竞争编程调试模板)
- 将多个 for 循环组合成单个迭代器
- 如何将多种语言设置放在单个 .clang 格式文件中
- 我们可以将阈值应用于色彩空间模型的单个组件(如 RGB 和 LAB)吗?
- 从QStringListModel作为模型的QListview中删除单个项目
- 在自己的轴上旋转单个模型的矩阵