Warning: file_get_contents(/data/phpspider/zhask/data//catemap/6/opengl/4.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
OpenGL旋转无法正常工作_Opengl_Graphics_Rotation - Fatal编程技术网

OpenGL旋转无法正常工作

OpenGL旋转无法正常工作,opengl,graphics,rotation,Opengl,Graphics,Rotation,我有3个函数,它们应该正确地执行三角形的旋转,但它不正确。我的想法是,如果我想围绕三角形的中心旋转三角形,我应该将三角形原点转换为0,0,0,这会translateTorigen,然后使用rotate执行旋转,然后使用translateBacktoPosition将三角形平移回其原始位置: void Triangle::rotate(float angle,glm::vec3 axis) { translateToOrigen(); modelMatrix = glm::rota

我有3个函数,它们应该正确地执行三角形的旋转,但它不正确。我的想法是,如果我想围绕三角形的中心旋转三角形,我应该将三角形原点转换为0,0,0,这会
translateTorigen
,然后使用
rotate
执行旋转,然后使用
translateBacktoPosition
将三角形平移回其原始位置:

void Triangle::rotate(float angle,glm::vec3 axis) {
    translateToOrigen();
    modelMatrix = glm::rotate(modelMatrix, glm::radians(angle), axis);
    translateBacktoPosition();
}

void Triangle::translateToOrigen() {
    modelMatrix = glm::translate(modelMatrix, -_origen);
}

void Triangle::translateBacktoPosition() {
    modelMatrix = glm::translate(modelMatrix, _origen);
}
我这样调用
旋转
-函数:

t1.rotate(-90.0f, glm::vec3(0, 0, 1));
我是怎么理解的,这应该把我的三角形绕z轴旋转-90度。 但实际发生的是,我的三角形被拉伸了,没有显示在正确的位置。 我已经测试了
translateToOrigen()
translateBacktoOrigen()
它们工作得很好,直到我尝试旋转

我将所有矩阵保存在变量modelMatrix中,当完成平移和旋转后,我将通过uniform发送到着色器,在那里我将该矩阵与顶点相乘


我不明白我遗漏了什么。

请显示调用此函数的代码。您可能会以错误的顺序进行乘法。
rotate
调用函数,我没有乘法错误,因为我将传递整个矩阵,然后将其传递给着色器,并且我尝试将对象直接放置在(0,0)中,旋转仍然不起作用。可能是因为我在2d空间?我计算了旋转矩阵与我的顶点叠加的结果,结果很好,所以可能是投影问题?对不起。过度阅读函数。这不是关于乘法的正确性,而是关于它们的顺序。您必须考虑从后面到前面的转换,这意味着您必须交换两个translate调用。此外:glm默认采用度数,而不是弧度。是的,我知道这一点,但我认为这并不重要,因为我在将模型矩阵上传到着色器之前计算了它。仍然是thx供您回答。请显示调用此函数的代码。您可能会以错误的顺序进行乘法。
rotate
调用函数,我没有乘法错误,因为我将传递整个矩阵,然后将其传递给着色器,并且我尝试将对象直接放置在(0,0)中,旋转仍然不起作用。可能是因为我在2d空间?我计算了旋转矩阵与我的顶点叠加的结果,结果很好,所以可能是投影问题?对不起。过度阅读函数。这不是关于乘法的正确性,而是关于它们的顺序。您必须考虑从后面到前面的转换,这意味着您必须交换两个translate调用。此外:glm默认采用度,而不是弧度。是的,我知道这一点,但我认为这并不重要,因为我在上传到着色器之前计算了modelmatrix。您的答案仍然是thx