计算机图形学实验报告--纹理映射

合集下载

texture的缩写

texture的缩写

texture的缩写
摘要:
1.Texture 的含义
2.Texture 的缩写
3.Texture 的应用领域
4.纹理映射的定义和作用
5.纹理映射的类型
6.纹理映射的优点
7.纹理映射的局限性
正文:
Texture 的缩写是“纹理”,它是指物体表面的触感或外观。

在计算机图形学和游戏开发领域,纹理被广泛应用于为物体表面增加细节,提高视觉效果。

纹理映射是一种将纹理贴图应用到物体表面的技术,它可以为物体表面增加纹理细节,使得物体看起来更加真实。

纹理映射的定义是,将纹理贴图通过映射技术应用到物体表面的过程。

纹理映射在计算机图形学和游戏开发中被广泛应用,它可以为物体表面增加细节,提高视觉效果。

纹理映射的作用是,通过将纹理贴图应用到物体表面,使得物体表面具有更加真实的触感和外观。

纹理映射的类型包括多种,例如环境光遮蔽、法线贴图、高光贴图等。

这些纹理映射类型各不相同,但是它们都可以为物体表面增加纹理细节,提高视觉效果。

纹理映射的优点是,它可以为物体表面增加细节,提高视觉效果。

纹理映射可以使物体表面看起来更加真实,增加用户的沉浸感。

此外,纹理映射还可以提高物体表面的光影效果,使得物体表面更加立体。

然而,纹理映射也存在一些局限性。

首先,纹理映射需要大量的计算资源,可能会导致计算机性能下降。

其次,纹理映射需要大量的纹理贴图,这会增加存储空间的需求。

基于区域分割的多曲面纹理映射的研究

基于区域分割的多曲面纹理映射的研究

2 图 像 归 一 化
因为 每个纹 理 图像 大小形 状各 不相 同 . 如果直 接 向造 型表 面做纹理 映射误 差将 可能会 很大 . 外纹理 另
图像 的 各 边 长 比例 应 当 尽 量 于 相 应 造 型 面 的 各 边 长
比例 相吻合 。 因此有必要 首先对 纹理 图像进行 归一化 操作 。所谓 归一化翻 作就 是将不 同 的几 何形 状 的纹 操 理 图像 转化 为标准 大小和 形状 的纹 理 图像 . 2显示 图

作者简介 : 章银娥 ( 9 2 , , 1 7 一) 女 临川人 , 讲师 , 究方向 为虚拟 现 实技 术及 图形 图像 研
九 期
MDR C P E瑚8 @ OE O U R . N MT 8
维普资讯
空间从而取得它们之间的比例关系。实现的函数 如下 :
sat: FALS tr E: d a =TRUE; rg
纹 理 映 射 方 法 如 下 所 述 . 先 计 算 生 成 空 间造 型 表 面 首
的 边 界 立 方 体 长 、 和 高 ; 后 , 了纹 理 计 算 方 便 。 宽 然 为
先 将 纹 理 图 像 首 先 投 影 到 纹 理 坐 标 系 中 . 中 S值 可 其


图 1多曲面纹 理映射 处理 流程 图
基金项 目 : 江西省教 学改基金 项 目( .x G一 7 1 — 8 、 No J J 0 — 1 2 ) 江西省 ‘ ‘ 十一 五’ 学规划 基金 项 目( .7 2 4 ’ 科 No0 YB 9 )
收稿 日期 :0 8 0 - 9 修 稿 日期 :0 8 0 — 2 20 — 6 1 20— 8 0

现 代 映 射纹 理 图像 的不 同部 分 , 为实 现这 一 点 , 先就 要 首 计 根据各 造型面 的特 点及 其它们之 间的 比例关系完成 纹 算 理 图像 的 分 割 .这 里 标 准 纹 理 图像 的 大 小 和 形 状 是 由 机

计算机图形学中的三维重建与渲染技术

计算机图形学中的三维重建与渲染技术

计算机图形学中的三维重建与渲染技术计算机图形学是现代计算机科学领域的一个重要分支,它研究如何利用计算机来处理和呈现图像和图形。

而在计算机图形学中,三维重建与渲染技术是一项十分关键的技术,它可以让我们在计算机上实现对三维物体的建模、可视化和呈现,是计算机图形学的核心技术之一。

