在opengl中应用转换函数后,对象未显示

时间:2016-05-27 07:36:04

标签: c++ opengl transformation

我想用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;
}

1 个答案:

答案 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),我在运行时遇到了一个硬错误。