简易太阳系
本程序是基于纹理技术和光照处理技术来模拟简易太阳系的,借鉴了网上一些纹理贴
图的方法。下面简要介绍一下所用的方法。 纹理贴图技术也叫纹理映射技术,它是计算
机图形学中广泛应用的一项重要技术。传统的几何造型只能表示景物的形状,无法描述景
物表面的微观细节,而利用纹理图像来描述景物表面各点处的反射属性,可以达到模拟景
物表面丰富的纹理细节的目的,提高计算机生成图形的真实性。另一方面,采用纹理映射
的方法可以大大地简化建模的过程。比如,同是一栋大楼表面,若完全用建模的方法来构
造,则需要画出大楼的每一扇门、每一扇窗户;若采用纹理映射,只需建立简单的长方体
模型,用拍下的大楼外观图片贴至模型表面即可。相比之下,工作量要小得多。
纹理映射是将指定图像的一部分映射到允许进行纹理映射的每个图段上。这种映射伴随
着使用一幅图像的颜色到某一图段的(s,t,r)坐标所指示的位置上并修改该图段的 RGBA
颜色。但要特别注意的是,在 OpenGL 中,纹理映射仅在 RGBA 模式下说明,在颜色索
引模式下,它的使用未作定义。概括地说,使用纹理绘制的一般步骤为:定义纹理贴图、
控制纹理、说明纹理贴图方式,定义纹理坐标等。
纹理的定义有两种:连续法和离散法。连续法把纹理定义为一个二元函数,函数的定义
域就是纹理空间。而离散法则是把纹理定义在一个二维数组中,该数组表示纹理空间中行
间隔和列间隔固定的一组网格点上的纹理值。网格点之间的其它点的纹理值可以通过对相
邻网格点上纹理值进行插值来获得。通过纹理空间与物体空间之间的坐标变换,可以把纹
理映射到物体表面。一般来说,离散法是较为常用的纹理定义方法。其实现函数为
glTexlmage2D()。该函数的原型如下:void glTexImage2D(Gl_enum target,GLint
level,Gl_enum compo—nents, GLsizei width, GLsizei height, Glint
border,Gl_enumformat。Gl_enumtype,const GLvoid pixels);其中:target 指
定纹理映射,此处必须是 GL—TEXT—URE 2D;level 指定纹理图像分辨率的级数,当只
有一种分辨率时,level=0;Components 是选择用于调整和混合的成分;width 和
height 分别指定纹理图像的宽和高,必须是 2 ,凡为正数;Border 为边界的宽度,必须
是 0 和 1;format 和 type 分别指定纹理映射的格式和数据类型;Pixels 指定一个指针,
指向纹理数据在内存中的位置。
纹理图像在映射到物体时会产生许多问题。这些问题主要有纹理图像的纹理怎样对应到
- 1
- 2
- 3
- 4
- 5
- 6
前往页