相关概念
纹理坐标系:
纹素:当用一个图像初始化一个纹理缓存之后,在这个图像中的每个像素变成了纹理中 的一个纹素(texel)。从一个 1 像素高 64 像素 的图像初始化来的纹理会沿着整个T轴有1纹素 , 着S轴有64纹素 。
片元:帧缓存中的颜色像素
视口坐标:帧缓存中像素的位置。 转换为视口坐标的结果是 所有绘制的几何图形都 被拉伸以适合屏幕大小
纹理生成
CGImageRef imageRef0 =
[[UIImage imageNamed:@"leaves.gif"] CGImage];
GLKTextureInfo *textureInfo0 = [GLKTextureLoader
textureWithCGImage:imageRef0
options:[NSDictionary dictionaryWithObjectsAndKeys:
[NSNumber numberWithBool:YES],
GLKTextureLoaderOriginBottomLeft, nil]
error:NULL];
//用于标示哪个纹理
self.baseEffect.texture2d0.name = textureInfo0.name;
//target 这里是 GL_TEXTURE_2D
self.baseEffect.texture2d0.target = textureInfo0.target;
self.baseEffect.texture2d0.enabled = GL_TRUE;
//配置混合模式,多重纹理时使用
self.baseEffect.texture2d1.envMode = GLKTextureEnvModeDecal;
/*配置混合模式,也可以使用openGL的方法
//开启混合
glEnable(GL_BLEND)
//设置混合
//glBlendFunc(sourceFactor,destinationFactor)
//sourceFactor 参数用于指定每个片元的最终颜色元素是怎么影响混合的。
//destinationFactor 参数用于指定在目标帧缓存中已经存在的颜色元素会怎么影响混合。
glBlendFunc(GL_SRC_ALPHA,GL_ONE_MINUS_SRC_ALPHA)
*/
- 纹理设置
/*glTexParameteri (GLenum target, GLenum pname, GLint param);
target:GL_TEXTURE_2D等
pname: 参数名
param:参数值
*/
//取样模式
/*参数GL_TEXTURE_MIN_FILTER 多个纹素对应一个片元时怎么处理
GL_LINEAR:从相配的多个纹素中取样颜色,然后使用线性内插法来混合这些颜色以得到片元的颜色。
GL_NEAREST:与片元的U、V 坐标最接近的纹素的颜色会被取样
*/
/*参数GL_TEXTURE_MAG_FILTER 没有足够的纹素唯一映射到每个片元上
GL_LINEAR:混合附近纹素的颜色来计算片元的颜色。会有一个放大纹理的效果,并会让它模糊地出现在渲染的三角形上。
GL_NEAREST:拾取与片元的 U、V 位置接近的纹素的颜色, 并放大纹理。会使它有点像素化地出现在渲染的三角形上。
*/
glTexParameteri(
GL_TEXTURE_2D,
GL_TEXTURE_MIN_FILTER,
GL_NEAREST);
//循环模式
//S轴超出后,循环读取
glTexParameteri(
GL_TEXTURE_2D,
GL_TEXTURE_WRAP_S,
GL_REPEAT);
//T轴超出后,取纹理边缘的纹素
glTexParameteri(
GL_TEXTURE_2D,
GL_TEXTURE_WRAP_T,
GL_CLAMP_TO_EDGE);