我创造了旋转扭曲并将它们放置在舞台上,它们都旋转它工作鳍但只是想知道这是否是一种正确的方式,或者是否有更简单的方法
glPushMatrix();
glColor3ub(0,0,255);
glTranslatef(110.0f,30.0f,-30.0f);
glRotatef(torusRotation1,0.0f, 1.0f, 0.0f);
glutSolidTorus(5.0, 30.0, 50, 50);
torusRotation1+= -1.0f;
if(torusRotation1 > 360.0f)
{
torusRotation1 = 0.0f;
}
glPopMatrix();
glPushMatrix();
glColor3ub(0,0,255);
glTranslatef(80.0f,-80.0f,0.0f);
glRotatef(torusRotation2,0.0f, 1.0f, 0.0f);
glutSolidTorus(5.0, 30.0, 50, 50);
torusRotation2+= 1.0f;
if(torusRotation2 > 360.0f)
{
torusRotation2 = 0.0f;
}
glPopMatrix();
答案 0 :(得分:1)
首先关闭:您知道您使用的是弃用的OpenGL命令,对吗?我知道,为了学习OpenGL 1/2的目的很好,但你仍然应该知道哪些功能被弃用(矩阵堆栈,我认为过剩使用立即模式)。
假设你纯粹出于教育目的而这样做:如果它保持那么简单那么它没关系,但如果它是一个更大的程序的一部分那么你应该概括。
为清楚起见,您可以将该代码放入函数中,例如:
drawRing(GLfloat px,GLfloat py,GLfloat pz,GLfloat &rotation)
{
glPushMatrix();
glColor3ub(0,0,255);
glTranslatef(px,py,pz);
glRotatef(rotation,0.0f, 1.0f, 0.0f);
glutSolidTorus(5.0, 30.0, 50, 50);
rotation+= -1.0f;
if(rotation > 360.0f)
{
rotation = 0.0f;
}
glPopMatrix();
}
但请注意,您更改了该函数中的rotation
值。所有这些硬编码值(颜色,位置,大小,向量)都只能在测试程序中容忍。对于较大的项目,应使用场景描述格式。
但是对于具有大量元素的大型场景,非常推荐场景图结构。此外,如果它到达那个区域,那么你应该将动画速度与绘制时间分离并引入一个tick()
函数,该函数相对于已经过去的时间更新动画。如果你把它拿走那么远,你可以把它移植到更现代的OpenGL版本。