C++ 在OpenGL中旋转多个形状
我使用的是OpenGL,有一个由球体连接的圆柱体堆栈,我想旋转它 我正在做一种“管道”的东西,希望旋转是平滑的,所以当底部圆柱体旋转时,顶部圆柱体会相应地移动,但是顶部圆柱体可以旋转而不移动底部圆柱体 唯一的问题是我想以此为基础,但即使现在只有圆柱体,我也无法让顶部旋转而不移动整个物体 我的代码是:C++ 在OpenGL中旋转多个形状,c++,opengl,rotation,C++,Opengl,Rotation,我使用的是OpenGL,有一个由球体连接的圆柱体堆栈,我想旋转它 我正在做一种“管道”的东西,希望旋转是平滑的,所以当底部圆柱体旋转时,顶部圆柱体会相应地移动,但是顶部圆柱体可以旋转而不移动底部圆柱体 唯一的问题是我想以此为基础,但即使现在只有圆柱体,我也无法让顶部旋转而不移动整个物体 我的代码是: void draw_cylinder(float translate_x, float translate_y, float angle1) { GLUquadricObj *qobj = gluN
void draw_cylinder(float translate_x, float translate_y, float angle1) {
GLUquadricObj *qobj = gluNewQuadric();
//first cylinder
glPushMatrix();
glTranslatef(translate_x, translate_y-0.5, 0.0);
glRotatef(angle1, 0.0, 0.0, 1.0);
glPushMatrix();
glRotatef(90.0, -45.0, 0.0, 0.0);
gluCylinder(qobj, 1.0, 1.0, 10.0, 20, 20);
gluQuadricOrientation (qobj, GLU_INSIDE);
gluDisk(qobj, 0.0, 1.0, 20, 20);
glTranslatef(0.0, 0.0, 10.0);
gluQuadricOrientation (qobj, GLU_OUTSIDE);
gluDisk(qobj, 0.0, 1.0, 20, 20);
glPopMatrix();
glPushMatrix(); //Connecting sphere
glTranslatef(translate_x, translate_y+10.5, 0.0);
glutSolidSphere(1,20,20);
glPopMatrix();
//second cylinder
glPushMatrix();
glTranslatef(translate_x, translate_y+11.3, 0.0);
glRotatef(angle2, 0.0, 0.0, 1.0);
glPushMatrix();
glRotatef(90.0, -45.0, 7.0, -7.0);
gluCylinder(qobj, 1.0, 1.0, 5.0, 20, 20);
gluQuadricOrientation (qobj, GLU_INSIDE);
gluDisk(qobj, 0.0, 1.0, 20, 20);
glTranslatef(0.0, 0.0, 5.0);
gluQuadricOrientation (qobj, GLU_OUTSIDE);
gluDisk(qobj, 0.0, 1.0, 20, 20);
glPopMatrix();
glPopMatrix();
glPopMatrix(); }
如果您有任何帮助,我们将不胜感激。我想您需要的是围绕不同的点旋转,而不是原点旋转。你可以查一下 就你而言: 当您想要旋转整个手臂时,请使用下圆柱体的底部中心点作为参考点,并将链接答案中的过程应用于所有圆柱体 当您想要旋转上臂时,请使用连接球体的中心作为参考点,并将链接答案的过程应用于上圆柱体
这听起来像是骨骼动画,对这个主题进行研究,你可能会得到你的答案