OPENGL ES 纹理

  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);

猜你喜欢

转载自blog.csdn.net/wu745187355/article/details/51611782