在图片渲染的时候,之前使用的顶点坐标是占满整个屏幕的归一化坐标1
2
3
4
5
6
7
8
//顶点坐标
static float vertexData[] = { // in counterclockwise order:
-1f, -1f, 0.0f, // bottom left
1f, -1f, 0.0f, // bottom right
-1f, 1f, 0.0f, // top left
1f, 1f, 0.0f, // top right
};
这样就导致了如下图所示的的问题
所以我们应该根据屏幕宽高和图片宽高对应的比例算出正确的位置:
上面我们得到的( ?)是不在归一化坐标范围内的,为了能使OpenGL
正确的渲染,我们就需要把(?)以及其他边统一转换到归一化坐标内,这个操作就是正交投影
使用正交投影,不管物体多远多近,物体看起来总是形状、大小比例相同的。
在OpenGLES里面使用投影矩阵:
vertex_shader_m.glsl
1 | attribute vec4 av_Position;//顶点位置 |
在使用的时候:
1 | //投影矩阵 |
主要代码如下:BitmapTexture.java
1 |
|
注意: 在使用FBO
GLES20.glTexImage2D
分配内存大小的时候,需要根据横竖屏来设置值。不然计算出来的值和渲染的宽高不一样,渲染就会出现变形。
1 |
|