设为首页 加入收藏

TOP

OpenGL超级宝典学习笔记——纹理高级(一)(二)
2015-02-25 22:43:04 来源: 作者: 【 】 浏览:67
Tags:OpenGL 超级 宝典 学习 笔记 纹理 高级
一样。


纹理压缩时非常流行的特性。更小的纹理意味着更快的加载速度,更快地在网上传输,更快地拷贝到显卡中,可以加载更多的纹理。下面做了个简单的实验:


image


不压缩和压缩后的图片大小的对比,压缩前是196kb左右,压缩后只有32kb了:


GLint flag;
glGetTexLevelParameteriv(GL_TEXTURE_2D, 0, GL_TEXTURE_COMPRESSED, &flag);
printf("compress flag : %d\n", flag);
glGetTexLevelParameteriv(GL_TEXTURE_2D, 0, GL_TEXTURE_COMPRESSED_IMAGE_SIZE, &flag);
printf("compress size : %d\n", flag);


image


?


在前面我们学习过使用纹理坐标来把纹理映射到几何图形上。在球体和平滑的平面上手动指定纹理坐标是简单的。但是遇到了复杂的表面,我们要为其指定纹理坐标就有写困难了。OpenGL提供了自动生成纹理坐标的特性来解决这个问题。


通过glEnable来开启S,T,R和Q的纹理坐标自动生成:


glEnable(GL_TEXTURE_GEN_S);


glEnable(GL_TEXTURE_GEN_T);


glEnable(GL_TEXTURE_GEN_R);


glEnable(GL_TEXTURE_GEN_Q);


当自动生成纹理坐标的功能被开启,那么glTexCoord的函数调用将被忽略。OpenGL为自动为每一个顶点计算纹理坐标。我们可以通过相应的glDisable来关闭纹理坐标的自动生成。


我们可以通过下面的两个函数来设置自动生成纹理坐标的方法:


void glTexGenf(GLenum coord, GLenum pname, GLfloat param);


void glTexGenfv(GLenum coord, GLenum pname, GLfloat *param);


第一个???数指定了纹理坐标轴,可以是GL_S,GL_T,GL_R或GL_Q。第二个参数必须是GL_TEXTURE_SPHERE,GL_OBJECT_PLANE或GL_EYE_PLANE.最后一个参数设置纹理生成的方法或模式。glTexGen也有相应的GLint和GLdouble模式。


下面是TEXGEN示例:


?


当设置纹理生成的模式为GL_OBJECT_LINEAR的时候,纹理坐标生成使用的公式如下:


coord = P1*X + P2*Y + P3*Z + P4*W


其中X,Y,Z,W是被映射物体的顶点坐标值,P1-P4是平面方程的系数。纹理坐标是从此平面透视投影到几何图形上的。例如,为了从平面Z=0上投影纹理坐标S和T我们可以使用下面的代码:


注意每个坐标都可以用不同的平面方程来生成纹理坐标,我们这里把S和T坐标的平面方程设置成一样的。在这里使用了物体线性的模式,不管你怎么调整这个圆环,纹理总是固定在几何图元上的。效果如下:


image


?


当选择视觉线性模式是,纹理坐标的生成方程与物体线性模式是相似的。不同的是现在的X,Y,Z和W值代表着视点的纹理(照相机或眼睛的位置)。平面方程的那些系数也要反转过来。事实上现在所有东西都用视觉坐标来表示了。代码如下:


效果如下,纹理会随着你视角的旋转而改变了:


image


?


当纹理生成模式设置为GL_SPHERE_MAP的时候,OpenGL生成坐标的方式是物体呈现着当前纹理的倒影。想象一下鱼眼睛的效果。示例中设置球体映射模式的代码如下:


glTexGeni(GL_S, GL_TEXTURE_GEN_MODE, GL_SPHERE_MAP);


glTexGeni(GL_T, GL_TEXTURE_GEN_MODE, GL_SPHERE_MAP);


效果如下:


image


为了获得更为逼真的效果,使用立方体映射。但球体映射还是有一定用途的,因为它只要求1个纹理开销较小,而立方体映射则要6个纹理,如果你不需要真正的反射,球体映射可以满足你的要求了。


首页 上一页 1 2 下一页 尾页 2/2/2
】【打印繁体】【投稿】【收藏】 【推荐】【举报】【评论】 【关闭】 【返回顶部
分享到: 
上一篇OpenGL超级宝典学习笔记——纹理.. 下一篇OpenGL超级宝典学习笔记——纹理..

评论

帐  号: 密码: (新用户注册)
验 证 码:
表  情:
内  容: