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

Object not shown after applying transformation functions in opengl

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

我能够编译和测试你的完整代码。错误在于 petal:

中的转换顺序
glRotatef(90.0, 0.0, 0.0, 0.5);
glTranslatef(100,100, 0);

这将首先将花瓣平移到 window 的中心,然后围绕左下角(gluOrtho2D 设置的原点)旋转 90°。结果,花瓣超出了 window。您只需交换两个调用:

glTranslatef(100,100, 0);
glRotatef(90.0, 0.0, 0.0, 1.0);

然后花瓣首先围绕原点(它的尖端)旋转,然后平移到中心。

附带说明一下,您似乎在使用 GLUT 之前忘记调用 glutInit(&argc, argv),我在运行时遇到了一个硬错误。