3 OpenGL

合集下载
相关主题
  1. 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
  2. 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
  3. 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。

OpenGL的颜色

RGBA 模式: 用RGB定义颜色


void glColor<x><t> (red, green, blue, alpha); x =3 时,参数为R、G、B ; x =4时还包括Alpha 值(0.0 -1.0)

颜色表模式:从颜色表中选取当前颜色
void glIndex{sifd}(TYPE c); void glIndex{sifd}v(TYPE *c); 参数值c 用于设置当前颜色索引值,即调色板号, 若值大于颜色位面数时则取模。 参cindex
OpenGL中,曲线和曲面的构造借助于求值器完成。利用求值器 可自动生成顶点坐标、法线坐标和纹理坐标,其次,要激活求 值器,使其进行曲线映射。最后,要将求值器生成的各顶点连 接起来生成一条完整的曲线



glMaplf(……) 定义求值器 (传递控制点,指明数据类型及u的值域) glEnable(……) 启动求值器 glMapGridlf() 给出u的区间划分(常用等分) 即( u1=u0,u1,u2,……,un=u2 ) glEvalMeshl() 在上述区间上选取u值求值(即曲线上的点), 并用该点绘制曲线
GLdouble radius 圆锥体基底的半径。 GLdouble height 圆锥体的高度。 GLint slices 圆锥体围绕z 轴的分割数。 GLint stacks 圆锥体数沿着z 轴的分割数。 绘制沿着z 轴方向定位的圆锥体。圆锥体的基底定位于z = 0 平 面内,顶点z = height,圆锥体围绕z 轴分割为slices 个数目,沿 着z 轴分割为stacks个数目。
该顶点序列定义一条折线 该顶点序列定义一条闭合折线
GL_LINES
GL_LINE_STRIP GL_LINE_LOOP
多边形的朝向


每个多边形都有两面:前面和后面 系统默认逆时针朝向为观察者的正面,可以指定顺时 针为正面 glFrontFace(GL_CCW) 指定逆时针为正面(默认) 正面 glFrontFace(GL_CW) 指定顺时针为正面 反面

在OpenGL 中,使用glEnable 函数和glDisable 函数 来启用和禁用渲染特征。
OpenGL图元绘制

chap31
OpenGL图元绘制(点)


glVertex 函数用于指定顶点 点大小的默认值是一个象素,可用函数修改个值: void glPointSize(GLfloat size);

当函数名以v结尾时表示函数接收一个数组指针

例:glVertex3iv接收一个指向三个元素的GLint数组指针
OpenGL 状态机

OpenGL 是一种直接模式的API,每条命令根据当 前的渲染状态都会产生某种立即效果。

渲染状态是各种标记,他们指出哪些特性是打开的,哪 些是关闭的,以及应该如何应用他们。
多边形的填充方式

glPolygonMode( face , mode ) 控制每一面的填充方式
GL_POINT(点)
GL_FRONT 正面 GL_BACK 反面 GL_FRONT_AND_BACK GL_POINT(点)
GL_LINE(边界) GL_FILL(区域)
GL_LINE(边界) GL_FILL(区域)

这两个函数分别绘制中心位于模型坐标原点的实心12 面 体和线框12 面体,12 面体的半径为 3 。
GLUT 物体9:二十面体

实心二十面体void glutSolidIcosahedron (void); 线框二十面体void glutWireIcosahedron (void); 说明


GLUT 物体4:圆环

实心/线框圆环 glutSolidTorus(innerRadius, outerRadius, nsides, rings); glutWireTorus(innerRadius, outerRadius, nsides, rings); 参数

innerRadius 圆环的内半径; outerRadius 圆环的外半径。 GLint nsides 沿着圆环方向的分割数。 GLint rings 圆环的环线数。
glBegin(GL_POINTS); glVertex3f(0.0f,0.0f,0.0f); glVertex3f(10.0f,10.0f,10.0f); glEnd();
OpenGL图元绘制(线段)


由函数glBegin 的参数指定绘制图元的类型, 图4-19
按顺序配对分组而得到的每一对顶点定义一 条线段。若顶点个数是奇数,忽略最后一个

实心八面体void glutSolidOctahedron (void); 线框八面体void glutWireOctahedron (void); 说明

这两个函数分别绘制中心位于模型坐标原点的实心八面体 和线框八面体,八面体的半径为1.0。
GLUT 物体8:十二面体

实心十二面体void glutSolidDodecahedron (void); 线框十二面体void glutWireDodecahedron (void); 说明
OpenGL语法与规定

OpenGL 函数都遵循一个命名约定,通过这个约定可 以了解函数来源于哪个库,需要多少个参数以及参 数的类型。
<库前缀>&l;<可选的参数类型>

以函数glColor3f(…)为例

gl 表示这个函数来自库gl.h, color 是该函数的根段,表示该函数用于颜色设定, 3f 表示这个函数采用了三个浮点数参数。 glVertex2f,glVertex3i表示什么含义?

绘制中心位于模型坐标原点的圆环,轴线沿着z轴方向。
GLUT 物体5:犹他茶壶


