【HDU2021】三维图形程序设计 期末复习提纲 OpenGL

HDU 2021 三维图形程序设计 期末复习提纲

说明

只是对老师复习提纲的补充,可能不准,发布到网络只是为了为杭电数媒专业学弟学妹做一些参考。部分资料转载自网络。
教材:OPENGL红宝书第七、八版

第一、二章

1、 OpenGL中能渲染的基本元素是什么?GLU 可以渲染哪些基本元素?

OpenGL中能渲染的十种图元:

图形 OPENGL数据类型 中文名 解释
GL_POINTS 单个顶点集 将指定的各个顶点用于创建单个的点
线 GL_LINES 多组双顶点线段 将指定顶点用于创建线段。两个顶点指定一条单独的线段。如果顶点个数是奇数,则忽略最后一个
线 GL_LINE_STRIP 不闭合折线 将指定的顶点用于创建线段。每个顶点之后的每个顶点指定的是线条延伸到的下一个点
线 GL_LINE_LOOP 闭合折线 特性和GL_LINE_STRIP相似,只不过最后一条线段是在指定的最后一个和第一个顶点之间绘制。典型情况下,这用于绘制那些可能违反了GL_POLYGON用法规则的封闭区域。
三角形 GL_TRIANGLES 多组独立填充三角形 将指定的顶点用于构造三角形。每三个顶点指定一个新三角形。如果顶点个数不是三的倍数,多余的顶点将被忽略。
三角形 GL_TRIANGLE_STRIP 线型连续填充三角形 将指定的顶点用于创建三角形。指定前三个顶点之后,后继的每个顶点与它前面两个顶点一起用于构成下一个三角形。每个顶点三元组(在最初的组之后)会自动重新排列以确保三角形绕法的一致性。
三角形 GL_TRAINGLE_FAN 扇形连续填充三角形 初始顶点需要是扇形的圆心,前三个顶点逆时针构成第一个三角形。从第三个顶点开始就满足,就是 (n, 圆心, n-1)
多边形 GL_QUADS 多组独立填充四边形 每四个顶点一组用于构造一个四边形。如果顶点个数不是四的倍数,多余的顶点将被忽略
多边形 GL_QUADS_STRIP 连续填充四边形 将指定的顶点用于构造四条形边。在第一对顶点之后,每对顶点定义一个四边形。和GL_QUADS的顶点顺序不一样,每对顶点以指定顺序的逆序使用,以便保证绕法的一致。
多边形 GL_POLYGON 单个简单填充凸多边形 将指定的顶点用于构造一个凸多边形。多边形的边缘决不能相交。最后一个顶点会自动连接到第一个顶点以确保多边形是封闭的。

在这里插入图片描述

GLU能渲染的基本元素:
1.NURBS(非均匀有理B样条)曲面、曲线
2.二次曲面
3.球、圆等

2、 用框图说明OpenGL的渲染流程,并简要说明每个坐标系。

在这里插入图片描述

坐标系 左右手 解释
物体坐标系 右手坐标系 是绘制物体时的坐标系。
世界坐标系 右手坐标系 定义物理世界位置的客观空间。
观察者坐标系 右手坐标系 以视点为原点,以视线的方向为Z+轴正方向的坐标系中的方向。
裁剪坐标系 右手坐标系 视区内的坐标。
规范化设备坐标系 左手坐标系 为使图形软件能在不同设备之间移植,采用规范化坐标系,其坐标轴取值范围是[-1, 1]或[0, 1]。
屏幕坐标坐标系 左手坐标系 屏幕上的设备坐标。

3、 投影变换的设置,gluPerspective, glFrustum, glOrtho等的具体含义,gluLookAt函数的具体参数和使用方法。

1.gluPerspective
在这里插入图片描述

//这个函数指定了观察的视景体在世界坐标系中的具体大小
void gluPerspective (GLdouble fovy, GLdouble aspect, GLdouble zNear, GLdouble zFar)
//lfet是眼睛上下睁开的幅度,角度值,值越小,视野范围越狭小(眯眼),值越大,视野范围越宽阔(睁大眼);

//zNear表示近裁剪面到眼睛的距离(始终为正) 
//zFar表示远裁剪面到眼睛的距离(始终为正) 

//aspect表示裁剪面的宽w高h比,这个影响到视野的截面有多大。

2.glFrustum
在这里插入图片描述

