无法在Android OpenGL ES 2.0中绘制点

时间:2016-08-27 07:31:41

标签: android opengl-es

我使用下面的着色器代码,使用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,并且没有错误,似乎一切都还可以。 我该如何调试呢?

完整代码在这里link

1 个答案:

答案 0 :(得分:0)

好吧,我使用了来自link的代码,' multiplyMV'应该'乘以MM'然后才有效。 ' multiplyMV'使结果成为4元素列向量,因此其他3列为0。