⑴图形的绘制
图形一般由点、线、面组成。三维图形也是一二维图形为基础的。因而了 解二维图形的绘制也是必要的。
绘制点、线、面主要是用函数对图形进行数学描述。这里主要运用到三个 函数:GLBegin()、GLEnd()、GLVertex().对于点、线、面的描述主要取决于 GLBegin() 的参数类型。其中 GLBegin()和 GLEnd()是配对使用。主体是通过 GLVertex()来 完成计算机图形的表述。
一般来说,GLVertex()是有后缀的,主要是用来描述定点参数类型以及维数 的确定。比如说:GLVertex2f(),2f 表示:二维单精度浮点数。运用这个函数,可 以编写以下的程序。
①点、线、面的编程
点的绘制:
Bigan:
glBegin(GL-POINTS) glvertex2f(0.0f,0.0f);
glvertex2f(0.6f,0.7f); glvertex2f(-0.5f,0.5f);
glvertex2f(0.6f,-0.7f);
glvertex2f(-0.5f,-0.5f); glEnd()
这就是一个十分简单的二维点的绘制,但是这里的点只具有数学的意义,同
样绘制线、面时也是这样的。这就会导致在屏幕上时,点或线就会变大,存在误 差。所以一般还会用到一个函数:glpointSize(),glLineWidth()等函数,对点和线 进行规定,单位一般为像素。
这只是绘制二维的点,我们可以通过 glvertex3f 等函数进行三维点的绘制。 各种线面的绘制,和点的绘制编程类似。主要改变 GLBegin()参数类型。
②通过面绘制三维图形 通过面绘制三维体,是最简单三维体的绘制。原理主要是通过各个面的拼接
而绘制三维体。因为一个无论多复杂的表面都可以通过划分,变成若干个小平面。 再通过绘制小平面得到一个三维体。虽然这种方法简单,但要绘制精确的面,还 是很困难的,要解决三个方面:边的界定、图形的细分和逼近的精度。
但用来绘制简单的多边形还是可以的,但是要确定面的顺序。比如简单正方 形:
Bigan
glBegin(GL-POLYGON) Glvertex3f(-0.5f,0.5f,0.5f);
Glvertex3f(-0.5f,-0.5f,0.5f);
Glvertex3f(0.5f,-0.5f,0.5f);
Glvertex3f(0.5f,0.5f,0.5f); glEnd()//前面
glBegin(GL-POLYGON) Glvertex3f(-0.5f,0.5f,0.5f);
Glvertex3f(-0.5f,0.5f,0.5f);
Glvertex3f(-0.5f,0.5f,-0.5f);
Glvertex3f(-0.5f,-0.5f,-0.5f); glEnd()//左面
有上面的编程可以看出,面的顺序是需要在编程之前就要确定。防止编程是 出现混乱。
⑵图形的变换[12] 图形的变换,是改变图形位置或方向的重要方法。这主要是通过矩阵来实现
的。这里的矩阵是4 × 4的矩阵。在图形变换中主要是几何变换。几何变换又主
要分为平移、旋转和放大缩小。 来*自-优=尔,论:文+网www.youerw.com
①平移变换 图形的平移主要是沿着于平移变换向量的变换。其基本还是点的平移。这主
要涉及平移量(a,b,c)。平移公式为:
图 2-1 平移示意图
1 0
平移变换公式: xyz1x y z 10 1
主要函数就是:glmatrixmode、glloadidentity 和 gltranslatef。其中 glmatrixmode
的参数决定了图形需要进行哪种变换。编程一般如下:
Bigan Glmatrixmode(GL_MODELVIEW); Glmatrixmode(); Gltranslatef(0.0f,0.0f,-4.5f);
这 个 程 序 就 是 将 图 形 沿 着 z 轴 的 负 方 向 平 移 4.5 个 单 位 , 其 实 Gltranslatef 函数只是创建了一个平移矩阵,与原来的模型矩阵相乘。其中 a、 b、c 有函数 Gltranslatef(x,y,z)提供的。