P13 简单二维图元的生成方法

#include <GL/glut.h> //用于表示openGL允许采用
glClear(GL_COLOR_BUFFER_BIT); //清除颜色缓存

glClear()用于表示清除缓存,可以用 “|” 组合不同的缓冲标识符。缓冲标识符有四种。

  • GL_COLOR_BUFFER_BIT
  • GL_DEPTH_BUFFER_BIT
  • GL_ACCUM_BUFFER_BIT
  • GL_STENCIL_BUFFER_BIT

glClear(GL_COLOR_BUFFER_BIT)表示把整个窗口清除为黑色。

glClearColor(0.0,0.0,0.0,0.0)表示清楚颜色设为黑色。

其余的缓冲标识符也有相对应的函数。

glPointSize(3.0); //指定栅格化点的直径

glPointSize()一定要用于画点开始前,即glBegin()前。

对应的glBegin()中的参数必须为GL_POINTS或GL_POINT。

一些常见错误:

  • 如果size小于或等于零,则生成GL_INVALID_VALUE。
  • 如果在调用glBegin和相应的glEnd调用之间调用glPointSize,则会生成GL_INVALID_OPERATION。
glBegin(GL_POINTS); //画点开始

glBegin()与glEnd()配合使用。

函数原型为void glBegin(GLenum mode)。

mode中的参数可以是点或线等。

  • GL_POINTS:把每个顶点作为一个点进行处理,顶点n定义了点n,绘制N个点。
  • GL_LINES:   把每个顶点作为一个独立的线段,顶点2n-1和2n之间定义了n条线段,绘制N/2条线段
  • GL_LINE_STRIP:绘制从第一个顶点到最后一个顶点依次相连的一组线段,第n和n+1个顶点定义了线段n,绘制n-1条线段。
  • GL_LINE_LOOP: 绘制从第一个顶点到最后一个顶点依次相连的一组线段,然后最后一个顶点和第一个顶点相连,第n和n+1个顶点定义了线段n,绘制n条线段。
  • GL_TRIANGLES: 把每个顶点作为一个独立的三角形,顶点3n-2,3n-1和3n定义了第n个三角形,绘制了N/3个三角形。
  • GL_TRIANGLE_STPIP:绘制一组相连的三角形,对于奇数n,顶点n,n+1,和n+2定义了第n个三角形;对于偶数n,顶点n+1,n和n+2定义了第n个三角形,绘制N-2个三角形。
  • GL_QUADS: 绘制由四个顶点组成的一组单独的四边形。顶点4n-3,4n-2,4n-1和4n定义了第n个四边形。绘制了N/4个四边形。
  • GL_QUAD_STRIP:绘制一组相连的四边形。每个四边形是由一对顶点及其后给定的一对顶点共同确定的。顶点2n-1,2n,2n+2和2n+1定义了第n个四边形,绘制了N/2-1个四边形。
  • GL_POLYGON: 绘制了一个凸多边形。顶点1到n定义了这个多边形
glVertex2f(0.0, 0.0); //指定点

用于指定一个点,由glVertex函数为前缀,后跟一个数字,用于表明指定点的维数(同为参数的个数),最后跟一个字母,用于表示参数的类型。

  • s 表示16位整数(OpenGL中将这个类型定义为GLshort);
  • i 表示32位整数(OpenGL中将这个类型定义为GLint和GLsizei);
  • f 表示32位浮点数(OpenGL中将这个类型定义为GLfloat和GLclampf);
  • d 表示64位浮点数(OpenGL中将这个类型定义为GLdouble和GLclampd);
  • v 表示传递的几个参数将使用指针的方式;

参数的数值范围为-1~1 (在标准视图中),如果超出这个范围就会消失在视图中。 (tips:如果在视图中找不到点,检查参数范围)

glEnd(); //画点结束

在glBegin()和glEnd()中间可以使用的函数

  • glVertex*() 设置顶点坐标
  • glColor*() 设置当前颜色
  • glIndex*() 设置当前颜色表
  • glNormal*() 设置法向坐标
  • glEvalCoord*() 产生坐标
  • glCallList(),glCallLists() 执行显示列表
  • glTexCoord*() 设置纹理坐标
  • glEdgeFlag*() 控制边界绘制
  • glMaterial*() 设置材质
