OpenGL ES 2.0(Android)中的二维渲染(特别是矩阵)

OpenGL ES 2.0(Android)中的二维渲染(特别是矩阵),android,opengl-es-2.0,orthographic,Android,Opengl Es 2.0,Orthographic,所以我尝试渲染两个移动的四边形,每个四边形位于不同的位置。我的着色器尽可能简单(顶点仅由modelview投影矩阵变换,只有一种颜色) 每当我尝试渲染某样东西时,我只会得到一条条颜色!我以前只在OpenGL中做过3D渲染,所以我在2D方面有问题 这是我的基本渲染循环,简化了一点(我使用的是android.opengl.Matrix提供的矩阵操作方法,program是我创建的一个自定义类,它只调用GLES20.glUniformMatrix4fv()): 此时,我渲染四边形(对每个四边形重复此操作

所以我尝试渲染两个移动的四边形,每个四边形位于不同的位置。我的着色器尽可能简单(顶点仅由modelview投影矩阵变换,只有一种颜色)

每当我尝试渲染某样东西时,我只会得到一条条颜色!我以前只在OpenGL中做过3D渲染,所以我在2D方面有问题

这是我的基本渲染循环,简化了一点(我使用的是android.opengl.Matrix提供的矩阵操作方法,
program
是我创建的一个自定义类,它只调用
GLES20.glUniformMatrix4fv()
):

此时,我渲染四边形(对每个四边形重复此操作):

我所看到的只是每个方块的一条颜色!我在这里束手无策,我已经尝试了我能想到的一切,我在我的电脑前尖叫,在房间里扔电话。有人有什么建议吗?我用ortho错了吗?我100%确定我正在以Z值0渲染所有内容。我尝试使用
trustumm
而不是
orthoM
,这样我可以看到四边形,但它们在移动时会完全倾斜,如果我正确理解trustum的工作方式,这是有意义的(无论如何,它更适合于3D渲染)

如果有什么不同,我用

 GLES20.glViewport(0, 0, windowWidth, windowHeight);
其中,
windowWidth
windowHeight
是传递给orthoM的相同值

编辑:可能值得注意的是,
android.opengl.Matrix
方法将偏移量作为第二个参数,这样可以将多个矩阵放入一个数组中,从而实现第一个
0
的目的

另一个编辑:供参考,以下是我的顶点着色器代码:

uniform mat4 ModelView;
uniform mat4 Projection;

attribute vec4 vPosition;

void main() {
    mat4 mvp = Projection * ModelView; 
    gl_Position = vPosition * mvp;
}

还有另一个编辑:我试着用
ModelView*Projection
替换
Projection*ModelView
,但现在我得到了一些非常时髦的形状…

mvp应该是Proj*ModelView

gl_位置应该是mvp*V位置,而不是代码中显示的其他位置


如果这不能解决问题,你能更好地描述问题吗(图片可能会有帮助)?同时考虑更多的OpenGL代码,以防出现错误。您发布的所有其他代码对我来说都很好。

我在gamedev.stackexchange.com上发布了这些代码,并找到了答案,

为了将来的参考,请不要交叉发布(或者至少在您的问题中记下,这样您就不会浪费我们的时间)。
 GLES20.glViewport(0, 0, windowWidth, windowHeight);
uniform mat4 ModelView;
uniform mat4 Projection;

attribute vec4 vPosition;

void main() {
    mat4 mvp = Projection * ModelView; 
    gl_Position = vPosition * mvp;
}