三维图形的光照、贴图及阴影处理(OpenGL)

三维图形的光照、贴图及阴影处理(OpenGL)

ID:43268175

大小:32.51 KB

页数:6页

时间:2019-09-27

三维图形的光照、贴图及阴影处理(OpenGL)_第1页
三维图形的光照、贴图及阴影处理(OpenGL)_第2页
三维图形的光照、贴图及阴影处理(OpenGL)_第3页
三维图形的光照、贴图及阴影处理(OpenGL)_第4页
三维图形的光照、贴图及阴影处理(OpenGL)_第5页
资源描述:

《三维图形的光照、贴图及阴影处理(OpenGL)》由会员上传分享,免费在线阅读,更多相关内容在教育资源-天天文库

1、三维图形的光照、贴图及阴影处理(OpenGL)实验过程:一、在VS6.0中建立新工程。1、新建一个Win32Application的工程。2、向工程项目添加C++源文件。3、将OpenGL框架复制到文件中。4、设置OpenGL窗口标题。二、场景设置。1、视线处于一具有地板及前、左、右三面墙壁的空间中。2、空间顶部中央有一光源。3、空间中央有一地球仪,不断旋转。三、建立视口结构及视点属性。1、在坐标系上建立视图结构。如图。2、参数设置。窗口大小:800*600。视口大小:800*600。透视深度:0

2、.1~100。透视角:60°。视点位置:(0.0,2.0,15.0)。视线方向:z轴负方向。视点上方向:y轴正方向。3、调用函数glViewport()、gluPerspective()和gluLookAt()实现。四、绘制三维图形。1、开启深度测试模式。为防止图形重叠时出现层次混乱,必须对绘制图形进行消隐处理。直接调用函数glEnable(GL_DEPTH_TEST)开启深度测试。2、绘制地面与墙壁。调用OpenGL基本几何元素绘制过程glBegin(GL_QUADS)、glBegin(GL_Q

3、UAD_STRIP)绘制四个平面,坐标范围为:x:-10~10,y:-2~20,z:-10~10。坐标系结构如图。3、绘制地球仪。设计函数voidDrawEarth()实现地球仪的绘制,分别调用OpenGL球面绘制函数gluSphere()绘制地球形状、柱面绘制函数gluCylinder()绘制地轴两头形状。(1)参数设置。球面半径:2。球面细度:水平100,垂直100。柱面半径:0.05。柱面高度:1。柱面细度:水平50,垂直1。(2)结构如图。4、绘制模拟光源。(1)绘制“灯罩”。调用glBe

4、gin(GL_TRIANGLE_STRIP)绘制4个三角形,构成棱椎形灯罩的4个侧面。(2)绘制“灯泡”。调用gluSphere()绘制球形灯泡。(3)参数设置。灯罩底面:四个底面顶点距底面中心距离为1。灯罩高度:1。灯罩颜色:顶点为(0.8,0,0),底面顶点为(0.8,0.8,0),绘制时颜色自然过渡。灯泡半径:0.4。灯泡颜色:(1,1,0.8)。(4)整体结构如图。五、光照效果。1、设置全局环境光。调用函数glLightModelfv()调节全局泛射光强度为(1,1,1,1)。2、设置光源

5、0。调用函数glLightfv()调节光源泛射光强度为(1,1,1,1),漫反射光强度为(2,2,2,1),光源位置为(0,10,0,1),最后一个参数指定光照类型为非平行光。3、光照效果开启与关闭。光照效果仅作用于地面、墙壁、地球及地轴,模拟光源不使用光照效果。调用函数glEnable(GL_LIGHTING)和glDisable(GL_LIGHTING)实现光照模式的开启和关闭。六、设置地球仪和模拟光源的自转。调用函数glRotatef()实现旋转,转轴与地轴同一直线,设置变量earth_ro

6、tate为旋转角度,每帧更新递增4°,则绘图时自动旋转。七、纹理贴图。1、载入贴图。(1)设计函数BOOLLoadTexture()实现贴图载入,对应的贴图引用ID保存在数组texture[NTEX]中。(2)在初始化函数Initialize()中调用LoadTexture()载入贴图。2、绘制贴图。(1)调用函数glBindTexture()为下面绘制的图形绑定贴图。(2)调用函数glTexCoord2f()建立二维图形与贴图的坐标映射。(3)调用函数gluQuadricTexture()建立球

7、面与贴图的坐标映射。3、贴图模式的开启与关闭。贴图只应用于地面、墙壁和地球面,地轴和模拟光源不使用贴图。调用函数glEnable(GL_TEXTURE_2D)和glDisable(GL_TEXTURE_2D)实现贴图模式的开启和关闭。4、带光照效果和纹理贴图的图形绘制。八、阴影效果。1、平面阴影投射矩阵的推导。设投射平面α的方程为Ax+By+Cz+D=0,光源位置为L(Lx,Ly,Lz),空间某点P(Px,Py,Pz)在平面α上的投影坐标为S(Sx',Sy',Sz'),则有L,P,S共线,且ASx

8、'+BSy'+CSz'+D=0。如图。令向量L=(Lx,Ly,Lz,0),P=(Px,Py,Pz,1),S=(Sx',Sy',Sz',1),N=(A,B,C,D),则有ASx'+BSy'+CSz'+D=S·N=[k'(P–L)+L]·N=[k'P+(1–k')L]·N=0,令k=(k'–1)/k'得(P+kL)·N=0,解得k=–(P·N)/(L·N)=–(APx+BPy+CPz+D)/(ALx+BLy+CLz)。将上式代入S=P+kL可得Sx'     =Px+kLx      

当前文档最多预览五页,下载文档查看全文

此文档下载收益归作者所有

当前文档最多预览五页,下载文档查看全文
温馨提示:
1. 部分包含数学公式或PPT动画的文件,查看预览时可能会显示错乱或异常,文件下载后无此问题,请放心下载。
2. 本文档由用户上传,版权归属用户,天天文库负责整理代发布。如果您对本文档版权有争议请及时联系客服。
3. 下载前请仔细阅读文档内容,确认文档内容符合您的需求后进行下载,若出现内容与标题不符可向本站投诉处理。
4. 下载文档时可能由于网络波动等原因无法下载或下载错误,付费完成后未能成功下载的用户请联系客服处理。