C++ 如何在OpenGL中旋转gluCynlinder?

C++ 如何在OpenGL中旋转gluCynlinder?,c++,opengl,glut,C++,Opengl,Glut,在上下文中,我尝试在OpenGL中对一个简单的1x1乐高积木进行建模。我将相机设置为查看原点,“向上”位于Y方向。我试着画一个圆柱体来代表立方体上的小突起,但我不知道如何旋转它。C++代码: //draw cylinder glPushMatrix(); glTranslated(0.0, 0.4 , 0.0); //glRotatef(angle, 1.0f, 0.0f, 0.0f); GLUquadricObj * qobj = gluNewQuadric(); gluCylinder

在上下文中,我尝试在OpenGL中对一个简单的1x1乐高积木进行建模。我将相机设置为查看原点,“向上”位于Y方向。我试着画一个圆柱体来代表立方体上的小突起,但我不知道如何旋转它。C++代码:

//draw cylinder
glPushMatrix();
glTranslated(0.0, 0.4 , 0.0);
//glRotatef(angle, 1.0f, 0.0f, 0.0f);   
GLUquadricObj * qobj = gluNewQuadric();
gluCylinder(qobj, 0.24, 0.24, 0.18, 16, 16);
glPopMatrix();
我试图将它绕x轴旋转90度,但glRotatef似乎没有做任何事情,或者只是使整个东西消失。我错过了什么?

对我来说效果很好:

glPushMatrix();
GLUquadricObj * qobj = gluNewQuadric();
glTranslated(0.0, 0.4 , 0.0);
glRotatef(angle * 10, 0.0f, 1.0f, 0.0f);   
gluCylinder(qobj, 1.24, 1.24, 1.18, 16, 16);
gluDeleteQuadric(qobj);
glPopMatrix();
无论我使用的是glRotate和glTranslate的哪个顺序。

对我来说都很有效:

glPushMatrix();
GLUquadricObj * qobj = gluNewQuadric();
glTranslated(0.0, 0.4 , 0.0);
glRotatef(angle * 10, 0.0f, 1.0f, 0.0f);   
gluCylinder(qobj, 1.24, 1.24, 1.18, 16, 16);
gluDeleteQuadric(qobj);
glPopMatrix();

无论我使用的是glRotate和glTranslate的哪个顺序。

我将顺序更改为更接近此顺序,效果更好。我仍然遇到一个问题,最初没有画任何东西,然后当我点击其中一个相机控件时,圆柱体弹出…没有。控制流是问题所在。在所有渲染之前,您需要-创建二次曲面对象一次,-每帧调用其余函数(从glPushMatrix到GLPOPMARRIX)。我认为这肯定是相机的问题-“最初没有绘制任何内容,然后当我点击其中一个相机控件时,圆柱体会弹出”。我可以假设摄像机从一开始就没有指向圆柱体。@shybovycha:你是在WindowsVista或Windows7下运行的吗?我看到OpenGL的输出最初没有出现一些问题,但是当重新绘制时,它突然出现了——但是如果你禁用DWM(桌面窗口管理器),一切都很好。@Jerry我的系统是Win7 x64。现在我在Ubuntu下,如果你想的话,我可以测试你的代码=)我把顺序改成更接近这个的,效果更好。我仍然遇到一个问题,最初没有画任何东西,然后当我点击其中一个相机控件时,圆柱体弹出…没有。控制流是问题所在。在所有渲染之前,您需要-创建二次曲面对象一次,-每帧调用其余函数(从glPushMatrix到GLPOPMARRIX)。我认为这肯定是相机的问题-“最初没有绘制任何内容,然后当我点击其中一个相机控件时,圆柱体会弹出”。我可以假设摄像机从一开始就没有指向圆柱体。@shybovycha:你是在WindowsVista或Windows7下运行的吗?我看到OpenGL的输出最初没有出现一些问题,但是当重新绘制时,它突然出现了——但是如果你禁用DWM(桌面窗口管理器),一切都很好。@Jerry我的系统是Win7 x64。现在我在Ubuntu下,如果你愿意,我可以测试你的代码=)