gpt4 book ai didi

c++ - OpenGL - 这是在舞台上绘制旋转环的正确方法吗?

转载 作者:太空宇宙 更新时间:2023-11-04 12:13:32 24 4
gpt4 key购买 nike

我已经创建了旋转的 wrings 并将它们放在舞台上,它们都可以旋转,但只是想知道这是正确的方法还是有更简单的方法

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();

最佳答案

首先:您知道您正在使用已弃用的 OpenGL 命令,对吗?我知道出于学习 OpenGL 的目的,1/2 就可以了,但您仍然应该知道哪些功能已弃用(矩阵堆栈,我认为 glut 使用即时模式)。

假设您这样做纯粹是为了教育目的:如果它保持那么简单就很好,但如果它是更大程序的一部分,那么您可能应该概括。

为了清楚起见,您可以将该代码放入一个函数中,例如:

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 值。此外,所有这些硬编码值(颜色、位置、大小、 vector )在我看来仅在测试程序中是可以容忍的。对于较大的项目,应使用场景描述格式。

但是对于包含大量元素的更大场景,非常推荐使用场景图结构。此外,如果它到达那个区域,那么您应该将动画速度与绘制时间分离,并引入一个 tick() 函数,该函数根据耗时更新动画.如果您要做到这一点,那么您不妨将它移植到更现代的 OpenGL 版本。

关于c++ - OpenGL - 这是在舞台上绘制旋转环的正确方法吗?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/8752937/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com