glFlush(); //清空缓冲区,将指令送往硬件立即执行(强制刷新)

通常情况下,OpenGL指令不是立即执行的,它们首先被送到指令缓冲区,然后才被送到硬件执行。glFinish()和glFlush()都是强制将命令缓冲区的内容提交给硬件执行。

glFlush()将命令传达完毕后立即返回,不会等待指令执行完毕。这些指令会在有限时间内执行完毕。

glutInit(&argc, argv); //GLUT初始化

argc:一个指针,指向从main()函数传递过来的没更改的argc变量。

argv:一个指针,指向从main()函数传递过来的没更改的argv变量。

glutInitDisplayMode(GLUT_SINGLE | GLUT_RGB); //定义显示方式

函数原型:void glutInitDisplayMode(unsigned int mode)。

mode可以指定显示模式

  • GLUT_RGBA或者GLUT_RGB。指定一个RGBA窗口,这是一个默认的颜色模式。
  • GLUT_INDEX。指定颜色索引模式。
  • GLUT_SINGLE.单缓冲区窗口。
  • GLUT_BUFFER.双缓冲区窗口,这是产生流畅动画必须选的。
  • GLUT_ACCUM.累积缓冲区。
  • GLUT_STENCIL.模板缓冲区。
  • GLUT_DEPTH.深度缓冲区。

可以用“|”来建立自己想要的多个显示模式。

glutInitWindowPosition(, ); //确定窗口位置(默认是屏幕左上角)

函数原型:void glutInitWindowPosition(int x,int y)

x表示距离屏幕左边的像素数。-1是默认值,即由窗口管理程序决定窗口出现在哪里,可以自己设置值来确定位置。

y表示屏幕上边的像素值,类似x值。

glutInitWindowSize(, ); //设置窗口大小

函数原型:void glutInitWindowSize(int width,int height)

width表示窗口的宽度

height表示窗口的高度

避免使用负数

glutCreateWindow(argv[]); //创建窗口

函数原型:int glutCreateWindow(char* title)

title为窗口的标题

glutDisplayFunc(display); //绘图函数

函数原型:void glutDisplayFunc(void (*func)(void));

func当窗口需要被重绘时调用的函数的名称,用NULL作为实参是错误的。

程序运行时自动调用。

glutMainLoop(); //循环

完整代码:

#include <GL/glut.h>

void display(void) {
glClear(GL_COLOR_BUFFER_BIT); glPointSize(3.0);
glBegin(GL_POINTS);
glVertex2f(0.0, 0.0);
glEnd(); glPointSize(6.0);
glBegin(GL_POINTS);
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);
glutInitDisplayMode(GLUT_SINGLE | GLUT_RGB);
glutInitWindowPosition(, );
glutInitWindowSize(, );
glutCreateWindow(argv[]);
glutDisplayFunc(display);
glutMainLoop();
return ;
}

效果图:

