用VC作的一个程序,要实现在窗口画一个图形,这个图形是由一些小矩形构成的。每个小矩形的数据结构:左上角坐标(x1,y1)和右下角坐标(x2,y2)均已知。
   我用OPENGL去画图,由于OPENGL的坐标系跟VC窗口坐标系不是一回事,我的思路是:以其中一个小矩形作为基准,用OPENGL函数画出与其等宽高的矩形,并投影到窗口。其它的小矩形则根据它与基准矩形左上角点的相对位移,在画好后作相应的glRotatef变换再投影到窗口。这样所有矩形画好后应该就能组成完整的图形了(虽然不能实现窗口坐标的绝对一样,矩形间的相对位置还是可以实现)。
   可是我画出后的整体结果却完全不是那么回事(很乱),还会出现一个大的白色矩形(即使不画任休东西只简单调用glFlush)。   不知道各位做过象这样要求的图形没,还请大家给点思路。

解决方案 »

  1.   

    glBegin(GL_QUADS);
    glVertex3d(...);
    ...
    glEnd();
      

  2.   

    做glRotatef变换之前需要glPushMatrix();
    做完之后需要glPopMatrix();
    不知道你做了没有?
      

  3.   

    应该不存在着这样的问题吧
    我在每次调用glTranslatity()前都会调用glLoadIdentity()把当前矩阵设为单位阵的。
    即:
    glLoadIdentity();
    glTranslatity(......);
    draw_rect(x1,y1,x2,y2);draw_rect()为:
    glBegin(GL_QUADS);   //绘画一矩形
    glVertex2f( y1-y2, 0);   //左上顶点
    glVertex2f( 0, 0);  //左下顶点
    glVertex2f( x2-x1, 0);  //右下顶点
    glVertex2f( x2-x1, y1-y2);  //右上顶点
    glEnd();