OpenGL 笔记(一)输出图元 - 基本绘制方式
这一部分出自《计算机图形学》绿绿的一本、链接如下
链接:http://pan.baidu.com/s/1bpGVHKV 密码:aamh
具体形式
数值数据类型的后缀:i(整数)、s(短整数)、v(浮点数)、d(双精度浮点数);v(向量、矩阵形式)
坐标
屏幕显示窗口坐标
glMatrixMode(GL_PROJECTION);
glLoadIdentity();
gluOrtho2D(xmin, xmax, ymin, ymax);
基本图元绘制
- GL_POINTS 单个顶点集
- GL_LINES 多组双顶点线段
- GL_POLYGON 单个简单填充凸多边形
- GL_TRAINGLES 多组独立填充三角形 生成n/3个
- GL_QUADS 多组独立填充四边形
- GL_LINE_STRIP 不闭合折线
- GL_LINE_LOOP 闭合折线
- GL_TRAINGLE_STRIP 线型连续填充三角形串 生成n-2个 顶点n、n+1、n+2
- GL_TRAINGLE_FAN 扇形连续填充三角形串 生成n-2个 顶点1、n、n+1
- GL_QUAD_STRIP 连续填充四边形串 2n-1、2n、2n+1、2n+2
glRect* (x1, y1, x2, y2); 为矩形特意弄了个函数\还有顺逆时针概念(正反)
顶点数组
如果使用顶点数组,绘制方式仍然和之前的类似的话,效率并不能带来多大的提升。(顶多也就,代码好看了点)
需要多次调用数组的情况做出了优化。
步骤
- glEnableClientState(GL_VERTEX_APPAY);激活顶点数组特性
- 引用glVertexPointer制定顶点坐标位置和数据格式
- 使用子程序如glDrawElements显示场景
Enable的反义词是Disable !~
glVertexPointer(3, GL_INT, 0, pt) - 参数
- 每一个顶点描述中坐标数目
- 数据类型,GL_INT之类
- 字节位移(方便在同一个数组中存多种类型的数据)
- 顶点数组指针
glDrawElements(GL_QUADS, 24, GL_UNSIGNED_BYTE, vertIndex);
- verIndex - 顶点索引
像素阵列函数
位图函数
void WINAPI glBitmap(
GLSizei width,
GLSizei height,
GLfloat xorig,
GLfloat yorig,
GLfloat xmove,
GLfloat ymove,
const GLubyte *bitmap
);
像素图函数
glDrawPixels(width, height, dataFormat, dataType, pixMap);
glDrawBuffer(buffer);
光栅操作
glReadPixels(xmin, ymin, width, height, dataFormat, dataType, array);
glReadBuffer(buffer);
glCopyPixels(xmin, ymin, width, height, pixelValues);
将一块像素放入缓存的不同结果:
glEnable(GL_COLOR_LOGIC_OP);
glLogicOp(logicOp);
默认是GL_COPY;其他有GL_AND \ GL_OR \ GL_XOR \ GL_CLEAR \ GL_SET
# 字符图元
## 位图/光栅字体
glutBitmapCharacter(font, character);
## 轮廓/笔划字体
glutStrokeCharacter(font, character);
显示列表 diaplay list
定义显示列表
glNewList(listID, listMode); // GL_COMPILE / GL_COMPILE_AND_EXECUTE
glEndList();
创建显示列表
listID = glGenLists(1); //需要检验0
查询是否存在
glIsList(listID);
执行
glCallList(listID);
glCallLists…
删除
glDeleteLists(startID,nLists);
窗口重定型函数
glutReshapeFun(ReshapeFcn);
在窗口形状改变的时候这个函数会触发。在这里需要重新对坐标进行处理。
然后好像程序运行刚刚开始的时候设置窗口大小也会触发这个。

浙公网安备 33010602011771号