gpt4 book ai didi

c - for循环中的OpenGL glPushMatrix()和glPopMatrix

转载 作者:行者123 更新时间:2023-11-30 16:07:55 24 4
gpt4 key购买 nike

我是 OpenGL 新手,我要做这样的东西。问题是,循环似乎只调用一次,但我不知道为什么它变得像 that .

glDisable(GL_CULL_FACE);
int n = 32;
float angle = 0.0f;
float green = 0.0f;
float blue = 1.0f;
float color = 1.0/n;
glColor3f(0.0, 0.0, 1.0);
glTranslatef(0.0, 5.0, 0.0);
drawArrow();

for(int i = 0; i < n; i++){
green = green + color;
blue = blue - color;
glPushMatrix();
glRotatef(angle+(360/n), 0.0f, 0.0f, 1.0f);
glColor3f(0.0, green, blue);
drawArrow();
glPopMatrix();
}

glEnable(GL_CULL_FACE);

最佳答案

问题是所有箭头都以相同的方向绘制。你要做的就是将箭头的旋转向前推进一个角度。

每个箭头的角度必须取决于循环的控制变量 (i)。两个箭头之间的角度为 360.0/n,箭头的角度为 360.0*i/n:

glRotatef(角度+(360/n), 0.0f, 0.0f, 1.0f);

float partAngle = 360.0f * (float)i/(float)n;
glRotatef(angle + partAngle, 0.0f, 0.0f, 1.0f);
<小时/>

另一个选择是使用 glPushMatrix / glPopMatrix 。设置旋转角度后压入矩阵,因此循环中旋转增加360.0f/n:

glPushMatrix();
for(int i = 0; i < n; i++){
green = green + color;
blue = blue - color;

glRotatef(angle+(360.0f/n), 0.0f, 0.0f, 1.0f);

glPushMatrix();
glColor3f(0.0, green, blue);
drawArrow();
glPopMatrix();
}
glPopMatrix();

关于c - for循环中的OpenGL glPushMatrix()和glPopMatrix,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/59496693/

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