OpenGL ES 纹理阵列的实现
太阳火神的美丽人生 (http://blog.csdn.net/opengl_es)
本文遵循“署名-非商业用途-保持一致”创作公用协议
以下是纹理的参数设置,对这些参数,绝对脑袋大好几圈儿。
+ (void)setTextureParameter { // It can be GL_NICEST or GL_FASTEST or GL_DONT_CARE. GL_DONT_CARE by default. glHint(GL_GENERATE_MIPMAP_HINT, GL_NICEST); glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_MIN_FILTER, GL_LINEAR); glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_MAG_FILTER, GL_LINEAR); glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_WRAP_S, GL_CLAMP_TO_EDGE); glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_WRAP_T, GL_CLAMP_TO_EDGE); }
不过,今天在三维模型中,想把一个房间的屋顶和地面换成适合的图片,但从网上下载的图片都不太大,我的贴图坐标是整个贴满这个长方体底面儿的所有三角形(这句话,太精炼了,包含了太丰富的内容在里面,不过只有你知道,你才能看得懂)但这张图如果被拉伸后,一整个花铺满地面,确实不好看,我想让它自动的复制拼合成一大张,再贴上去,这样一个地面,就由N多个这个图案的花铺就的了,这样子才好看些。
其实,在 3DMAX 中看到别人这样弄过,即然 3DMAX 能弄,我们OpenGL ES中也应该能弄,不过具体怎样弄,还不知道。
突然想到上面的那堆让人脑袋大好几圈的纹理参数,最后两行是纹理的S坐标和T坐标,换了所有三个:
+ (void)setTextureParameter { // It can be GL_NICEST or GL_FASTEST or GL_DONT_CARE. GL_DONT_CARE by default. glHint(GL_GENERATE_MIPMAP_HINT, GL_NICEST); glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_MIN_FILTER, GL_LINEAR); glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_MAG_FILTER, GL_LINEAR); glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_WRAP_S, GL_REPEAT); glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_WRAP_T, GL_MIRRORED_REPEAT); }
结果还是一个样子,具体这些参数是重复什么,还真的搞不清楚。
无耐想到一个损招,说它损,是因为要增加很多的与GPU的交互过程,所以看看效果就行了,最好不用,多用些功夫在研究OpenGL ES本身提供的功能上。
这招就是,人为地把那个面上的三角形进行分组,这个需要设计一个算法,然后贴同样的一张图,纹理坐标不变。
说来,我也不会去试它了,耽误工夫,我还是先用photoshop组出一张来为好,这样涉及OpenGL ES的复杂性降到最低,才能突现出研究目标,避勉引入杂质,影响对进程的判断。
时间: 2024-10-30 21:23:53