当前位置:首页 > 服务端 > Android图形---OpenGL(四)

Android图形---OpenGL(四)

本文译自:http://developer.android.com/guide/topics/graphics/opengl.html

在OpenGL ES 2.0中的投影和照相视图

在ES 2.0的API中,首先要通过把一个矩阵成员添加给图形对象顶部的着色器(Vertex Shaders)来使用投影和照相视图。然后,这个被添加的矩阵成员能够生成并把投影和照相视图应用给图形对象。

1. 给顶层着色器(Vertex Shaders)添加矩阵---给视图投影矩阵创建一个有效的,并且要把它作为着色位置的倍增器。在下面的代码中,包含的uMVPMatrix成员允许把投影和照相视图的矩阵应用到使用该着色器的图形对象的坐标上:

privatefinalString vertexShaderCode =
 
        // This matrix member variable provides a hook to manipulate
        // the coordinates of objects that use this vertex shader
        "uniform mat4 uMVPMatrix;   \n"+
 
        "attribute vec4 vPosition;  \n"+
        "void main(){               \n"+
 
        // the matrix must be included as part of gl_Position
        " gl_Position = uMVPMatrix * vPosition; \n"+
 

        "}  \n";

注意:在上例的顶层着色器(Vertex Shader)中定义了一个单一变换矩阵,你可以把投影矩阵和照相视图矩阵一起组合到这个变换矩阵中。根据应用程序的需要,也可以在顶层着色器(Vertex Shader)中分别定义投影矩阵和照相视图矩阵,这样就可以分别对它们进行改变。

2. 访问着色器矩阵---在顶层着色器(Veterx Shader)中创建了一个应用于投影和照相视图的回调之后,就能够访问这个应用于投影矩阵和照相视图矩阵的变量。下面的代码显示了如何编辑GLSurfaceView.Renderer类onSurfaceCreated()方法,来实现对定义在Vertex Shader中的矩阵变量的访问。

publicvoid onSurfaceCreated(GL10 unused,EGLConfig config){
        ...
        muMVPMatrixHandle = GLES20.glGetUniformLocation(mProgram,"uMVPMatrix");
        ...
    }

3. 创建投影和照相视图矩阵---生成应用与图形对象的投影和视图矩阵。下列代码显示了如何编辑GLSurfaceView.Renderer类的onSurfaceCreated()和onSurfaceChanged()方法,来实现基于设备的屏幕外观比率的照相视图矩阵和投影矩阵的创建:

publicvoid onSurfaceCreated(GL10 unused,EGLConfig config){
        ...
        // Create a camera view matrix
        Matrix.setLookAtM(mVMatrix,0,0,0,-3,0f,0f,0f,0f,1.0f,0.0f);
    }
 
    publicvoid onSurfaceChanged(GL10 unused,int width,int height){
        GLES20.glViewport(0,0, width, height);
 
        float ratio =(float) width / height;
 
        // create a projection matrix from device screen geometry
        Matrix.frustumM(mProjMatrix,0,-ratio, ratio,-1,1,3,7);
    }

4. 应用投影和照相视图矩阵---要适用投影和照相视图的变换,就要把它们一起设置给Verter Shader。下面的代码显示了如果编辑GLSurfaceView.Render类的onDrawFrame()方法,来实现上面代码中创建的投影矩阵和照相视图的合成,然后,把它应用到由OpenGL来呈现的图形对象上。

publicvoid onDrawFrame(GL10 unused){
        ...
        // Combine the projection and camera view matrices
        Matrix.multiplyMM(mMVPMatrix,0, mProjMatrix,0, mVMatrix,0);
 
        // Apply the combined projection and camera view transformations
        GLES20.glUniformMatrix4fv(muMVPMatrixHandle,1,false, mMVPMatrix,0);
 
        // Draw objects
        ...
    }

关于如何使用OpenGL ES 2.0的完整的示例,请看OpenGL ES 2.0指南(http://developer.android.com/training/graphics/opengl/index.html

作者:安卓吧
来源链接:https://www.cnblogs.com/android100/archive/2012/07/19/Android-OpenGL-4.html

版权声明:
1、Java侠(https://www.javaxia.com)以学习交流为目的,由作者投稿、网友推荐和小编整理收藏优秀的IT技术及相关内容,包括但不限于文字、图片、音频、视频、软件、程序等,其均来自互联网,本站不享有版权,版权归原作者所有。

2、本站提供的内容仅用于个人学习、研究或欣赏,以及其他非商业性或非盈利性用途,但同时应遵守著作权法及其他相关法律的规定,不得侵犯相关权利人及本网站的合法权利。
3、本网站内容原作者如不愿意在本网站刊登内容,请及时通知本站(javaclubcn@163.com),我们将第一时间核实后及时予以删除。





本文链接:https://www.javaxia.com/server/124696.html

标签: unused variable
分享给朋友: