用OpenGL实现纹理自动生长(蒋立华,秦雪,刘晓东,刘归荣)

来源:互联网 发布:php从入门到精通电子版 编辑:程序博客网 时间:2024/05/16 10:46

1. OpenGL 中滤波方式的不足
   OpenGL中各种效果的模型体都是在同一个平面上,可以通过放大纹理坐标得到各种不同的效果,也可以实现纹理的自动扩展。但是一旦模型变化了,纹理的坐标也要随之变化,这时就需要重新进行计算。这不仅会增大计算量,而且可能会和模型的增长产生不匹配,因此这个方式在动画过程中实际效率不是
很好。
2. 切分面方法
    滤波参数的作用对一个面的应用虽然有一些限制,但是它的自动扩展,还是给利用小幅图像生成大纹理一些提示。利用滤波参数的自动纹理生成功能,笔者设计了一种针对循环纹理可以自动随模型生长而不用重新计算纹理坐标的方法。
   2.1切分平面
   把原始平面在将要变化的方向(假设为M 方向)切分为两个相邻的平面,得到切分面-1、切分面2。

2.2对切分面’ 进行贴图
相对原始图一样的方法对切分面’ 进行贴图处理,对滤波方向进行控制如下:
glTexParametef(GL_TEXT2D,GL_TEXTURE_WRAPS_S,GL_REPEAT);
glTexParametef(GL_TEXT2D,GL_TEXTURE_WRAPS_T,GL_CLAMP);
切分面’ 可以做得很小,这样对应的纹理也可以做得很小,有效地节省了空间。
 开启S方向生长
glEnable(GL_TEXTURE_GEN_S); 

切分面2 生长
生长的时候,只要改变切分面2的S方向坐标就可以了,不用改变纹理坐标,纹理将自动生长。