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