顶点坐标如图3-2定义
计算机图像、android屏幕坐标如图7-4所示
二维纹理坐标方向如图7-3定义
1、2D纹理贴图坐标
//顶点的坐标系
private static float TEXTURE_COORDS[] = {
//Order of coordinates: X, Y,S,T
-1.0f, 1.0f, 0.0f, 0.0f, //原点
-1.0f, -1.0f, 0.0f, 1.0f, //bottom left
1.0f, 1.0f, 1.0f, 0.0f, // top right
1.0f, -1.0f, 1.0f, 1.0f, // bottom right
};
这里将顶点坐标和纹理坐标写到了一个一维数组里面,其中X、Y表示顶点坐标,S、T表示纹理坐标。
也可以分开表示
//顶点坐标
float[] vertex = new float[]{
-1.0f, 1.0f,
-1.0f, -1.0f,
1.0f, 1.0f,
1.0f, -1.0f
};
//纹理坐标数据
float[] text = {
0f,0f , 0f,1f , 1f,1f,
0f,0f , 1f,1f , 1f,0f
};
为什么这么匹配呢,根据图3-2和图7-4可以得出openGL顶点的坐标方向如下图1-1所示
对比图1-1和图7-3,只要按箭头方向将原点、y轴加1,x轴加1,x和y轴同时加1四个点对应起来就行。
2、android相机摄像头坐标
顶点坐标不变
float[] vertex = new float[]{
-1.0f, 1.0f,
-1.0f, -1.0f,
1.0f, 1.0f,
1.0f, -1.0f
};
// 后置摄像头使用的纹理坐标(顺时针旋转90度)
float[] text_back = {
0.0f, 1.0f,
1.0f, 1.0f,
0.0f, 0.0f,
1.0f, 0.0f,
};
// 前置摄像头使用的纹理坐标(顺时针旋转270度然后纵坐标取反)
float[] text_front = {
1f,1f ,
0f,1f ,
1f,0f ,
0f,0f ,
};
参考:
android平台下OpenGL ES 3.0使用GLSurfaceView对相机Camera预览实时处理