一、三维重建技术三维重建技术是计算机图形学中研究三维模型建立的技术,它主要通过对物体的几何结构、纹理、色彩等特征进行探测、测量、分析和计算,从而重建出三维模型。

三维重建技术主要有以下几种:1.点云重建点云重建是三维重建中的一种常见技术,主要通过采用激光扫描技术等手段,将物体表面上的所有点云数据收集起来,然后利用点云数据预先定义的处理算法将其处理成三维模型。

点云重建技术可以重建出物体的真实几何形态,适用于自然风景模型、雕塑模型等。

2.多视图重建多视图重建是指基于多个视角下的图像,通过计算视点、视角、景深等参数建立三维模型。

多视图重建主要是通过利用相机、扫描仪等设备观察物体,并将获得的多张图像进行分析、处理和重建,最终得到完整、准确的三维模型。

多视图重建技术适用于建立物体表面细节特征丰富的模型。

3.立体视觉重建立体视觉重建技术是指基于人眼的两个视点,将不同的影像信息进行组合和重建,以建立真实、立体感强的三维模型。

立体视觉重建技术主要利用双目相机拍摄物体不同视点下的影像,通过计算两个影像之间的差异从而建立物体的三维模型。

立体视觉重建技术适用于建立真实、逼真的物体模型。

二、渲染技术渲染技术是指将三维模型转化为二维图像的过程,主要是通过光线追踪、阴影处理、纹理映射、透视变换等手段,将三维模型转化为视觉上真实、逼真的二维图像。

渲染技术主要包括下面几个方面:1.光线追踪光线追踪是渲染技术中的一种十分重要的技术,能够以真实方式呈现物体的阴影、反射和折射效果。

光线追踪的原理就是根据物体表面法线方向,从视点向各个方向发射光线,当光线与物体发生交叉时,计算光线的反射、折射、透明等信息,最终生成真实逼真的图像。

《计算机图形学》实验报告

《计算机图形学》实验报告

