OpenGL实现光源移动与材质变化的计算机图形学实验

需积分: 3 2 下载量 181 浏览量 更新于2024-09-18 收藏 811KB DOC 举报
"光源移动实验2(附源代码) - 计算机图形学实验,使用OpenGL实现光源的移动,包括光源控制、材质设定及贴图应用" 在计算机图形学中,OpenGL是一个广泛使用的跨语言、跨平台的图形库,用于生成二维、三维图像。这个实验"光源移动实验2"旨在让学生理解和掌握如何使用OpenGL来控制光源的位置,调整物体的材质,以及进行纹理贴图。实验中,以一个三维茶壶作为示例对象,通过键盘和鼠标交互来展示这些特性。 1. 光源控制: 实验中,光源的位置可以通过键盘上的'w''s''a''d''q''e'键进行调整。'w''s'控制光源的y坐标,'a''d'控制x坐标,'q''e'控制z坐标。此外,还提供了一个右击菜单,允许用户直接设置光源位置,通过改变`Light_PosType`数组的值来实现光源在任意位置的效果。光源的初始化和更新都在`myDisplay()`函数内完成,其中`glLightfv()`函数用于设置光源的属性,如位置和颜色。 2. 材质设定: 物体的材质对光照反应的影响至关重要。在`myDisplay()`中,首先给茶壶赋予了初始的材质属性。通过鼠标右键菜单,用户可以选择预设的材质属性或自定义材质参数。自定义材质参数可能包括颜色、镜面反射、环境光等,通过`glMaterialfv()`函数进行设置。 3. 贴图应用: 实验还包括了对茶壶进行纹理贴图的功能。首先,定义了一个`loadTexture()`函数加载默认图片(output.bmp)作为纹理。当用户选择右击菜单的"增加纹理贴图"选项时,会启用贴图功能。在绘制茶壶时,首先调用`loadTexture()`加载纹理,然后在绘制过程中应用这个纹理。OpenGL使用二维纹理坐标系统来映射纹理到3D模型的表面,通过`glBindTexture()`和`glTexParameteri()`等函数管理纹理,而`glBegin()`和`glEnd()`之间的`glTexCoord2f()`和`glVertex3f()`组合用于指定顶点的纹理坐标和位置。 遇到的问题是,实验者对OpenGL如何在曲面上完成贴图的机制不甚理解。在OpenGL中,贴图是通过对每个三角形的顶点指定纹理坐标,然后通过纹理坐标映射到纹理图像来实现的。纹理坐标与3D模型的几何坐标相对应,通过纹理坐标系的映射关系,使得纹理能够平滑地覆盖到曲面上。`glTexParameter()`函数可以设置纹理参数,如过滤模式,以影响纹理显示的质量。 这个实验提供了一个实际操作的平台,帮助学习者深入理解OpenGL的光照、材质和纹理贴图概念,对于提升计算机图形学的实际编程能力非常有帮助。通过代码实践,可以更好地掌握这些关键知识点,并为进一步探索复杂的图形效果奠定基础。