我是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);
答案 0 :(得分:0)
问题在于所有箭头的绘制方向都相同。 您想要做的是使箭头旋转一定角度。
每个箭头的角度必须取决于循环(i
)的控制变量。 2个箭头之间的角度为360.0/n
,箭头的角度为360.0*i/n
:
glRotatef(angle+(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();
答案 1 :(得分:0)
for (int i = 0; i < n; i++)
{
green += color;
blue -= color;
angle += 360 / n;
glPushMatrix();
glRotatef(angle, 0.0f, 0.0f, 1.0f);
glColor3f(0.0, green, blue);
drawArrow();
glPopMatrix();
}