OpenGL从1.0开始--二维几何变换

在我们在做图形显示时,实际上我们不是对每一个图形都去从头开始绘制,对于形状相同或相似的图案,我们可以运用几何变换函数提高效率。我们看一看一个简单的示例。

#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,始终是右乘,最先应用的变换是程序中最后指定的。

  • 0
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值