簡體   English   中英

無法在Android OpenGL ES 2.0中繪制點

[英]Can't draw point in Android OpenGL ES 2.0

我使用下面的着色器代碼,使用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,並且沒有錯誤,似乎一切都還可以。 我應該怎么調試呢?

完整代碼在這里鏈接

好吧,我使用了鏈接中的代碼,'multiplyMV'應該是'multiplyMM',然后才能工作。 'multiplyMV'使結果成為4元素列向量,因此其他3列為0。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM