用OpenGL将立方体置换为原点

用OpenGL将立方体置换为原点,opengl,graphics,points,glm-math,Opengl,Graphics,Points,Glm Math,我在一个64x64x64立方体里画了一堆点,但我不知道如何置换原点,以便围绕立方体的中心旋转。 我的顶点数据存储在一维数组中,从{(0,0,0),(0,0,1),…,(63,63,63)}开始 这是我当前设置每帧矩阵的代码: // Set ProjectionMatrix projectionMatrix = glm::perspective(90.0f, (GLfloat)width / (GLfloat) height,0.1f, 1000.f); glUniformMatrix4fv(lo

我在一个64x64x64立方体里画了一堆点,但我不知道如何置换原点,以便围绕立方体的中心旋转。 我的顶点数据存储在一维数组中,从{(0,0,0),(0,0,1),…,(63,63,63)}开始

这是我当前设置每帧矩阵的代码:

// Set ProjectionMatrix
projectionMatrix = glm::perspective(90.0f, (GLfloat)width / (GLfloat) height,0.1f, 1000.f);
glUniformMatrix4fv(location_projectionMatrix, 1, GL_FALSE, glm::value_ptr(projectionMatrix));

// Set ModelViewMatrix
glm::mat4 identity = glm::mat4(1.0);
glm::mat4 viewTranslate = glm::translate(identity, glm::vec3(0.0f, 0.0f, -translate_z));
glm::mat4 viewRotateX   = glm::rotate(viewTranslate, rotate_x, glm::vec3(1.0f, 0.0f, 0.0f));
glm::mat4 viewRotateY   = glm::rotate(viewRotateX, rotate_y, glm::vec3(0.0f, 1.0f, 0.0f));
modelViewMatrix = viewRotateY;
glUniformMatrix4fv(location_modelViewMatrix, 1, GL_FALSE, glm::value_ptr(modelViewMatrix));

我试图将立方体按-32转换为x和y方向,但没有成功

矩阵运算是非交换的。这意味着先平移再旋转与先旋转再平移不同。通常顺序是:缩放->旋转->平移。 因此,请尝试以下方法:

glm::mat4 viewRotateX   = glm::rotate(identity, rotate_x, glm::vec3(1.0f, 0.0f, 0.0f));
glm::mat4 viewRotateY   = glm::rotate(viewRotateX, rotate_y, glm::vec3(0.0f, 1.0f, 0.0f));
glm::mat4 viewTranslate = glm::translate(viewRotateY   , glm::vec3(0.0f, 0.0f, -translate_z));

你说没有成功是什么意思?立方体被取代了,但不是以我想要的方式。旋转和缩放应该与立方体的中心相关,目前这个原点是其中一个角。所以先平移一半大小。正如我所说的…这就是我尝试的。我只是用-dimensionX/2和-dimensionY/2替换了平移向量的前两个分量。结果是立方体现在已正确放置,但旋转点仍然相同。我想围绕立方体的中心旋转。
glm::rotate(viewtranse,
对我来说看起来很糟糕。无论如何,它应该会改变,所以我只需重新检查代码。是的,忘了这一点。现在,当我将平移向量的组件替换为(-dimx/2,-dimy/2,-dimz/2)时,我可以将原点移到立方体的中心.现在的问题是如何使用它,并且仍然能够放大和缩小。我不知道将“translate_z”参数放在哪里。