1

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

每当我尝试渲染某些东西时,我只会得到一些颜色!我之前只在 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 * ModelViewModelView * Projection但现在我得到了一些非常时髦的形状......

4

2 回答 2

0

I posted this over on gamedev.stackexchange.com and figured it out, here s a link

于 2012-07-07T17:04:12.460 回答
0

mvp 应该是 Proj*ModelView 你有它。

gl_Position 应该是 mvp * vPosition,而不是您在代码中显示的其他方式。

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

于 2012-07-07T05:31:02.887 回答