我是靠谱客的博主 危机龙猫,最近开发中收集的这篇文章主要介绍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,始终是右乘,最先应用的变换是程序中最后指定的。

最后

以上就是危机龙猫为你收集整理的OpenGL从1.0开始--二维几何变换的全部内容,希望文章能够帮你解决OpenGL从1.0开始--二维几何变换所遇到的程序开发问题。

如果觉得靠谱客网站的内容还不错,欢迎将靠谱客网站推荐给程序员好友。

本图文内容来源于网友提供,作为学习参考使用,或来自网络收集整理,版权属于原作者所有。
点赞(53)

评论列表共有 0 条评论

立即
投稿
返回
顶部