Whistlle

M.J

第四章 Graphics Output Primitives

这一章主要讲了使用opengl画几个基本的图元的方法。

4.1坐标系

介绍了几个坐标系:屏幕坐标系,绝对坐标系和相对坐标系

两个取frame buffer中点的api: set/getPixel()

4.2

在代码中制定 显示窗口大小:gluOrtho2D(xmin, xmax,ymin, ymax),只有在这之中的图像才会被显示。任何在VideoScreen上但是在DisplayWIndow以外的将不显示

4.3 画点

 

API:glVertex*();

函数后缀为参数类型,如glVertex2i: 2个int参数

绘图函数需要在drawcall之内:

glBegin();

//DrawSth

glEnd();

4.4 画线

需要给glBegin() 传递参数GL_LINES

有几种不同的画线方法:GL_LINE_STRIP, GL_LINE_LOOP

效果参照下图:网上找的

image

4.5 画曲线

书中提供了3种方法:

曲线模拟

opengl不包含画圆和椭圆的api,但是有画贝塞尔曲线的.之所以不提供这些函数是因为提供了B-splines(B样条曲线)这个大杀器。B-spline曲线是包含Bezier曲线的通用数学表示法。这样就可以模拟别的图形了

直线模拟

画无数的直线近似模拟曲线

算法实现

通过数学算法画出曲线

4.6 Fill-Area Primitives

没找到这个对应的中文是啥。大致意思就是一个填充的某种颜色的图形。然后opengl实现起来就是把它当做一个多边形(polygon).

4.7 Polygon Fill Areas(多边形填充区域?)

讲了多边形的定义,分类:凹(concave)多边形和凸(convex)多边形;

然后给出了一个算法如何识别凹多边形:

所有临近点叉乘, 所得结果全部同号的为凸,有正有负为凹

然后讲了如何分割凹多边形,把它分割成几个凸多边形p86

然后把凸多边形分成一系列三角形:任取3个连续的顶点组成一个三角形,再把中间点去了,不断重复

然后是正反面测试

有两种:Odd-Even Rule和Nonzero Winding-Number Rule p88

Nonzero Winding-Number Rule中规定逆时针为正面顺时针反面,这个后面也会用到

然后是Polygon Table P.90

一个多边形表由3个字表组成:顶点表(Vertex Table) 边表(Edge Table) 面表(Surface-facet Table)

3个表中的数据内容可以互相引用,每个子表又不依赖主表,灵活度很高。

Plane Equations

高中讲过的平面公式Ax+By+Cz+D=0,系数通过行列式求出

多边形的正反面

有几种判定方法

一种是带入点算Ax+By+Cz+D正负,大于0正面

还有就是通过法向量计算(A,B,C)

法向量还可以通过一个平面上3个连续逆时针点计算

N = (V2-V1) x (V3-V1)

最后给出平面公式的向量形式

N·P = -D

这节东西也太多了吧喂

4.8 PolyGon Fill-Area Function P94

glRect();

也有几种画法,看上面那张图

GL_POLYGON

GL_TRIANGLES

GL_TRIANGLE_STRIP

GL_TRIANGLE_FAN

GL_QUADS

GL_QUAD_STRIP

4-9 Vertex Arrays

顶点数组方便在一个DrawCall中画一堆东西,增加性能。

4-10 Pixel-Array

点阵数组

4-11  Pixel-Array Func p103

glBitmap() 画点 中间有个参数bitShape指明点阵的形状

glRasterPos*() 指明点阵左下角坐标

Pixmap Func

讲一串颜色数组复制到frame buffer中可用这个·

glDrawPixels()

glDrawBuffer(buffer)画出传进去的buffer

光栅操作 Raster Operation p106

glReadPixels

glReadBuffer

glCopyPixels

然后可以对各种buffer进行逻辑运算 混合在一起

glEnable(GL_COLOR_LOGIC_OP);

glLogicOp(logicOp);

4-12 字符图元 Character Primitives

英语中有衬线体和非衬线体(sans-serif)之分

字母的存储方法有两种

点阵存贮(bitmap) 费容量

存储点的方位再连线,需要计算

4-13 Character Func

glRasterPosition()

再用

glutBitmapCharter(),每个字的偏移会自动算的

4-14 图像分割 partitioning

shenmegui

4-15 Display List

一个神奇的东西,把一段指令像函数一样保存起来复用

glNewList(listId, listMode);

.

glEndList();

4-16 Reshape Func

就是拖动窗口,缩放时用会调用函数,如果需要调整比例,分辨率什么的要用。

 

啊终于没了。一章看到现在,有生之年系列

 

 

2015年7月21日 0 / /
标签:  暂无标签

9 + 3 =

回到顶部