//它是将当前矩阵与一个透视矩阵相乘,把当前矩阵转变成透视矩阵
void glFrustum(GLdouble left, GLdouble Right, GLdouble bottom, GLdouble top, GLdouble near, GLdouble far)
//left,right指明相对于垂直平面的左右坐标位置
//bottom,top指明相对于水平剪切面的下上位置

//near,far指明相对于深度剪切面的远近的距离,两个必须为正数

3.glOrtho
在这里插入图片描述

//这个函数描述了一个平行修剪空间。这种投影意味着离观察者较远的对象看上去不会变小(与透视投影相反)
void glOrtho(GLdouble left,GLdouble right,GLdouble bottom,GLdouble top,GLdouble near,GLdouble far);
//left,right指明相对于垂直平面的左右坐标位置
//bottom,top指明相对于水平剪切面的下上位置

//near,far指明相对于深度剪切面的远近的距离
//所有的near和far值同时为正或同时为负, 值不能相同

4.gluLookAt

//该函数定义一个视图矩阵,并与当前矩阵相乘。
void gluLookAt(GLdouble eyex,GLdouble eyey,GLdouble eyez,GLdouble centerx,GLdouble centery,GLdouble centerz,GLdouble upx,GLdouble upy,GLdouble upz);
//第一组eyex, eyey,eyez 相机在世界坐标的位置
//第二组centerx,centery,centerz 相机镜头对准的物体在世界坐标的位置
//第三组upx,upy,upz 相机向上的方向在世界坐标中的方向

第四、五章

4、 写出OpenGL中局部光照的方程,要包含的系数有光源参数、材料参数、聚光灯的参数、衰减参数等,方程要表示是多个光源的。

顶点颜色 = 顶点处的材料发射颜色 + 全局环境光(在顶点处根据材料环境颜色属性进行缩放) + 经过适当衰减的来自所有光源的环境、散射和镜面光成分(第七版OPENGL红宝书中文版P146)
在这里插入图片描述

顶点颜色=材料自发光+
环境光颜色 * 材料的环境颜色属性+
对每个聚光灯加上(聚光灯衰减因子 * 聚光灯效果)*
【光源的环境颜色 * 材料的环境颜色+
Max{L * n,0} * 漫反射光颜色 * 材料的漫反射属性+
(Max{S * N,0}^镜面指数 * 灯的反射值 * 材料的反射属性】

后半部分即:每个光源的贡献=衰减因子 * 聚光灯效果 *(环境光成分+漫反射成分+镜面反射成分)

1.N:顶点的单位化法向量
2.V:聚光灯指向顶点的单位向量
3.D:聚光灯的方向向量,它是单位向量
4.T:顶点到光源的单位向量,当光源是聚光灯时,即为-V
5.P:顶点到视点的单位向量
6.S:Norm(T+P)
7.衰减因子= 1 k c + k k d + k q d 2 \frac{1}{k_c + k_kd + k_qd^2} \quad kc+kkd+kqd21

d = 光源的位置和顶点之间的距离
三种k分别代表常数(GL_CONSTANT_ATTENUATION)、一次参数(GL_LINEAR_ATTENUATION)和二次参数(GL_QUADRATIC_ATTENUATION)
●如果光源为方向性光源,那么衰减因子为1。

8.聚光灯效果:

●光源不是聚光灯(GL_SPOT_CUTOFF为180.0),取1;
●光源是聚光灯但是顶点位于聚光灯光锥外,取0;
●其他情况为Max{V*D,0}^exp (exp为镜面反射指数值)

5、 分析程序并计算

请看下面的一段程序,并计算三个顶点○1、○2和○3处的光照的颜色值。

void init(void) 
{
   
   GLfloat mat_specular[] = {
    1.0, 1.0, 1.0, 1.0 };
   GLfloat mat_shininess[] = {
    50.0 };
   GLfloat light_position[] = {
    1.0, 1.0, 1.0, 0.0 };

   glClearColor (0.0, 0.0, 0.0, 0.0);
   glShadeModel (GL_SMOOTH);

   glLightModelf(GL_LIGHT_MODEL_LOCAL_VIEWER, GL_FALSE);
   //glLightModelf(GL_LIGHT_MODEL_TWO_SIDE, GL_FALSE);
   glMaterialfv(GL_FRONT, GL_SPECULAR, mat_specular);
   glMaterialfv(GL_FRONT, GL_SHININESS, mat_shininess);
   glLightfv
  • 2
    点赞
  • 16
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值