一段简单的绘制正方形的程序:
#include <gl/glut.h>void display()
{glClear(GL_COLOR_BUFFER_BIT);glBegin(GL_POLYGON);glVertex2f(-0.5,-0.5);glVertex2f(-0.5,0.5);glVertex2f(0.5,0.5);glVertex2f(0.5,-0.5);glEnd();glFlush();
}int main(int argc,char**argv)
{glutInit(&argc,argv);glutCreateWindow("test");glutDisplayFunc(display);glutMainLoop();return 0;
}运行之后可以得到这样的结果

上述程序中main()负责OpenGL的初始化,display()函数定义了要绘制的实体。

首先看main()函数

void glutInit(int* argc,char** argv)

初始化glut,应在其他glut函数和OpenGL函数之前调用。接受main函数的参数。

int glutCreateWindow(char* title)

在屏幕上创建一个窗口,该窗口的标题有title给出。

void glutDisplayFunc(void(*func(void)))

函数func()在每次需要对窗口重绘时被调用。

void glutMainLoop();

使程序进入无限事件处理循环。

在看看display()函数里面的内容

void glClear(GLbitfield mask)

清空mask所指示的所有缓存中的位,得到我们想要的指定的结果。

void glBegin(GLenum mode)

二者之间指定所要绘制的顶点。mode可取GL_POINTS、GL_LINES或GL_POLYGON等等

void glEnd()

glVertex<2,3,4><b i f d>() 描述顶点。可以有多种形式,也可以用向量,

void glFlush()

强制执行所有OpenGL命令。绘图操作后必须加上这一句。

修改GLUT中的默认值:

void glutInitDisplayMode(unsigned int mode)

设置窗口属性为mode模式,mode取值选项为如颜色模式(GLUT_RGB,GLUT_INDEX)和颜色缓存的缓     存模式(GLUT_SINGLE、GLUT_DOUBLE),默认是RGB和SINGLE。

void glutInitWindowSize(int w,int h)  设置窗口的厨师宽度和高度

void glutInitWindowPosition(int x,int y) 设置窗口的左上角相当于屏幕左上角的位置。

颜色的设置:

void glColor3<b i f d....>(r ,g ,b)

void glColor3<b i f d....>v(color)              //设置绘制颜色

void glClearColor(r ,g ,b, a)      //指定屏幕清空颜色,设置后需调用glClear()方能生效

OpenGL和GLUT坐标系统的差异

OpenGL中,x轴和y轴的正方向分别是向上和向右,GLUT中则是向下和向右。

二维取景

void gluOrtho2D(GLdouble left,GLdouble right,GLdouble bottom,GLdouble top)

指定一个二维剪裁区域,左下角坐标为(left,bottom),右上角坐标为(right,top)。位于窗口内的对象是可见的,落在窗口之外的对象则不可将,我们称其“被剪裁”。

视口

用视口来限制OpenGL仅在屏幕窗口的任一部分进行绘制。

void glViewport(GLint x,GLint y,GLsizei w,GLsizei h)

将视口的宽度设为w,高度设为h,坐下角坐标为(x,y)。

坐标系统与变换

对象坐标系或世界坐标系:开发人员使用的正是这种坐标系。可自己选定何种单位

窗口坐标系或屏幕坐标系:单位为像素。由物理显示器的属性和显示器的区域两方面决定。

OpenGL中的坐标系变换由两个矩阵决定:

1、模糊视图矩阵        2、投影视图矩阵

函数gluOrtho2D()用于为二维应用程序指定一个投影矩阵

设置这两种矩阵的典型步骤包括:

1、指定我们希望修改的矩阵。

2.将矩阵重置为单位矩阵,

3、修改当前矩阵为用户所期望的矩阵。

glMatrixMode(GL_PROJECTION)

glLoadIndentity();

gluOrtho2D(-1.0,1.0,-1.0,1.0);

完善开始的那段程序

#include <gl/glut.h>void init()
{glClearColor(0.0,0.0,0.0,0.0);      //指定屏幕背景为黑色glColor3f(1.0,1.0,1.0);             //设置绘制颜色为白色glMatrixMode(GL_PROJECTION);       //指定希望修改的矩阵为投影矩阵glLoadIdentity();                  //重置为单位矩阵gluOrtho2D(-1.0,1.0,-1.0,1.0);     //设置二维剪裁区域,左下角坐标为(-1,1),右上角坐标为(1,1)
}void display()
{glClear(GL_COLOR_BUFFER_BIT);         //清理屏幕颜色为我们指定的颜色glBegin(GL_POLYGON);              //绘制模式为凸多边形glVertex2f(-0.5,-0.5);glVertex2f(-0.5,0.5);glVertex2f(0.5,0.5);glVertex2f(0.5,-0.5);             //指定绘制的四个顶点glEnd();                          glFlush();                       //强制以上绘图操作执行
}int main(int argc,char**argv)
{glutInit(&argc,argv);                           //初始化glutglutInitDisplayMode(GLUT_SINGLE | GLUT_RGB);    //设置窗口模式为单缓冲和RGB模式glutInitWindowSize(500,500);                    //设置窗口大小glutCreateWindow("test");                       //设置窗口标题glutDisplayFunc(display);                       //设置绘图回调函数glutMainLoop();                                 //开始循环,等待响应init();return 0;
}
得到如下结果:

转载于:https://blog.51cto.com/6996127/1545249

