samplerExternalOES 的紋理映射
上一章節講解了opengl頂點座標與sampler2D座標,而samplerExternalOES 是android用來渲染 相機數據。但它也存在一個問題,android的後置相機的預覽的圖像是順時針旋轉90°的,而相對於前置相機則是逆時針旋轉90°的,如果想要跟照鏡子一樣的模式,自拍則還要左右對換。
後置攝像頭
後置攝像頭只是需要將紋理旋轉90°,如下圖:
只要點對應,就可以渲染正確了,如下面一組點:
//頂點座標
private float pos[] = {
-1.0f, 1.0f,
-1.0f, -1.0f,
1.0f, 1.0f,
1.0f, -1.0f,
};
private float[] coordCameraBack={
0f,1f,
1f,1f,
0f,0f,
1f,0f
};
前置攝像頭
前置 攝像頭是逆時針旋轉90°的,因此,首先對紋理貼圖進行逆時針旋轉90°,這樣拍攝的時候,如果想像照鏡子一般,則需要左右相反顛倒,如下圖:
只要是對應的即可,下面是一對點映射,即可正常渲染了。
//頂點座標
private float pos[] = {
-1.0f, 1.0f,
-1.0f, -1.0f,
1.0f, 1.0f,
1.0f, -1.0f,
};
private float[] coordCameraFront={
1f,1f,
0f,1f,
1f,0f,
0f,0f
};
下面給出一個最簡單的,着色器:
#extension GL_OES_EGL_image_external : require
precision mediump float;
varying vec2 textureCoordinate;
//uniform sampler2D vTexture;
uniform samplerExternalOES vTexture;
void main()
{
gl_FragColor = texture2D( vTexture, textureCoordinate );
}