概述
在我们在做图形显示时,实际上我们不是对每一个图形都去从头开始绘制,对于形状相同或相似的图案,我们可以运用几何变换函数提高效率。我们看一看一个简单的示例。
#include <Gl/glut.h>
void init()
{
glClearColor(0.0, 0.0, 0.0, 0.0);
glMatrixMode(GL_PROJECTION);
gluOrtho2D(-400.0, 400.0, -300.0, 300.0);
}
void lineSegment()
{
glClear(GL_COLOR_BUFFER_BIT);
glMatrixMode(GL_MODELVIEW);//应用建模观察矩阵
glColor3f(0.0, 0.0, 1.0);
glRecti(50, 100, 200, 150);//第一个蓝色矩形
glColor3f(1.0, 0.0, 0.0);
glTranslatef(-200.0, -50.0, 0.0);//位移
glRecti(50, 100, 200, 150);//第二个红色矩形
glColor3f(0.0,1.0, 0.0);
glLoadIdentity();//设定当前矩阵为单位矩阵
glRotatef(90.0, 0.0, 0.0, 1.0);//绕三维轴旋转90度
glRecti(50, 100, 200, 150);//第三个绿色矩形
glColor3f(1.0, 1.0, 0.0);
glLoadIdentity();
glScalef(-0.5, 1.0, 1.0);//缩放0.5倍,水平方向镜像
glRecti(50, 100, 200, 150);//第四个黄色矩形
glFlush();
}
void main(int argc, char**argv)
{
glutInit(&argc, argv);
glutInitDisplayMode(GLUT_SINGLE | GLUT_RGB);
glutInitWindowPosition(50, 100);
glutInitWindowSize(800, 600);
glutCreateWindow("An Example OpenGL Program");
init();
glutDisplayFunc(lineSegment);
glutMainLoop();
}
可以看到对图形做二维几何变换是比较简单的,我们也不再赘述了,大家自己去推导下数学过程。我们这里简答解释下OpenGL矩阵操作。
我们前面也已经接触过一些,OpenGL通过glMatrixMode(GL_MODELVIEW)指定当前矩阵为建模观察矩阵,除了建模观察模式外,还可以指定投影模式、纹理模式和颜色模式等。指定矩阵后,后面的OpenGL变换子程序都是对当前矩阵的修改,即调用变换子程序所生成的矩阵与该模式的当前矩阵相乘。
我们可以有两个函数可以对当前矩阵赋值。
glLoadIdentity();//设定当前矩阵为单位矩阵
glLoadMatrixf(elements16);//为当前矩阵赋予参数值。该数组元素按列优先顺序指定。
OpenGL支持矩阵乘法:
glMultMatrixf(M);
当前矩阵m=m*M。因为OpenGL采用栈的方式来存储矩阵,且为四种矩阵模式的每一种都指定一个栈,所以所有矩阵操作都是基于后进先出的原则进行操作。
glMultMatrixf(M2);
glMultMatrixf(M1);
则M=M*M2*M1,始终是右乘,最先应用的变换是程序中最后指定的。
最后
以上就是危机龙猫为你收集整理的OpenGL从1.0开始--二维几何变换的全部内容,希望文章能够帮你解决OpenGL从1.0开始--二维几何变换所遇到的程序开发问题。
如果觉得靠谱客网站的内容还不错,欢迎将靠谱客网站推荐给程序员好友。
本图文内容来源于网友提供,作为学习参考使用,或来自网络收集整理,版权属于原作者所有。
发表评论 取消回复