




已阅读5页,还剩31页未读, 继续免费阅读
版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
OpenGL语法与规定 OpenGL函数都遵循一个命名约定 通过这个约定可以了解函数来源于哪个库 需要多少个参数以及参数的类型 以函数glColor3f 为例gl表示这个函数来自库gl h color是该函数的根段 表示该函数用于颜色设定 3f表示这个函数采用了三个浮点数参数 glVertex2f glVertex3i表示什么含义 当函数名以v结尾时表示函数接收一个数组指针例 glVertex3iv接收一个指向三个元素的GLint数组指针 OpenGL状态机 OpenGL是一种直接模式的API 每条命令根据当前的渲染状态都会产生某种立即效果 渲染状态是各种标记 他们指出哪些特性是打开的 哪些是关闭的 以及应该如何应用他们 在OpenGL中 使用glEnable函数和glDisable函数来启用和禁用渲染特征 OpenGL图元绘制 chap31 OpenGL图元绘制 点 glVertex函数用于指定顶点点大小的默认值是一个象素 可用函数修改个值 voidglPointSize GLfloatsize glBegin GL POINTS glVertex3f 0 0f 0 0f 0 0f glVertex3f 10 0f 10 0f 10 0f glEnd OpenGL图元绘制 线段 由函数glBegin的参数指定绘制图元的类型 图4 19 多边形的朝向 每个多边形都有两面 前面和后面系统默认逆时针朝向为观察者的正面 可以指定顺时针为正面glFrontFace GL CCW 指定逆时针为正面 默认 glFrontFace GL CW 指定顺时针为正面 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 红 50 50 绿 120 100 蓝 80 140 正面反面 多边形的填充方式 glPolygonMode face mode 控制每一面的填充方式 GL POINT 点 GL LINE 边界 GL FILL 区域 多边形的朝向与填充方式 按红点 绿点 蓝点顺序定义点按如下方式定义多边形的朝向与填充方式glPolygonMode GL FRONT GL FILL 正面 填充glPolygonMode GL BACK GL LINE 背面 线框 红 50 50 绿 120 100 蓝 80 140 顺时针为正面glFrontFace GL CW 逆时针为正面glFrontFace GL CCW 几何变换 OpenGL没有二维变换的机制 所有二维变换都作为三维变换的特例处理OpenGL保持一个modelview的矩阵 它是用来进行建模变换与观察变换的合成变换矩阵将建模与观察矩阵设为系统当前的矩阵glMatrixMode GL MODELVIEW glLoadIdentity 几何变换 平移缩放旋转 平移glTranslate Tx Ty Tz 缩放glScaled Sx Sy Sz 旋转glRotate angle x y z 以上三个函数首先建立一个相应的矩阵M 然后用M右乘当前的矩阵C 得到CM参chap62 几何变换 复合变换 注意变换次序若先glTranslate后glRotate 则CMTMR 其效果是先旋转后平移变换之前保存矩阵副本glPushMatrix 使用矩阵栈中的矩阵glPopMatrix 参chap63 几何变换 复合变换 GLfloatshield 4 3 5 5 0 20 5 0 20 20 0 5 20 0 原始图形 红色方块几何变换后图形 绿色方块 glTranslated 30 0 0 沿x轴平移 glRotated 45 0 0 1 绕z轴旋转 glRotated 45 0 0 1 绕z轴旋转glTranslated 30 0 0 沿x轴平移 glTranslated 30 0 0 沿x轴平移glRotated 45 0 0 1 绕z轴旋转 先平移再旋转 先旋转再平移 几何变换 任意变换 glLoadMatrix 将当前的矩阵设为任意的4 4矩阵 参数 指向16个GLfloat或GLdouble类型元素的数组的指针 按照列优先的顺序组成矩阵 前四个元素组成第一列 随后四个元素组成第二列 glMultMatrix 用任意4 4矩阵去右乘当前的矩阵 GLfloatmatrix 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 OpenGL的颜色 RGBA模式 用RGB定义颜色voidglColor red green blue alpha x 3时 参数为R G B x 4时还包括Alpha值 0 0 1 0 颜色表模式 从颜色表中选取当前颜色voidglIndex sifd TYPEc voidglIndex sifd v TYPE c 参数值c用于设置当前颜色索引值 即调色板号 若值大于颜色位面数时则取模 参cindex GLUT物体1 球体 实心球体glutSolidSphere radius slices stacks 线框球体glutWireSphere radius slices stacks GLdoubleradius球体的半径 GLintslices球体围绕z轴 相对于经度线 分割的数目 GLintstacks球体沿着z轴 相对于纬度线 分割的数目 说明 球体绘制中心在模型坐标原点 半径为radius球体围绕z轴分割为slices个数目沿着z轴分割stacks个的数目 glutSolidSphere 1 20 20 glutSolidSphere 1 10 10 GLUT物体2 立方体 实心立方体glutSolidCube GKdoublesize 线框立方体glutWireCube GKdoublesize 参数 size立方体的边长 说明 这两个函数用于绘制以模型坐标原点为中心 边长为size的实心立方体和线框立方体 glutSolidCube 2 glutWireCube 2 GLUT物体3 圆锥体 实心圆锥体glutSolidCone radius height slices stacks 线框圆锥体glutWireCone radius height slices stacks 参数GLdoubleradius圆锥体基底的半径 GLdoubleheight圆锥体的高度 GLintslices圆锥体围绕z轴的分割数 GLintstacks圆锥体数沿着z轴的分割数 绘制沿着z轴方向定位的圆锥体 圆锥体的基底定位于z 0平面内 顶点z height 圆锥体围绕z轴分割为slices个数目 沿着z轴分割为stacks个数目 GLUT物体4 圆环 实心 线框圆环glutSolidTorus innerRadius outerRadius nsides rings glutWireTorus innerRadius outerRadius nsides rings 参数innerRadius圆环的内半径 outerRadius圆环的外半径 GLintnsides沿着圆环方向的分割数 GLintrings圆环的环线数 绘制中心位于模型坐标原点的圆环 轴线沿着z轴方向 GLUT物体5 犹他茶壶 实心茶壶glutSolidTeapot GLdoublesize 线框茶壶glutWireTeapot GLdoublesize 参数 size茶壶的相对尺寸说明这两个函数分别绘制实心茶壶和线框茶壶 茶壶的曲面法向量和纹理坐标也同时生成 茶壶是用OpenGL的求值器构建的 GLUT物体6 四面体 实心四面体voidglutSolidTetrahedron void 线框四面体voidglutWireTetrahedron void 说明这两个函数分别绘制中心位于模型坐标原点的实心四面体和线框四面体 四面体的半径为3 GLUT物体7 八面体 实心八面体voidglutSolidOctahedron void 线框八面体voidglutWireOctahedron void 说明这两个函数分别绘制中心位于模型坐标原点的实心八面体和线框八面体 八面体的半径为1 0 GLUT物体8 十二面体 实心十二面体voidglutSolidDodecahedron void 线框十二面体voidglutWireDodecahedron void 说明这两个函数分别绘制中心位于模型坐标原点的实心12面体和线框12面体 12面体的半径为 GLUT物体9 二十面体 实心二十面体voidglutSolidIcosahedron void 线框二十面体voidglutWireIcosahedron void 说明这两个函数分别绘制中心位于模型坐标原点的实心20面体和线框20面体 20面体的半径为1 0 OpenGL光照与着色 4 选择光照与着色参数两面光照glLightModeli GL LIGHT MODEL TWO SIDE GL TRUE 参exam4 6 单双面 Bezier曲线 1 4 定义求值器 传递控制点 指明数据类型及u的值域 启动求值器给出u的区间划分 常用等分 即 u1 u0 u1 u2 un u2 在上述区间上选取u值求值 即曲线上的点 并用该点绘制曲线 glMaplf glEnable glMapGridlf glEvalMeshl OpenGL中 曲线和曲面的构造借助于求值器完成 利用求值器可自动生成顶点坐标 法线坐标和纹理坐标 其次 要激活求值器 使其进行曲线映射 最后 要将求值器生成的各顶点连接起来生成一条完整的曲线 参程序Bezier Bezier曲线 2 4 应用程序将一系列控制点传给子程序glMaplf来建立一个一维求值器 参数空间中的一维 u glMaplf 符号常数指明控制点及求值器所产生的数据类型GL MAP1 VERTEX 3表示xyz顶点坐标GL MAP1 NORMAL表示法向量 指定u的值域 umin umax 将被系统映射为标准值域 0 1 控制点间的步幅 以GLfloat个数度量 控制点的数量 指向一个含有一系列控制点的GLfloat数组指针启动求值器glEnable GL MAP1 VERTEX 3 终止求值器glDisable GL MAP1 VERTEX 3 Bezier曲线 绘制Bezier曲线glMap1f GL MAP1 VERTEX 3 产生的数据类型0 0f 参数最小值100 0f 参数最大值3 控制点间的步幅 以GLfloat个数度量 nNumPoints 控制点数目 保存控制点的数组 GLintnNumPoints 4 GLfloatctrlPoints 4 3 4 0f 5 0f 0 0f 控制点0 2 0f 4 0f 0 0f 控制点1 2 0f 4 0f 0 0f 控制点2 4 0f 5 0f 0 0f 控制点3 glEnable GL MAP1 VERTEX 3 启动求值器 Bezier曲线 3 4 映射曲线 选择u并计算曲线上的点 方法一 处理均匀分布的u值glMapGridlf Glintn GLfloatu1 GLfloatu2 指定一个从u1开始经过n次常数增值到达u2的格式即区间 u1 u2 n等分 u1 u0 u1 u2 un u2 例 glMapGrid1d 100 0 0 100 0 等分区间通过调用glEvalMesh1计算u值并绘制曲线glEvalMeshl GLintb Glinte 符号常数GL POINT画点 GL LINE画折线b和e让一维求值器在ub到ue的每个u值上求值 并用由此算出的曲线上点来画图例 glEvalMesh1 GL LINE 0 100 用求值器计算曲线上点的值 并画图 Bezier曲线 4 4 可以处理均匀分布或者非均匀分布的u值 方法二 映射曲线 选择u并计算曲线上的点用适当的参数u调用glEvalCoord1f使每个已经启用的一维求值器都算出 产生一个曲线上对应于参数值u的有着相应数据类型的点glEvalCoord1f GLfloatu 用u值让求值器计算出曲线上的一个点通常在循环结构中使用 并要指定绘制模式 点 线等 glBegin GL LINE STRIP 作用和上面2行一样for i 0 i 100 i glEvalCoord1f GLfloat i 计算当前曲线点的坐标 glEnd B 样条 1 5 Glu子程序库提供一个B 样条接口 该接口支持不同形式的B 样条 均匀 开放 NURBS 首先声明一个类型为GLUnurbsObj的指针 调用gluNewNurbsRenderer来构造一个新的GLUnurbsObj对象 而且使该指针指向这个对象然后通过调用gluBeginNurbsCurve来产生和画出该曲线最后调用gluEndCurve结束绘制 GLUnurbsObj BSpline 声明对象BSpline gluNewNurbsRenderer 构造对象gluBeginCurve BSpline 绘制曲线gluNurbsCurve BSpline 8 kv 3 ctrlPoints 0 4 GL MAP1 VERTEX 3 gluEndCurve BSpline B 样条 2 5 B 样条绘制函数gluNurbsCurve 指向GLUnurbsObj对象的指针 指明节向量中节点的数量 指向节向量的指针 控制点间的步幅 以GLfloat个数度量 指向一个含有一系列控制点的GLfloat数组指针 B 样条的阶数 符号常数 指明产生的数据类型GL MAP1 VERTEX 3表示xyz顶点坐标GL MAP1 VERTEX 4表示xyzw坐标 B 样条 例 GLintnNumPoints 4 GLfloatctrlPoints 4 3 0 0 0 控制点0 1 2 0 控制点1 4 2 5 0 控制点2 7 0 5 0 控制点3GLfloatkv 8 0 1 2
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 月嫂培训课件下载
- 江阴舒卿培训课件
- 外包业务承揽协议及保密条款
- 技术团队创新成果评价工具
- 人工智能辅助决策系统研发与实施协议
- 幸福的一家人1200字14篇
- 生产安全规范与作业流程执行指引
- 农村水电设施建设与维护协议
- 商务会议设施租赁使用协议
- 少儿运动培训课件图片
- 剖宫产子宫切口憩室的诊疗进展
- 合理用药课件
- 酒店工程管理的主要内容
- NB-T 11069-2023 柔性直流用全桥和半桥子模块混合换流阀技术规范
- 高中英语北师大版全七册单词表
- 深圳机场国际货站信息系统(CTIS)全流程综合联调方案v17
- 完整版全国行政区域身份证代码表(EXCEL版)TextMarkTextMark
- 2022年杭州市桐庐县辅警考试试卷真题
- 中西医结合孕期的监护与保健
- 50个税务稽查案例解析127p
- 部编版四年级上册道德与法治全册教案(表格式)
评论
0/150
提交评论