OPENGL ES 纹理

来源:互联网 发布:数据新闻比赛官网 编辑:程序博客网 时间:2024/05/10 00:12
  1. 相关概念
    纹理坐标系:
    纹理坐标系

    纹素:当用一个图像初始化一个纹理缓存之后,在这个图像中的每个像素变成了纹理中 的一个纹素(texel)。从一个 1 像素高 64 像素 的图像初始化来的纹理会沿着整个T轴有1纹素 , 着S轴有64纹素 。

    片元:帧缓存中的颜色像素

    视口坐标:帧缓存中像素的位置。 转换为视口坐标的结果是 所有绘制的几何图形都 被拉伸以适合屏幕大小

  2. 纹理生成

   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)    */
  1. 纹理设置
/*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);
0 0
原创粉丝点击