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