1、纹理,纹理,纹理,Texture Mapping,图像:即纹理,几何,屏幕,纹理,256 x 256的图像映射到一个长方形,并进行透视投影。,纹理映射,纹理映射的执行步骤,定义纹理定义纹理的数据, 维数, 多重性(多分辨率), 边界值 指定纹理的映射方式激活纹理映射glEnable() v.s glDisable()GL_TEXTURE_1D GL_TEXTURE_2DGL_TEXTURE_3D 确定纹理坐标和几何坐标的关系-绘制场景,定义一维纹理,一维纹理是高度为1的二维纹理void glTexImage1D(GL_TEXTURE_1D, /必须如此GLint level, /mip层数,
2、0表示无多重性GLint components, /颜色调整或混合中使用的分量/1-R; 2-RA; 3-RGB; 4-RGBAGLsizei, width, /纹理宽, 须为2m或 2m+2dGLint border, /纹理边界值d, 缺省为0GLenum format, /纹理数据的格式(RGBA)/_COLOR_INDEX, _RGB, _RGBA, _RED, _ALPHAGLenum type, /纹理数据的类型: GL_BYTE, GL_SHORT/GL_INT, GL_FLOAT, GL_UNSIGNED_INTconst GLvoid* data /纹理数据);,定义二维纹理
3、,二维纹理是一个二维纹素数组void glTexImage2D(GL_TEXTURE_2D, /必须如此GLint level, /mip层数GLint components, /颜色调整或混合中使用的分量GLsizei, width, /纹理宽, 须为2的幂次GLsizei, height, /纹理高, 须为2的幂次 Glint border, /纹理边界值, 缺省为0Glenum format, /纹理数据的格式(RGBA)Glenum type, /纹理数据的类型const Glvoid* data /纹理数据);,定义二维纹理,二维多重纹理 (手工方法)glTexImage2D(GL_
4、TEXTURE_2D, 0, GL_RGBA, 64, 64, 0, GL_UNSIGNED_BYTE, img0);glTexImage2D(GL_TEXTURE_2D, 1, GL_RGBA,32, 32, 0, GL_UNSIGNED_BYTE, img1);glTexImage2D(GL_TEXTURE_2D, 2, GL_RGBA,16, 16, 0, GL_UNSIGNED_BYTE, img2);glTexImage2D(GL_TEXTURE_2D, 5, GL_RGBA,1, 1, 0, GL_UNSIGNED_BYTE, img5);,纹理坐标,纹理坐标定义void glTe
5、xCoord1234sifd (TYPE coords);void glTexCoord1234sifdv(TYPE coords);s, t, r, q Eg. glBegin(GL_QUADS);glNormalef(0.0f, 0.0f, 1.0f);glTexCoord2f(0.0, 0.0); glVertex3f( 3, 3,0);glTexCoord2f(1.0, 0.0); glVertex3f(-3, 3,0);glTexCoord2f(1.0, 1.0); glVertex3f(-3,-3,0);glTexCoord2f(0.0, 1.0); glVertex3f( 3,-
6、3,0);glEnd();,纹理参数设置函数void glTexParameterifv ( GL_TEXTURE_?D, /纹理GLenum para, /需要设置的参数TYPE value); /设置参数的值 纹理缩放(滤波)Para: Value:GL_TEXTURE_MAG_FILTER GL_NEARESTGL_TEXTURE_MIN_FILTER GL_LINEAR GL_TEXTURE_MIN_FILTER Additional Value:GL_NEAREST_MIPMAP_NEAREST *_LINEARGL_LINEAR_MIPMAP_NEAREST *_LINEAR,纹理
7、参数设置,纹理映射的质量控制高质量 滤波参数及其值GL_TEXTURE_MAG_FILTER GL_LINEARGL_TEXTURE_MAG_FILTER GL_LINEAR_MIPMAP_NEAREST 中质量 滤波参数及其值GL_TEXTURE_MAG_FILTER GL_LINEARGL_TEXTURE_MAG_FILTER GL_LINEAR低质量 滤波参数及其值GL_TEXTURE_MAG_FILTER GL_NEAREST GL_TEXTURE_MAG_FILTER GL_NEAREST,纹理参数设置,纹理参数设置函数void glTexParameterifv (GL_TEXTU
8、RE_?D, GLenum para, TYPE value); 重复方式(大于1.0的纹理坐标)Para: Value:GL_TEXTURE_WRAP_S GL_CLAMPGL_TEXTURE_WRAP_T GL_REPEAT Eg:glTexParameterf(, GL_TEXTURE_WRAP_S, GL_REPEAT);glTexParameterf(, GL_TEXTURE_WRAP_T, GL_CLAMP);,纹理参数设置,纹理环境,即纹理映射到形体表面的方式void glTexEnvifv(GL_TEXTURE_ENV,GLenum para, TYPE value);Para
9、: Value:GL_TEXTURE_ENV_MODE GL_DECALGL_MODULATEGL_BLENDGL_TEXTURE_ENV_COLOR 四元组RGBA, GL_BLEND设置时有效,纹理环境,void glTexImage2D(GL_TEXTURE_2D, /必须如此GLint level, /mip层数GLint components, /颜色调整或混合中使用的分量GLsizei, width, /纹理宽, 须为2的幂次GLsizei, height, /纹理高, 须为2的幂次Glint border, /纹理边界值, 缺省为0 ); components 1光照值; 2光照+A值; 3RGB值; 4RGBA值,作业,1.在跟踪球程序中添加菜单,实现: 开启光照和关闭光照的功能; 选择不同材质的功能(要求至少四种以上材质)。 (上节课作业) 绘制房子,并把它贴上纹理,自己用相机拍摄或从其他地方获取纹理图片。(这节课作业。上机实验也要完成! ),纹理放大,一幅3264的纹理应用到一矩形,非常近看。左图采用最近领域滤波,即对每个象素选择最近的纹素。右图采用最近四个纹素的双线性插值,块状效果明显,质量差,锯齿状消失,质量好,