简单二维几何变换
1. 回顾gluOrtho和glViewport
在OpenGL中,gluOtho和glViewport 为两个比较重要的投影变换函数。
-gluOrtho 是创建一个正交平行的视影体的矩阵,并把它与当前矩阵相乘,裁剪出要显示的部分。例如你画出了一个半径为1,中心点在圆点的二维图形圆形,gluOrtho2D作用在了 (0,1,0,1)。则最终显示了个1/4圆形。
-glViewport 则是定义了像素矩阵,最终图像将映射到该矩阵。例如,上面那个1/4圆形原本是显示在左下角,如果我们将glViewport 定义在(0,1,1,1),则该1/4圆形显示在了窗口的左上角。
简单来说: gluOrtho定义了显示的内容,glVieport则设置了显示的位置。
更详细内容:
http://www.cnblogs.com/yxnchinahlj/archive/2010/10/30/1865298.html
http://blog.csdn.net/lingedeng/article/details/7302204
2. 简单二维几何变换
简单二维几何的变换,可以通过 坐标变换 或 矩阵变换。两个方法各有长处,具体使用看实际情况。
下面是平移,旋转,缩放的简单二维图形变换。
#include <gl\glut.h>
#include <iostream>
using namespace std;
//transilate时,x,y上的增量
float i = 0,j=0;
//rotate时的角度增量
GLint angle=0;
//scale时,x,y上的增量
float s1 = 1, s2 = 1;
void init()
{
glClearColor(1.0f, 1.0f, 1.0f, 1.0f);
glMatrixMode(GL_PROJECTION);
gluOrtho2D(0.0, 600.0, 0.0, 600.0);
}
void display()
{
glClear(GL_COLOR_BUFFER_BIT);
glMatrixMode(GL_MODELVIEW);
glLoadIdentity();
glTranslatef(300+i, 300+j, 0);
glRotatef(angle % 360, 0, 0, 1);
glScalef(s1, s2, 0);
glColor3f(0, 0.6, 0.5);
glRectf(-100, 100, 100, -100);
glFlush();
glutSwapBuffers();
}
void keyboard(uns