2016-08-27 255 views
1

我在OpenGL es 2.0中使用下面的着色器代碼。在Android OpenGL ES 2.0中不能畫點

final String vertexShader = 
         "uniform mat4 u_MVPMatrix;  \n"  
         + "attribute vec4 a_Position;  \n"  
         + "void main()     \n" 
         + "{        \n" 
         + " gl_Position = u_MVPMatrix \n" 
         + "    * a_Position; \n" 
         + " gl_PointSize = 10.0;  \n" 
         + "}        \n"; 

    final String fragmentShader = 
         "precision mediump float;  \n"       
         + "void main()     \n" 
         + "{        \n" 
         + " gl_FragColor = vec4(1.0, \n" 
         + " 1.0, 1.0, 1.0);    \n" 
         + "}        \n";  

@Override 

public void onSurfaceChanged(GL10 glUnused, int width, int height) 
{ 
    // Set the OpenGL viewport to the same size as the surface. 
    GLES20.glViewport(0, 0, width, height); 

    // Create a new perspective projection matrix. The height will stay the same 
    // while the width will vary as per aspect ratio. 
    final float ratio = (float) width/height; 
    final float left = -ratio; 
    final float right = ratio; 
    final float bottom = -1.0f; 
    final float top = 1.0f; 
    final float near = 1.0f; 
    final float far = 10.0f; 

    Matrix.frustumM(mProjectionMatrix, 0, left, right, bottom, top, near, far); 
} 

的onDrawFrame功能:

@Override 
    public void onDrawFrame(GL10 glUnused) 
    { 
     GLES20.glClear(GLES20.GL_DEPTH_BUFFER_BIT | GLES20.GL_COLOR_BUFFER_BIT);      

     Matrix.setIdentityM(mModelMatrix, 0); 
     //Push to the distance - note this will have no effect on a point size 
     Matrix.translateM(mModelMatrix, 0, 0.0f, 0.0f, -5.0f); 
     Matrix.multiplyMV(mMVPMatrix, 0, mViewMatrix, 0, mModelMatrix, 0); 
     Matrix.multiplyMV(mMVPMatrix, 0, mProjectionMatrix, 0, mMVPMatrix, 0); 
     GLES20.glUniformMatrix4fv(mMVPMatrixHandle, 1, false, mMVPMatrix, 0); 

     //Send the vertex 
     GLES20.glVertexAttribPointer(mPositionHandle, 3, GLES20.GL_FLOAT, false, 0, vertexBuf); 
     GLES20.glEnableVertexAttribArray(mPositionHandle); 

     //Draw the point 
     GLES20.glDrawArrays(GLES20.GL_POINTS, 0, 1);   

    } 

這是我在Android Studio中使用的代碼,只是不工作,也只是背景。 我已經設置了gl_PointSize,並沒有錯誤,似乎everyting是好的。 我應該如何調試它?

全部代碼是在這裏link

+0

您沒有glviewport()試試看。 – Sung

+0

已將它設置在'onSurfaceChanged'中,但代碼太多,我不得不刪除一些 – aboutqx

+0

'mViewMatrix'被初始化了某處?頂點的座標是什麼? –

回答

0

嗯,我使用的代碼從link,在「multiplyMV」應該是「multiplyMM」,那麼它的工作原理。 'multiplyMV'使結果成爲4元素列向量,所以其他3列爲0.