android samplerExternalOES 紋理

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

 

 

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章