我想用opengl转换对象画一个花园。起初我已经开始绘制花瓣,我希望它旋转以便创建花朵,但是当我使用glRotatef()
时,我再也看不到它了。
这是我的代码的一部分:
const float DEG2RAD = 3.14159 / 180;
void init(void)
{
glClearColor(0.0, 0.0, 0.0, 1.0);
glClear(GL_COLOR_BUFFER_BIT);
glMatrixMode(GL_PROJECTION);
glLoadIdentity();
gluOrtho2D(0.0, 400.0, 0.0, 400.0);
glMatrixMode(GL_MODELVIEW);
}
void petal(void)
{
float x, y, z;
float A = 20;
float t;
glColor3f(1.0, 0.0, 0.0);
glPointSize(2);
glLoadIdentity();
glRotatef(90.0, 0.0, 0.0, 0.5);
glTranslatef(10,10, 0);
glBegin(GL_POINTS);
t = 0;
while (t < 90)
{
x = A*sin(2 * t*DEG2RAD)*cos(t*DEG2RAD);
y = A*sin(2 * t*DEG2RAD)*sin(t*DEG2RAD);
z = 0;
glVertex3f(x, y, z);
t++;
}
glEnd();
glFlush();
}
int main(void)
{
glutInitDisplayMode(GLUT_SINGLE | GLUT_RGB);
glutInitWindowPosition(200, 100);
glutInitWindowSize(600, 600);
glutCreateWindow("Garden");
init();
glClear(GL_COLOR_BUFFER_BIT);
glutDisplayFunc(petal);
glutMainLoop();
return 0;
}
答案 0 :(得分:3)
我能够编译并测试您的完整代码。错误在于petal
:
glRotatef(90.0, 0.0, 0.0, 0.5);
glTranslatef(100,100, 0);
这将首先将花瓣朝向窗口中心平移,然后围绕左下角(由gluOrtho2D
设置的原点)旋转90°。结果,花瓣走出窗外。您只需要交换两个电话:
glTranslatef(100,100, 0);
glRotatef(90.0, 0.0, 0.0, 1.0);
然后花瓣首先围绕原点旋转(这是它的尖端),然后翻译到中心。
作为旁注,看起来你忘了在使用GLUT之前调用glutInit(&argc, argv)
,我在运行时遇到了一个硬错误。