【OpenGL】【计算机图形学原理】撸课本系列一的更多相关文章

  1. 关于opengl中的矩阵平移,矩阵旋转,推导过程理解 OpenGL计算机图形学的一些必要矩阵运算知识

    原文作者:aircraft 原文链接:https://www.cnblogs.com/DOMLX/p/12166896.html 为什么引入齐次坐标的变换矩阵可以表示平移呢? - Yu Mao的回答 ...

  2. 计算机图形学 opengl版本 第三版------胡事民 第三章更多的绘图工具

    opengl  计算机图形学 第三版   第二部分   第三章更多的绘图工具 3.1   概述 第2章中  我们绘图使用的是屏幕窗口的基础坐标系    以像素为单位 屏幕坐标从左下角x从0延伸到scr ...

  3. 计算机图形学 - 图形变换(opengl版)

    作业题目: 图形变换:实现一个图形绕任意直线旋转的程序. 要求:把一个三维图形绕任意一条直线旋转,需要有初始图形,和旋转后的图形,最好也可以实时控制旋转. 最少要做出绕z轴旋转. 原理:http:// ...

  4. 计算机图形学(一) 视频显示设备_1_CRT原理

    第 1 章 图形系统概述        如今.计算机图形学的作用与应用已经得到了广泛承认.大量的图形硬件和软件系统已经应用 到了差点儿全部的领域.通用计算机甚至很多手持计算器也已经普遍具备 二维及三维 ...

  5. 计算机图形学 opengl版本 第三版------胡事民 第四章 图形学中的向量工具

    计算机图形学 opengl版本 第三版------胡事民 第四章  图形学中的向量工具 一   基础 1:向量分析和变换   两个工具  可以设计出各种几何对象 点和向量基于坐标系定义 拇指指向z轴正 ...

  6. 我的新书《计算机图形学基础(OpenGL版)》

    我的新书<计算机图形学基础(OpenGL版)>今年6月份在清华大学出版社出版了!新书与原在机械工业出版社出的<计算机图形学>相比,主要有以下不同: 1.加重OpenGL的内容, ...

  7. 64 计算机图形学入门(1)——OpenGL环境配置与图形流水线(图像管线)

    0 引言 最近想学一下计算机图形学方面的知识,原因如下.目前本人接触了数字图像处理(opencv)以及点云处理(PCL)方面的知识,对从图像和点云中提取特征信息,并将特征转化为底层/中层语义信息有了一 ...

  8. [图形学] 计算机图形学 with OpenGL开篇

    <计算机图形学>(第四版)正在学习中,学习目的是为了在Unity中使用shader实现不同的渲染效果. 希望在这里能把学习过程中学到的知识和遇到的问题记录下来. 工作环境是:Xcode 8 ...

  9. 计算机图形学学习方法和相关书籍,做游戏,GIS,虚拟现实,三维引擎的都能够看看.

    本书參照<<图形学扫盲>> 整理的,原文内容引子: http://www.cppblog.com/lai3d/archive/2008/12/30/70796.html 前言: ...

随机推荐

  1. python自动化开发-[第九天]-异常处理、进程

    今日概要: 1.异常处理使用 2.进程 3.paramiko模块使用 一.异常处理 1.常见的错误异常 #错误异常一 print(a) #NameError #错误异常二 int('sdadsds') ...

  2. oracle中的insert all into,在mysql中的写法

    oracle中的insert all into表示插入多条数据,mysql中可以采用: INSERT INTO表名(字段1,字段2..) values <foreach collection=& ...

  3. jenkins-ant-jmeter

    jenkins下通过ant执行jmeter脚本 先下个ant 解压开来 在到jenkins中设置:系统管理-全局工具配置-ant安装-新增ant,填上name和ant-home 将jmeter的ant ...

  4. python中import问题

    https://blog.csdn.net/aspenstars/article/details/69605318 Python包含子目录中的模块方法比较简单,关键是能够在sys.path里面找到通向 ...

  5. layui(二)——layer组件常见用法总结

    layer是layui的代表作,功能十分强大,为方便以后快速配置这里对其常见用法做了简单总结 一.常用调用方式 //1.普通消息:alert(content,[options],[yesCallBac ...

  6. 使用rvm安装与切换Ruby

    列出已知的 Ruby 版本 rvm list known安装一个 Ruby 版本 rvm install 2.3.1 --disable-binary这里安装了最新的 2.2.0, rvm list ...

  7. 安装Rational Rose后提示java.lang.ClassNotFoundException

    1. 在运行中输入regedit回车,打开注册表编辑器2. 搜索 TrustedClasspath [REG_SZ] ,因为64位和32位不一样. 4.添加值c:\windows\java\trust ...

  8. 一次针对多台服务器交互式主机命令采集Python脚本编写

    [环境介绍]   系统环境:Linux + Python 2.7.10(监控主机)   [背景描述] 需求:每次节假日或者重要时间时,需要对数据库主机信息进行检查,比如主机空间使用率之类.有时候需要执 ...

  9. PHP的核心配置详解

    1.PHP核心配置详解 代码在不同的环境下执行的结果也会大有不同,可能就因为一个配置问题,导致一个非常高危的漏洞能够利用:也可能你已经找到的一个漏洞就因为你的配置问题,导致你鼓捣很久都无法构造成功的漏 ...

  10. Docker(二)搭建和使用Docker

    摘自 https://mp.weixin.qq.com/s/E9tqhe00EjfV8y1pqWkZfw 一.Docker的架构 Docker使用C/S结构,即客户端/服务器体系结构.Docker客户 ...