簡體   English   中英

如何使用適用於Android的OpenTK在OpenGL ES 2.0上實現簡單的2D轉換

[英]How to implement simple 2D translation on OpenGL ES 2.0 using OpenTK for android

我正在嘗試將翻譯添加到使用OpenGL ES 2.0 for Android繪制三角形的簡單示例中。 我創建的翻譯矩陣在所有方向上的平移均為0,應為單位矩陣。 當我從頂點着色器中刪除乘法時,三角形呈現良好。 但是,當我嘗試添加一些轉換(甚至身份)時,什么也沒有呈現。 我認為這與將矩陣數據發送到着色器有關。 GL.UniformMatrix 4僅將float作為屬性,我無法將Matrix4轉換為float數組。 最后,我拼命為單位矩陣創建了float數組,並使用GL.UniformMAtrix4傳遞了它,但是什么也沒有渲染。

有經驗的人可以幫助我嗎?

        Matrix4 uvMat = Matrix4.CreateTranslation(0.0f,0.0f,0.0f);

        // Vertex and fragment shaders
        string vertexShaderSrc =  "attribute vec4 vPosition;    \n" + 
            "uniform mat4 uvMat;                    \n" +
            "void main()                  \n" +
            "{                            \n" +
            "   gl_Position = uvMat*vPosition;  \n" +
            "}                            \n";

        string fragmentShaderSrc = "precision mediump float;\n" +
            "void main()                                  \n" +
            "{                                            \n" +
            "  gl_FragColor = vec4 (1.0, 0.0, 0.0, 1.0);  \n" +
            "}                                            \n";

        int vertexShader = LoadShader (All.VertexShader, vertexShaderSrc );
        int fragmentShader = LoadShader (All.FragmentShader, fragmentShaderSrc );
        program = GL.CreateProgram();
        if (program == 0)
            throw new InvalidOperationException ("Unable to create program");

        GL.AttachShader (program, vertexShader);
        GL.AttachShader (program, fragmentShader);

        GL.BindAttribLocation (program, 0, "vPosition");
        GL.LinkProgram (program);

        float[] matTrans = new float[] {1,0,0,0,
                              0,1,0,0,
                              0,0,1,0,
            0,0,0,1};

        int uniMatLoc = GL.GetUniformLocation (program, "uvMat");
        Console.WriteLine (uniMatLoc.ToString());
        GL.UniformMatrix4 (uniMatLoc, 16, false, matTrans);

UniformMatrix4的第二個參數是矩陣的數量,而不是矩陣中元素的數量。 因此,呼叫應為:

GL.UniformMatrix4(uniMatLoc, 1, false, matTrans);

暫無
暫無

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

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