实心茶壶glutSolidTeapot(GLdouble size); 线框茶壶glutWireTeapot(GLdouble size); 参数:size 茶壶的相对尺寸 说明 这两个函数分别绘制实心茶壶和线框茶壶,茶壶 的曲面法向量和纹理坐标也同时生成。 茶壶是用OpenGL 的求值器构建的。
GLUT 物体6:四面体

实心四面体void glutSolidTetrahedron(void); 线框四面体void glutWireTetrahedron(void); 说明

这两个函数分别绘制中心位于模型坐标原点的实心四面体 和线框四面体,四面体的半径为3 。
GLUT 物体7:八面体
注意变换次序 若先glTranslate后glRotate,则CMTMR, 其效果是先旋转后平移 变换之前保存矩阵副本 glPushMatrix() 使用矩阵栈中的矩阵 glPopMatrix()

参chap63
几何变换:复合变换
GLfloat shield[4][3]={{5,5,0},{20,5,0},{20,20,0},{5,20,0}}; 原始图形: 红色方块 几何变换后图形: 绿色方块 glTranslated( 30,0,0); glRotated(45,0,0,1); //沿x轴平移 //绕z轴旋转
glutSolidCube(2) glutWireCube(2)
GLUT 物体3:圆锥体


实心圆锥体glutSolidCone(radius, height, slices, stacks); 线框圆锥体glutWireCone(radius, height, slices, stacks); 参数
多边形的朝向与填充方式
按 红点、绿点、蓝点顺序定义点 按如下方式定义 多边形的朝向与填充方式 glPolygonMode(GL_FRONT,GL_FILL); //正面,填充 glPolygonMode(GL_BACK,GL_LINE); //背面,线框
蓝(80, 140)
//逆时针为正面 glFrontFace(GL_CCW);

说明: 球体绘制中心在模型坐标原点、半径为radius 球体围绕z 轴分割为slices 个数目 沿着z 轴分割stacks 个的数目。
glutSolidSphere(1,20,20) glutSolidSphere(1,10,10)
GLUT 物体2:立方体

实心立方体glutSolidCube(GKdouble size); 线框立方体glutWireCube(GKdouble size); 参数:size 立方体的边长。 说明:这两个函数用于绘制以模型坐标原点为中心、 边长为size 的实心立方体和线框立方体。
glRotated(45,0,0,1); //绕z轴旋转 移 glTranslated( 30,0,0); //沿x轴平移 glRotated(45,0,0,1); //绕z轴旋

glTranslated( 30,0,0); //沿x轴平
先平移 再旋转
先旋转 再平移
几何变换:任意变换


glLoadMatrix*将当前的矩阵设为任意的4×4矩阵。 参数:指向16个GLfloat或GLdouble类型元素的数组 的指针,按照列优先的顺序组成矩阵(前四个元素组 成第一列,随后四个元素组成第二列) glMultMatrix* 用任意4×4矩阵去右乘当前的矩阵
GLfloat matrix[16]={1,0,0,0,0.5,1,0,0,0,0,1,0,0,0,0,1};
glPushMatrix(); //保存原始矩阵栈 glColor3f(0,1,0); //绿色 glLoadMatrixf(matrix); glMultMatrixf(matrix); draw_shield(); glPopMatrix();
参程序Bezier
Bezier曲线(2/4)

应用程序将一系列控制点传给子程序glMaplf来建立 一个一维求值器(参数空间中的一维:u) glMaplf(①,②,③,④,⑤,⑥);

这两个函数分别绘制中心位于模型坐标原点的实心20 面 体和线框20 面体,20 面体的半径为1.0。
OpenGL光照与着色
4. 选择光照与着色参数 两面光照 参exam 4-6:单双面

glLightModeli(GL_LIGHT_MODEL_TWO_SIDE,GL_TRUE);
Bezier曲线(1/4)
//顺时针为正面 glFrontFace(GL_CW);
绿(120,100) 红(50, 50)
几何变换



OpenGL没有二维变换的机制,所有二维变换 都作为三维变换的特例处理 OpenGL保持一个modelview的矩阵,它是用来 进行建模变换与观察变换的合成变换矩阵 将建模与观察矩阵设为系统当前的矩阵 glMatrixMode(GL_MODELVIEW); glLoadIdentity();


GLUT 物体1:球体

实心球体 glutSolidSphere(radius, slices, stacks); 线框球体 glutWireSphere(radius, slices, stacks);

GLdouble radius 球体的半径。 GLint slices 球体围绕z 轴(相对于经度线)分割的数目。 GLint stacks 球体沿着z 轴(相对于纬度线)分割的数目。
几何变换: 平移 缩放 旋转



平移 glTranslate (Tx,Ty,Tz) 缩放 glScaled (Sx,Sy,Sz) 旋转 glRotate (angle,x,y,z) 以上三个函数首先建立一个相应的矩阵M,然后用M 右乘当前的矩阵C,得到CM 参chap62
几何变换:复合变换
蓝(80, 140) 绿(120,100) 红(50, 50)
glBegin(GL_POLYGON); glColor3f(1.0,0,0.0); //红 glVertex2i(50,50); glColor3f(0,1.0,0.0); //绿 glVertex2i(120,100); glColor3f(0,0,1); //蓝 glVertex2i(80,140); glEnd();
相关文档
最新文档