实验报告模板《计算机图形学》实验报告一、实验目的及要求1.实习三维图形的坐标系之间的变换;2.三维图形几何变换;3.掌握三维图形的坐标系之间的变换算法及三维图形几何变换的原理和实现;4.实现二维图形的基本变换(平移、旋转、缩放、错切、对称、复合等);5.实现三维图形的基本变换(平移、旋转、缩放、复合等);二、理论基础在齐次坐标理论下,二维图形几何变换矩阵可用下式表示:⎪⎪⎪⎭⎫⎝⎛===ifchebgdaTnkxx kk2,1,0,)(ϕ平移变换:[x* y* 1] =[x y 1] *0000001ts⎛⎫⎪⎪⎪⎝⎭=[t*x s*y 1]比例变换:[x* y* 1]=[x y 1] *1000101m n⎛⎫⎪⎪⎪⎝⎭=[m+x n+y 1]旋转变换:在平面上的二维图形饶原点逆时针旋转Ө角,变换矩阵为[x* y* 1]=[x y 1] *cos sin0sin cos0001θθθθ⎛⎫⎪- ⎪⎪⎝⎭= [x*cosө-y*sinө]复合变换:以上各种变换矩阵都是以原点为参照点,当以任意参照点进行变换的时候,我们就要用到复合变换矩阵。

三维变换类似于二维,在画图时,把三维坐标转换为二维即可。

三、算法设计与分析二维变换:#define dx 50#define dy 100void CCGWithVCView::OnTransScale() //平移(50,100){// TODO: Add your command handler code here// AfxMessageBox(_T("Please Insert The Move Change Code!")) ;int m[4][2]={{100,50},{50,100},{150,100},{100,50}};int i;int a[2],b[2];CDC * pDC = GetDC();for(i=0;i<3;i++){a[0]=m[i][0];a[1]=m[i][1];b[0]=m[i+1][0];b[1]=m[i+1][1];DDALine(a,b, RGB(0, 200, 255), pDC);}for(i=0;i<3;i++){a[0]=m[i][0]+dx;a[1]=m[i][1]+dy;b[0]=m[i+1][0]+dx;b[1]=m[i+1][1]+dy;DDALine(a,b, RGB(0, 200, 255), pDC);}}#define h 0.1745#include<math.h>void CCGWithVCView::OnTransRotate() //旋转{// TODO: Add your command handler code here// AfxMessageBox(_T("Please Insert The Rotate Change Code!")) ;int m[4][2]={{100,50},{50,100},{150,100},{100,50}};int i;int a[2],b[2];CDC * pDC = GetDC();for(i=0;i<3;i++){a[0]=m[i][0];a[1]=m[i][1];b[0]=m[i+1][0];b[1]=m[i+1][1];DDALine(a,b, RGB(0, 200, 255), pDC);}for(i=0;i<3;i++){a[0]=m[i][0]*cos(h)-m[i][1]*sin(h);a[1]=m[i][1]*cos(h)+m[i][0]*sin(h);b[0]=m[i+1][0]*cos(h)-m[i+1][1]*sin(h);b[1]=m[i+1][1]*cos(h)+m[i+1][0]*sin(h);DDALine(a,b, RGB(0, 200, 255), pDC);}}#define k 2;#define f 2.5void CCGWithVCView::OnTransMove() //缩放{// TODO: Add your command handler code here//AfxMessageBox(_T("Please Insert The Scale Change Code!")) ;int m[4][2]={{100,50},{50,100},{150,100},{100,50}};int i;int a[2],b[2];CDC * pDC = GetDC();for(i=0;i<3;i++){a[0]=m[i][0];a[1]=m[i][1];b[0]=m[i+1][0];b[1]=m[i+1][1];DDALine(a,b, RGB(0, 200, 255), pDC);}for(i=0;i<3;i++){a[0]=m[i][0]*k;a[1]=m[i][1]*f;b[0]=m[i+1][0]*k;b[1]=m[i+1][1]*f;DDALine(a,b, RGB(0, 200, 255), pDC);}}#define n 2#define d 0void CCGWithVCView::OnTransOther(){// TODO: Add your command handler code here//AfxMessageBox(_T("Please Insert The Other Change Code!")) ;int m[4][2]={{100,50},{50,100},{150,100},{100,50}};int i;int a[2],b[2];CDC * pDC = GetDC();for(i=0;i<3;i++){a[0]=m[i][0];a[1]=m[i][1];b[0]=m[i+1][0];b[1]=m[i+1][1];DDALine(a,b, RGB(0, 200, 255), pDC);}for(i=0;i<3;i++){a[0]=m[i][0]+n*m[i][1];a[1]=m[i][1]+d*m[i][0];b[0]=m[i+1][0]+n*m[i+1][1];b[1]=m[i+1][1]+d*m[i+1][0];DDALine(a,b, RGB(0, 200, 255), pDC);}}三维变换:#include<math.h>#define dx 100#define dy 100#define dz 0void CCGWithVCView::OnTransScale() //平移(50,100){// TODO: Add your command handler code here// AfxMessageBox(_T("Please Insert The Move Change Code!")) ;int i;int p2d[6][2];int p3d[6][3]={{400,300,0},{300,400,0},{300,300,10},{275,300,0},{400,300,0},{300,300,10}};for( i=0;i<6;i++){p2d[i][0]=p3d[i][1]-p3d[i][0]/sqrt(2);p2d[i][1]=p3d[i][2]+p3d[i][0]/sqrt(2);}int a[2],b[2];CDC * pDC = GetDC();for(i=0;i<5;i++){a[0]=p2d[i][0];a[1]=p2d[i][1];b[0]=p2d[i+1][0];b[1]=p2d[i+1][1];DDALine(a,b, RGB(0, 200, 255), pDC);}for( i=0;i<6;i++){p2d[i][0]=p3d[i][1]+dy-p3d[i][0]+dx/sqrt(2);p2d[i][1]=p3d[i][2]+dz+p3d[i][0]+dx/sqrt(2);}for(i=0;i<5;i++){a[0]=p2d[i][0];a[1]=p2d[i][1];b[0]=p2d[i+1][0];b[1]=p2d[i+1][1];DDALine(a,b, RGB(0, 0, 255), pDC);}}#define k 0.1745void CCGWithVCView::OnTransRotate() //旋转{// TODO: Add your command handler code here// AfxMessageBox(_T("Please Insert The Rotate Change Code!")) ;int i;int p2d[6][2];int p3d[6][3]={{400,300,0},{300,400,0},{300,300,10},{275,300,0},{400,300,0},{300,300,10}};for( i=0;i<6;i++){p2d[i][0]=p3d[i][1]-p3d[i][0]/sqrt(2);p2d[i][1]=p3d[i][2]+p3d[i][0]/sqrt(2);}int a[2],b[2];CDC * pDC = GetDC();for(i=0;i<5;i++){a[0]=p2d[i][0];a[1]=p2d[i][1];b[0]=p2d[i+1][0];b[1]=p2d[i+1][1];DDALine(a,b, RGB(0, 200, 255), pDC);}for( i=0;i<6;i++){p2d[i][0]=p3d[i][1]*cos(k)-p3d[i][2]*sin(k)-p3d[i][0]/sqrt(2);p2d[i][1]=p3d[i][2]*cos(k)+p3d[i][1]*sin(k)+p3d[i][0]/sqrt(2);}for(i=0;i<5;i++){a[0]=p2d[i][0];a[1]=p2d[i][1];b[0]=p2d[i+1][0];b[1]=p2d[i+1][1];DDALine(a,b, RGB(0, 0, 255), pDC);}}四、程序调试及结果的分析二维:三维:五、实验心得及建议在实验过程中,尽管过程中任由许多不会的地方,而且有待于今后的提高和改进,但我加深了对书本上知识的理解与掌握,同时也学到了很多书本上没有东西,并积累了一些宝贵的经验,这对我以后的学习与工作是不无裨益的。

buffergeometry 的uv参数

buffergeometry 的uv参数

buffergeometry 的uv参数BufferGeometry是Three.js中的一个重要概念,用于表示和操作几何体的数据。

其中,uv参数是BufferGeometry中的一个属性,用于定义纹理映射的坐标。

本文将详细介绍uv参数的作用和使用方法。

一、UV参数的概念和作用在计算机图形学中,纹理映射是一种将二维图像映射到三维物体表面的技术。

UV参数就是用来定义纹理映射坐标的一对二维坐标。

其中,U表示横向坐标,V表示纵向坐标。

通过调整UV参数,我们可以控制纹理在物体表面的显示方式,实现各种效果,如贴图、纹理平铺、纹理旋转等。

二、在BufferGeometry中使用UV参数在使用BufferGeometry创建几何体时,可以通过设置uv参数来定义纹理映射坐标。

具体步骤如下:1. 创建BufferGeometry对象:```const geometry = new THREE.BufferGeometry();```2. 创建顶点坐标数组和UV参数数组:```const positions = []; // 顶点坐标数组const uvs = []; // UV参数数组```3. 向顶点坐标数组和UV参数数组中添加数据:```// 添加顶点坐标数据positions.push(x1, y1, z1);positions.push(x2, y2, z2);// ...// 添加UV参数数据uvs.push(u1, v1);uvs.push(u2, v2);// ...```4. 将顶点坐标数组和UV参数数组设置到BufferGeometry对象中: ```geometry.setAttribute('position', new THREE.Float32BufferAttribute(positions, 3));geometry.setAttribute('uv', new THREE.Float32BufferAttribute(uvs, 2));```5. 创建材质对象并加载纹理:```const material = new THREE.MeshBasicMaterial({ map: texture });```6. 创建网格对象并将BufferGeometry和材质对象添加到其中:```const mesh = new THREE.Mesh(geometry, material);```通过以上步骤,我们就可以在Three.js中使用BufferGeometry的uv参数实现纹理映射效果了。

3D实现基本原理

3D实现基本原理

3D实现基本原理3D实现的基本原理是指如何利用计算机技术将二维平面变为具有立体感的三维图像。

在计算机图形学中,常用的方法有几何建模、光栅化以及纹理映射等。

1.几何建模几何建模是指通过对物体的形状、大小、位置等进行数学建模,以描述物体的三维几何特征。

常见的几何建模方法有:-点、线、面构成物体的基本元素,通过组合这些基本元素可以构造出复杂的物体。

- 体素(grid representation)是指将物体划分为一个个小立方体,并赋予其属性。

通过改变各个体素的属性可以形成一个三维的物体。

-曲线和曲面的描述方法,如贝塞尔曲线、B样条曲线等。

几何建模可以通过手工建模、扫描现实物体、计算机辅助设计等方式进行。

一旦建立了几何模型,就可以根据模型来生成物体的三维表面。

2.光栅化光栅化是将几何模型转换为图像的过程,即将物体的三维表面映射到二维平面上的像素点。

光栅化的过程需要考虑物体的可见性、投影等问题。

常见的光栅化方法有:-扫描线算法:通过扫描线与物体表面的交点,确定每一条扫描线上的像素点的颜色和深度值。

- Z-buffer算法:通过为每个像素点分配一个存储深度值的缓冲区,记录每个像素点的位置和深度信息,从而确定可见性。

-边缘标记算法:通过检测物体表面的边缘,判断像素点是否在边缘内部,从而确定可见性。

光栅化将几何模型转换为图像的过程,决定了物体在屏幕上的显示效果。

3.纹理映射纹理映射是指将二维图像映射到物体表面上的过程,以增加真实感和细节。

-纹理坐标的计算:将二维图像的像素点与物体表面上的点一一对应起来,得到纹理坐标。

-纹理坐标的插值:根据纹理坐标的变化,在物体表面上进行插值计算得到纹理坐标。

-颜色的计算:根据纹理坐标得到对应像素的颜色值,将颜色赋值给物体表面的对应点。

纹理映射使得物体表面具有更加真实的细节和纹理。

综上所述,实现3D图像的基本原理是通过几何建模来描述物体的三维几何特征,通过光栅化将几何模型转换为图像,再利用纹理映射增加真实感和细节。

计算机图形学(孙家广.第三版)-第4章

波长
400
700
nm
– 各波长的能量 分布不均匀, 为彩色光
– 包含一种波长
能 量
P ( )
波长
400
能 量
700
nm
的能量,其他 波长都为零, 是单色光
P ( )
波长

400
700
nm
• 光谱能量分布定义颜色十分麻烦
• 光谱与颜色的对应关系是多对一
• 两种光的光谱分布不同而颜色相同的现 象称为“异谱同色”
• 颜色模型的用途是在某个颜色域内方便 地指定颜色
RGB颜色模型
• 通常使用于彩色光栅图形显示设备中
• 真实感图形学中的主要的颜色模型
蓝(0,0,1) 青(0,1,1)
• 采用三维直角坐标系 • RGB立方体
内容
• 颜色视觉
简单光照明模型
• 局部光照明模型 光透射模型 • 纹理及纹理映射 整体光照明模型 • 实时真实感图形学技术
4.1 颜色视觉
分析以下的基本现象: 为什么计算R、G、B三个分量就可 以使人有颜色的视觉感觉?
基本概念
• 颜色是外来的光刺激作用于人的视觉器 官而产生的主观感觉,影响的因素有:
三 刺 激 值 0.2
0
-0.2 400 500 600 700

波长
nm
CIE-XYZ系统
• CIE-RGB曲线一部分三刺激值是负数, 表明只能在给定光上叠加曲线中负值对 应的原色,去匹配另两种原色的混合
– 计算不便,不易理解
• 1931年CIE-XYZ系统,利用三种假想的 标准原色X、Y、Z,使颜色匹配三刺激 c xX yY zZ 值都是正值: • 任何颜色都能由标准三原色混合匹配(三

纹理映射技术在三维游戏引擎中的应用_左鲁梅

基金项目:国家863计划项目 数字林业公共技术平台研究 和教育部重点项目 森林植被可视化的基础性研究 (重点03020)收稿日期:2004-03-31第21卷 第10期计 算 机 仿 真2004年10月文章编号:1006-9348(2004)10-0146-03纹理映射技术在三维游戏引擎中的应用左鲁梅1,黄心渊2(1.北方工业大学CAD 中心,北京100041;2.北京林业大学信息学院,北京100083)摘要:游戏引擎是游戏的心脏,它在后台控制着游戏中各个模块同时有序的工作,渲染模块是游戏引擎中最复杂,也是最能体现游戏效果的模块。

纹理映射技术的应用能增强场景绘制的真实感并能提高场景的渲染速度。

该文是对三维游戏引擎中的渲染模块的初步研究,首先介绍了三维游戏引擎系统以及纹理映射技术,使用OpenGL 图形库实现了大环境天空盒、三维地形的贴图效果、并加入了地面建筑物,再现了真实的三维场景。

介绍了纹理映射技术在三维游戏引擎中的应用及作用。

关键词:三维游戏引擎;纹理映射;渲染模型中图分类号:TP391.41 文献标识码:ATexture Mapping and Its Application in 3D Game EngineZ UO Lu-mei 1,HUANG Xin-yuan 2(1.The CAD Center,North China Univ.of Tech.,Beijing 100041,China;2.The Communication Dept.,Beijing Forestry Univ.,Beijing 100083,China)ABSTRACT:The game engine is the heart of the game,which controls all the other models in the game to work orderly at one time.The rending model is the most complex and displays the quali ty of the game.In the rending,the application of texture mappi ng can strengthen the reality and increase the renderi ng speed of the scene.T his paper is the elementary study of rending model in 3D game engine,first we in troduce the system of 3D game engine and texture mapping,then we realize the texture mappi ng effect of environ ment-sky and the 3D terrain using OpenGL,and add the construction,reappearance the reali ty of the 3D scene.The paper also introduces the application and effect of texture mapping in 3D game engine.KEYWORDS:3D Game Engine;Texture mapping;Rending model1 三维游戏引擎2003年,国家科技部首次将网络游戏技术纳入国家863科技发展计划,这标志着国家对年增长率近3倍、带动上下游经济增长超过10倍的网络游戏产业态度已经明朗化。

计算机图形学名词解释

计算机图形学名词解释计算机图形学是研究如何使用计算机生成、处理和显示图像的学科。

在计算机图形学领域中,有许多术语和概念,下面将解释其中的几个常见名词。

1. 三维模型(3D Model):三维模型是一种用数学方法来描述物体外形的表示方式。

它通常由一系列的点、线、面或体素构成,可以通过渲染算法生成真实的图像。

2. 着色器(Shader):着色器是一种用于计算图像颜色的程序。

在图形渲染过程中,着色器负责为每个像素计算其颜色值,并受到光照、材质和纹理等因素的影响。

3. 光照模型(Lighting Model):光照模型用于描述光源和物体之间的相互作用。

它考虑了光照的强度、颜色、反射和折射等因素,以计算出每个像素的颜色。

4. 纹理映射(Texture Mapping):纹理映射是将二维图像贴到三维模型表面的过程。

它可以给模型增加细节和真实感,并使模型在渲染时更加逼真。

5. 多边形填充(Polygon Filling):多边形填充是将多边形的内部区域填充上颜色或纹理的过程。

常见的填充算法有扫描线填充和边缘填充。

6. 抗锯齿(Anti-aliasing):抗锯齿是一种图像处理技术,用于减少图像边缘锯齿状的感觉。

通过在边缘周围添加像素的灰度来模糊边缘,以使其看起来更加平滑。

7. 阴影(Shading):阴影是指由于物体遮挡光线而产生的暗影效果。

在计算机图形学中,可以使用不同的算法来模拟阴影效果,如平面阴影、深度阴影和阴影贴图等。

8. 曲线和曲面(Curves and Surfaces):曲线和曲面是表示物体形状的数学工具。

它们可以通过数学公式或控制点来定义,并用于建模和渲染三维物体。

以上是计算机图形学中的一些常见名词的解释,这些名词和概念在图形学的理论和实践中都有重要的作用。

基于分类的纹理映射方法综述


Vo . 7 No 5 12 .A
Sp 0 6 e .2 0
基 于分类 的纹理 映射 方法综述
卢章 平 ,丁立 军 ,戴立玲
( 江苏大学 机械工程学院 , 江苏 镇 江 2 2 1 ) 10 3
摘要: 对纹理 映射 的算法进 行分类 , 从二维纹理映射和三维纹理映射 两个大类分别进行阐述. 维 二 纹理映射 包括纹理的获取方法和映射方法两部分, 映射方法 中涵盖 了 参数化曲面、 非参数化曲面和 基 于 小 变形 的纹 理 映射 方法 的介 绍. 三维纹 理 映射介 绍 了基 于三 维纹 理 函数 的映 射 , 包括 三 维纹理 的定义和映射 方法研 究; 由于在虚拟世界的建造 中对真 实物体计算机重建的需要 , 就用于 实物计算 机三维重建 中实物三雏表 面纹理的提取和映射算法等进行 了研究和探讨. 关键 词 : 理 分类 ; 理 映射 ; 维 纹理 ;三 维纹 理 ; 建 纹 纹 二 重
3 e tr u cini cu i gt ed f i o f D txuea d tersac n txu ema pn to r D txu efn t n ldn e nt n o e tr n ee rh o e tr p ig meh d ae o h i i 3 h
Ab t a t h l o t m f tx u e ma p n s d s i e no t o man c tg r s D a d 3 e t r sr c :T e ag r h o e t r p i g i a s i d i t w i ae o e ,2 n D t xu e i f i ma p n s o satw t p i g .T tr i h,2 e t r p i g c n it o e t n n l d n h t o fo t i i g D tx u e ma p n o sss f wo s ci s i c u iБайду номын сангаасg t e me h d o b a n n t o tx u e a d ma p n .I h sp r ,txu e ma p n g rt m f a a trs r c , o — aa trs ra e e t r n p i g n t i a t e tr p i g a o h o r me e u f e n n p r me e u f c l i p a a d ma p n k l b s d o mal e t r itrin a e c n e n d n p i g s i a e n s l xu e d so o r o c r e .F r emo e h e h oo y b s d o l t t u h r r ,t e t c n l g a e n t
  1. 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
  2. 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
  3. 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。

计算机图形学实验报告 实验名称: 纹理映射创建 学号 姓名 指导老师: 成绩: 教师评语: 实验内容: 创建一个正方体并使其坐标变幻 关键代码:(加注释) AUX_RGBImageRec *LoadBMP(char *Filename)// Loads A Bitmap Image { FILE *File=NULL; // File Handle if (!Filename) // Make Sure A Filename Was Given { return NULL; // If Not Return NULL } File=fopen(Filename,"r"); // Check To See If The File Exists if (File) // Does The File Exist? { fclose(File); // Close The Handle return auxDIBImageLoad(Filename) // Load The Bitmap And Return A Pointer } return NULL // If Load Failed Return NULL } int LoadGLTextures() // Load Bitmaps And Convert To Textures { int Status=FALSE; // Status Indicator AUX_RGBImageRec *TextureImage[2] // Create Storage Space For The Texture memset(TextureImage,0,sizeof(void *)*1); // Set The Pointer To NULL //Load The Bitmap, Check For Errors, If Bitmap's Not Found Quit if (TextureImage[0]=LoadBMP("Data/Crate.bmp")) { Status=TRUE; // Set The Status To TRUE glGenTextures(1, &texture[0]) // Create The Texture // Typical Texture Generation Using Data From The Bitmap glBindTexture(GL_TEXTURE_2D, texture[0]); glTexImage2D(GL_TEXTURE_2D, 0, 3, TextureImage[0]->sizeX, TextureImage[0]->sizeY, 0, GL_RGB, GL_UNSIGNED_BYTE, TextureImage[0]->data); glTexParameteri(GL_TEXTURE_2D,GL_TEXTURE_MIN_FILTER,GL_LINEAR); glTexParameteri(GL_TEXTURE_2D,GL_TEXTURE_MAG_FILTER,GL_LINEAR); } 重要数据结构或类: CreateGLWindow() DrawGLScene(GLvoid) InitGL(GLvoid) KillGLWindow(GLvoid) ReSizeGLScene() WinMain() WndProc() HGLRC hRC=NULL;// 窗口着色描述表句柄 HDC hDC=NULL;// OpenGL渲染描述表句柄 HWND hWnd=NULL // 保存我们的窗口句柄 HINSTANCE hInstance;// 保存程序的实例 bool keys[256];// 保存键盘按键的数组 bool active=TRUE; // 窗口的活动标志,缺省为TRUE bool fullscreen=TRUE;// 全屏标志缺省,缺省设定成全屏模式 GLfloat rtri GLfloat rquad;

AUX_RGBImageRec *LoadBMP(char *Filename) LoadGLTextures() if (TextureImage[0]) // If Texture Exists {if (TextureImage[0]->data) // If Texture Image Exists { free(TextureImage[0]->data) // Free The Texture Image Memory } free(TextureImage[0]); // Free The Image Structure } if (TextureImage[1]=LoadBMP("Data/NeHe.bmp")) { Status=TRUE; // Set The Status To T glGenTextures(1, &texture[1]) // Create The Texture // Typical Texture Generation Using Data From The Bitmap glBindTexture(GL_TEXTURE_2D, texture[1]); glTexImage2D(GL_TEXTURE_2D, 0, 3, TextureImage[1]->sizeX, TextureImage[1]->sizeY, 0, GL_RGB, GL_UNSIGNED_BYTE, TextureImage[1]->data); glTexParameteri(GL_TEXTURE_2D,GL_TEXTURE_MIN_FILTER,GL_LINEAR); glTexParameteri(GL_TEXTURE_2D,GL_TEXTURE_MAG_FILTER,GL_LINEAR); } if (TextureImage[1]) // If Texture Exists { if (TextureImage[1]->data) // If Texture Image Exists { free(TextureImage[1]->data);// Free The Texture Image Memory } free(TextureImage[1]); // Free The Image Structure } return Status // Return The Status }

DrawGLScene(GLvoid) // 从这里开始进行所有的绘制 { glClear(GL_COLOR_BUFFER_BIT | GL_DEPTH_BUFFER_BIT); // 清除屏幕及深度缓存 glLoadIdentity(); glTranslatef(-1.0f,0.0f,-8.0f); // 先右移再移入屏幕

glRotatef(x,1.0f,0.0f,0.0f); // 在X轴上旋转立方体 glRotatef(y,0.0f,1.0f,0.0f); // 在Y轴上旋转立方体 glRotatef(z,0.0f,1.0f,1.0f); // 在YZ轴上旋转立方体

glBindTexture(GL_TEXTURE_2D, texture[0]); glBegin(GL_QUADS);

流程图: 创建窗口

修改窗口大小 读取图片文件 存储纹理

载入图片 创建纹理

创建模型并使其坐标变换

销毁窗口 // Front Face glTexCoord2f(0.0f, 0.0f); glVertex3f(-1.0f, -1.0f, 1.0f); glTexCoord2f(1.0f, 0.0f); glVertex3f( 1.0f, -1.0f, 1.0f); glTexCoord2f(1.0f, 1.0f); glVertex3f( 1.0f, 1.0f, 1.0f); glTexCoord2f(0.0f, 1.0f); glVertex3f(-1.0f, 1.0f, 1.0f); glEnd(); glBindTexture(GL_TEXTURE_2D,texture[0]); glBegin(GL_QUADS); // Back Face glTexCoord2f(1.0f, 0.0f); glVertex3f(-1.0f, -1.0f, -1.0f); glTexCoord2f(1.0f, 1.0f); glVertex3f(-1.0f, 1.0f, -1.0f); glTexCoord2f(0.0f, 1.0f); glVertex3f( 1.0f, 1.0f, -1.0f); glTexCoord2f(0.0f, 0.0f); glVertex3f( 1.0f, -1.0f, -1.0f); glEnd(); glBindTexture(GL_TEXTURE_2D, texture[1]); glBegin(GL_QUADS); // Top Face glTexCoord2f(0.0f, 1.0f); glVertex3f(-1.0f, 1.0f, -1.0f); glTexCoord2f(0.0f, 0.0f); glVertex3f(-1.0f, 1.0f, 1.0f); glTexCoord2f(1.0f, 0.0f); glVertex3f( 1.0f, 1.0f, 1.0f); glTexCoord2f(1.0f, 1.0f); glVertex3f( 1.0f, 1.0f, -1.0f); glEnd(); glBindTexture(GL_TEXTURE_2D, texture[2]); glBegin(GL_QUADS); // Bottom Face glTexCoord2f(1.0f, 1.0f); glVertex3f(-1.0f, -1.0f, -1.0f); glTexCoord2f(0.0f, 1.0f); glVertex3f( 1.0f, -1.0f, -1.0f); glTexCoord2f(0.0f, 0.0f); glVertex3f( 1.0f, -1.0f, 1.0f); glTexCoord2f(1.0f, 0.0f); glVertex3f(-1.0f, -1.0f, 1.0f); glEnd(); glBindTexture(GL_TEXTURE_2D, texture[3]); glBegin(GL_QUADS); // Right face glTexCoord2f(1.0f, 0.0f); glVertex3f( 1.0f, -1.0f, -1.0f); glTexCoord2f(1.0f, 1.0f); glVertex3f( 1.0f, 1.0f, -1.0f); glTexCoord2f(0.0f, 1.0f); glVertex3f( 1.0f, 1.0f, 1.0f); glTexCoord2f(0.0f, 0.0f); glVertex3f( 1.0f, -1.0f, 1.0f); glEnd(); glBindTexture(GL_TEXTURE_2D, texture[4]); glBegin(GL_QUADS); // Left Face glTexCoord2f(0.0f, 0.0f); glVertex3f(-1.0f, -1.0f, -1.0f); glTexCoord2f(1.0f, 0.0f); glVertex3f(-1.0f, -1.0f, 1.0f); glTexCoord2f(1.0f, 1.0f); glVertex3f(-1.0f, 1.0f, 1.0f);

相关文档
最新文档