所以我试图渲染两个移动的四边形,每个在不同的位置。我的着色器尽可能简单(顶点仅由模型视图投影矩阵转换,只有一种颜色)。
每当我尝试渲染某些东西时,我只会得到一些颜色!我之前只在 OpenGL 中完成了 3D 渲染的工作,所以我遇到了 2D 的问题。
这是我的基本渲染循环,稍微简化了一点(我正在使用由提供的矩阵操作方法,android.opengl.Matrix
并且program
是我创建的一个自定义类,它只是调用GLES20.glUniformMatrix4fv()
):
Matrix.orthoM(projection, 0, 0, windowWidth, 0, windowHeight, -1, 1);
program.setUniformMatrix4f("Projection", projection);
此时,我渲染四边形(对每个四边形重复此操作):
Matrix.setIdentityM(modelview, 0);
Matrix.translateM(modelview, 0, quadX, quadY, 0);
program.setUniformMatrix4f("ModelView", modelview);
quad.render(); // calls glDrawArrays
我所看到的只是每个四边形的一小部分颜色!我在这里束手无策,我已经尝试了我能想到的一切,我正处于我对着我的电脑尖叫并在房间里扔手机的地步。有人有任何指示吗?我使用 Ortho 错误吗?我 100% 确定我以 Z 值为 0 渲染所有内容。我尝试使用frustumM
而不是orthoM
,这样我就可以看到四边形,但只要它们移动它们就会完全倾斜,如果我这样做是有道理的正确理解截锥体的工作方式(无论如何,它更适用于 3D 渲染)。
如果有什么不同,我定义了我的视口
GLES20.glViewport(0, 0, windowWidth, windowHeight);
传递给 orthoM 的值在哪里windowWidth
和是相同的windowHeight
编辑:可能值得注意的是,这些android.opengl.Matrix
方法将偏移量作为第二个参数,以便可以将多个矩阵推入一个数组中,这就是第一个0
的用途
另一个编辑:作为参考,这是我的顶点着色器代码:
uniform mat4 ModelView;
uniform mat4 Projection;
attribute vec4 vPosition;
void main() {
mat4 mvp = Projection * ModelView;
gl_Position = vPosition * mvp;
}
另一个编辑:我尝试交换Projection * ModelView
,ModelView * Projection
但现在我得到了一些非常时髦的形状......