OSG之纹理映射

257 阅读2分钟

物体的外观不仅包括形状,不同物体表面有着不同的颜色和图案,一个简单而有效地实现这种特性的方法就是使用纹理映射。在三维图形中,纹理映射(Texture Mapping)的方法运用广泛,使用该技术可以大大提高物体的真实感。

OSG是对底层OpenGL API的封装,OpenGL本身有非常标准而高效的纹理机制,OSG全面支持OpenGL的纹理映射机制,因此,在OSG中使用纹理映射机制非常简单。纹理映射主要包括一维纹理、二维纹理、三维纹理、凸凹纹理、多重纹理、Mipmap纹理、压缩纹理和立方纹理等。本书主要针对一维纹理、二维纹理、三维纹理、多重纹理、Mipmap 纹理和立方纹理等经常使用的几种纹理加以解释说明。

下面讲解一些纹理的基础知识,这些对于熟悉OpenGL的朋友来说,应该都是再基础不过了。

(1)纹理坐标:

enum WrapParameter

{

WRAP_S,//x轴

WRAP_T,//y轴

WRAP_R //z轴

};

(2)纹理的包装模式:

enum WrapMode { CLAMP_GL_CLAMP,//截取

CLAMP_TO_EDGE=CLAMP_TO_EDGE,//边框始终被忽略

CLAMP_TO_BORDER=GL_CLAMP_TO_BORDER_ARB,//它使用的纹理取自图像的边框,没有边框就使用 常量边框颜色

REPEAT=GL_REPEAT,//理的重复映射

MIRROR=GL_MIRRORED_REPEAT_IBM//纹理镜像的重复映射

};

(3)纹理过滤方法:

enum FilterParameter

{

MIN_FILTER,//用于缩小

MAG_FILTER //用于放大

};

(4)纹理的过滤处理:

enum FilterMode {

LINEAR=GL_LINEAR, //以周围4个像素的平均值作为纹理

LINEAR MIPMAP_LINEAR=GL_LINEAR_MIPMAP_LINEAR,//使用线性均和计算两个纹理的值

LINEAR MIPMAP_NEAREST=GL_LINEAR MIPMAP_NEAREST,//线性地改写临近的纹理单元值

NEAREST=GL_NEAREST,//取比较接近的像素作为纹理

NEAREST_MIPMAP_LINEAR=GL_NEAREST_MIPMAP_LINEAR//在两个纹理中选择最临近的纹理,并取它们之间的线性均和值

NEAREST_MIPMAP_NEAREST=GL_NEAREST_MIPMAP_NEAREST//选择最临近的纹理单元值

};

(5)纹理映射模式(处理纹理图像数据与物体本身的融合)

enum Mode {

DECAL=GL_DECAL //贴花

MODULATE=GL_MODULATE,//调整

BLEND=GL_BLEND,//混合

REPLACE=GL_REPLACE,//替换,覆盖

ADD=GL_ADD // 添加 };

(6)纹理坐标的自动生成模式:

enum Mode

{

OBJECT_LINEAR=GL_OBJECT_LINEAR//物体线性,纹理贴图与移动物体保持固定

EYE_LINEAR=GL_EYE_LINEAR//产生移动物体的动态轮廓线

SPHERE_MAP=GL_SPHERE_MAP//球体贴图

NORMAL_MAP=GL_NORMAL_MAP_ARB, //法线贴图,用于立方图纹理

REFLECTION_MAP=GL_REFLECTION_MAP_ARB//反射贴图

};

(7)贴图坐标:

enum Coord

{

S,//x

T,lly

R,//z

Q //w

};

(8)纹理的内部格式:

enum InternalFormatMode

{

USE IMAGE_DATA_FORMAT,//使用贴图本身的格式

USE_USER_DEFINED_FORMAT//使用用户自定义的格式,如GL_R3G3B3等格式

USE_ARB_COMPRESSIO, //使用ARB协会出的贴图压缩格式

USE_S3TC_DXTI_COMPRESSION//使用S3TC_DXTI压缩格式

USE_S3TC_DXT3_COMPRESSION//使用S3TC_DXT3压缩格式

USE_S3TC_DXTS_COMPRESSION//使用S3TC_DXTS压缩格式

}