OpenGL ES纹理贴图

来源:互联网 发布:linux给目录赋权限 编辑:程序博客网 时间:2024/04/25 00:10

本文针对对OpenGL es有一定了解的人群,一些基础概念不多解释。

一、三角形纹理映射

OpenGL的平面映射首先是需要区分平面正反方向,一般默认右手定则,面向平面,顶点顺序按平面周边逆时针方向的为正向。默认不打开背面裁剪。可通过如下方法设置:
GLES20.glEnable(GLES20.GL_CULL_FACE);//打开背面剪裁   默认不打开GLES20.glFrontFace(GLES20.GL_CW);//设置顺时针为正  默认逆时针为正GL_CCW
现在想把下面的贴图映射到三维空间的三角形上,需要定义顶点数组和纹理坐标数组。
      

1、顶点数组

首先定义三维空间的顶点坐标,下图是省略z轴坐标后的简化效果,其实是z坐标为0的模拟。当然有很多的顶点排列顺序,现在以最简单为例:A->B->C 。
这样可得顶点数组如下:
{
 0, 1, 0,
-1,-1, 0,
 1,-1, 0,
}

2、纹理坐标数组

纹理坐标空间与三维空间是倒向的,就是说y坐标方向和t坐标方向是相反的。所以针对上图的空间顶点坐标,可以得到下图所示纹理坐标空间的坐标,坐标顺序是:A1->B1->C1 。
这样可得纹理坐标数组:
{
0.5f,0, 
    0,   1, 
    1,   1      
}

二、四边形纹理映射

现在想把下面的贴图的左上角的四分之一部分映射到三维空间的四边形上面。

     


1、顶点数组

三维空间四边形顶点坐标依然采取逆时针方向,当然逆时针起点不同也有不同顺序,这里采取的顺去是:A->B->C->C->D->A 。
这样可得顶点数组如下:
 {
     -1, 1,0,
     -1,-1,0,
      1,-1,0,
       
      1,-1,0,
      1, 1,0,
     -1, 1,0

  }


2、纹理坐标数组

根据上面顶点顺序,以及要求只取图片左上角的四分之一的部分作为贴图,可知只需取纹理坐标空间左下角部分即可:A1->B1->C1->C1->D1->A1 。
这样可得纹理坐标数组:
 {
  0,    0, 
  0,    0.5f, 

  0.5f,0.5f,

  0.5f,0.5f, 
  0.5f,0, 
  0,    0        

 }




0 0