现代Opengl:旋转长方体,使其在长方体的一端具有枢轴

时间:2019-10-24 01:51:59

标签: opengl matrix rotation transformation glm-math

enter image description here

所以,我用这个画了一个黄色的长方体

 from    to value
   <dbl> <dbl> <dbl>
 1     0     0     7
 2     1     0     8
 3     2     0     6
 4     3     0     6
 5     4     0     6
 6     5     1     7
 7     6     1     6

比例因子 ID Industry1 <dbl> <chr> 1 0 Footwear manufacturing 2 1 Footwear manufacturing 3 2 Footwear manufacturing 4 3 Footwear manufacturing 5 4 Footwear manufacturing 6 5 Seafood & other miscellaneous foods, n.e.c. 和位置glm::mat4 yellow_bone_obj_mat = m_bone_animation->get_yellow_mat(); glUniformMatrix4fv(glGetUniformLocation(shader.program, "model"), 1, GL_FALSE, glm::value_ptr(yellow_bone_obj_mat)); bone_obj->obj_color = m_bone_animation->colors[1]; draw_object(shader, *bone_obj);

我希望我的黄色长方体向右旋转90度,而黄色长方体的末端位置要粘住红色立方体

应该看起来像这样

enter image description here

我尝试过

{ 0.5f,4.0f,0.5f }

将此作为输出

enter image description here

接下来我尝试了

{ 2.0f,3.0f,2.0f }

enter image description here

将此作为输出。无论我做什么,长方体都不会掉在右侧。我不确定为什么

1 个答案:

答案 0 :(得分:1)

您实际要做的是旋转完美的立方体并缩放旋转的立方体。旋转了多维数据集,但之后应用了缩放比例,因此它似乎总是朝向相同的方向。

您必须缩放立方体,然后旋转长方体:

m_yellow_mat = translate(pivot) * rotate * translate(-pivot) * scale

请注意,诸如rotatescaletranslate之类的操作会创建一个新矩阵,并将当前矩阵乘以新矩阵。例如:

vec3 scale = glm::vec3(0.5f, 4.0f, 0.5f);
vec3 pivot = glm::vec3(0.0f, 0.5f, 0.0f);

m_yellow_mat = glm::mat4(1.0f);

m_yellow_mat = glm::translate(m_yellow_mat, pivot);
m_yellow_mat = glm::rotate(m_yellow_mat, glm::radians(angle), glm::vec3(0, 0, 1));
m_yellow_mat = glm::translate(m_yellow_mat, -pivot);
m_yellow_mat = glm::scale(m_yellow_mat, scale);