OpenGL(一)二维图形的绘制:一个简单的绘制矩形程序相关推荐

  1. 初学计算机图形学——OpenGL实现二维图形平移,旋转(不使用opengl自带的函数,齐次方程实现)

    要求:1.给定窗口中绘制坐标系 2.给定坐标系内绘制三角形 3.完成平移.旋转等变换后的三角形绘制 4.采用OpenGL绘制 代码: #include<windows.h> #includ ...

  2. 二维图形平移变换c语言程序,[转载]计算机图形学Opengl实现二维图形的平移、旋转、缩放复合变换...

    参考课堂教学中关于模型变化的讲解,编写对一个三角形分别实现平移.缩放.旋转等变化的源码及效果图.请以该例为蓝本,实现3题的代码编写. 如下的几幅图,第一幅就是在给出的代码部分进行修改,将GL_FLAT ...

  3. 继承QWidget使用QPainter自定义二维图形控件【Qt学习】

    继承QWidget使用QPainter自定义二维图形控件[Qt学习] 通过阅读该文章,将了解本文所说的二维图形控件的基本概念.为何要自定义二维图形控件.如何自定义二维图形控件. 该文章将首先进行一些书 ...

  4. 【OpenGL ES】二维图形绘制

    目录 OpenGL ES 学习--2D 着色器语言基础知识 绘制纯色背景 JAVA版本 C++版本 绘制圆点.直线.三角形 JAVA版本 C++版本 绘制彩色三角形 JAVA版本 C++版本 绘制纯色 ...

  5. c++ 判断硬件是否支持opengl_【译】OpenGL 教程:二维图形绘制

    为了更好的排版,请到以下博客查看此教程 OpenGl 环境搭建与介绍​iamazing.cn 1. 搭建 OpenGL 环境 取决于你的编程平台,有以下教程: 基于 C++(也可以看译者自己写的教程) ...

  6. python画二维图_使用python绘制二维图形示例

    我就废话不多说了,直接上代码吧! import matplotlib.pyplot as plt #也可以使用 import pylab as pl import matplotlib.font_ma ...

  7. matlab图片包微盘,如何用Matlab绘制二维图形资料下载

    简要 上一篇已经对图形的属性有过介绍,在此基础上来进行二维以及后续三维图形的操作(注:没接触过其他维度的操作,就不折腾相关的内容了),将会更容易理解这些属性的用法,当然,全部的属性使用都来一遍,感觉就 ...

  8. autocad2007二维图画法_CAD中如何绘制二维图形

    当我们在使用CAD软件绘制图纸时,我们一般情况下绘制的都是二维图形,用到的绘图工具也有很多.那在浩辰CAD软件中如何绘制二维图形呢?今天就为大家简单介绍下. CAD软件中绘制二维图的方法: 1.绘图菜 ...

  9. MATLAB二维图形绘制

    MATLAB二维图形绘制 数据点标记 数据点 颜色 线型 曲线图 一.plot函数 (一)最简单的plot函数调用格式: plot(x) (1)plot函数的参数 X 为普通向量, (2)plot函数 ...

  10. 计算机图形学实验一(二维图形绘制)

    计算机图形学实验一(二维图形绘制) 一.实验内容 二.实验环境 三.问题分析 四.算法设计 五.源代码 六.程序运行结果 一.实验内容 (1)绘制金刚石图案 金刚石图案的成图规则是:把一个圆周等分成n ...

最新文章

  1. BZOJ 1003[ZJOI2006]物流运输(SPFA+DP)
  2. HTML通知、新闻等文字列表的无缝滚动效果
  3. Asp.net Mvc Codeplex Preview 5 第三篇 实现Action参数传递繁杂类型 【转】
  4. 【Python学习系列二十】scikit-learn库模型持久化
  5. Leet Code OJ 237. Delete Node in a Linked List [Difficulty: Easy]
  6. 再见Jenkins,从Gitlab代码提交到k8s服务持续交付只需七毛三
  7. WebMagic写的网络爬虫优秀文章
  8. ~~约数之和(附模板题)
  9. lua笔记之userdata
  10. 龙讯LONTIUM LT8711EH-C. DP1.2转HDMI2.04K60HZ带HDCP 国产芯片
  11. 工程师分享——SMT贴片机编程的主要流程 2021-08-11
  12. 牛客寒假算法集训营1 小a与军团模拟器(启发式合并)
  13. 【数学】从鸡兔同笼谈数学思维
  14. 响应式Web设计:HTML5和CSS3实战 读书笔记
  15. android netd和kernelframeworks的通信逻辑
  16. html+ul隐藏滚动条,2种方法实现CSS隐藏滚动条并可以滚动内容的方法
  17. OpenCV实战(12)——图像滤波详解
  18. sort函数数组排序(c++方法)
  19. diyUpload - jQuery多张图片批量上传插件
  20. Java实验报告之java面向对象编程

热门文章

  1. python函数参数用法_Python:函数参数类型及其用法
  2. Java Foundation serial ( 一 )
  3. 凸优化-真锥和分割超平面
  4. 【Gym-100513 K】Treeland【bfs序构造】
  5. Frobenius companion matrix
  6. python测试开发工程师前景_对未来测试开发工程师的前景你怎么看?
  7. win10计算机维护,关掉win10系统自动维护功能的方法【图文教程】
  8. 复数加减结构体 c语言,C++定义描述复数的结构体类型变量,是想复数的输入输出。设计三个函数实现复数的加法,减法和乘法运算。...
  9. 51nod 1791 合法括号子段
  10. Javascript--闭包