【发布时间】:2012-07-07 02:09:41
【问题描述】:
所以我尝试渲染两个移动的四边形,每个四边形都在不同的位置。我的着色器尽可能简单(顶点仅由模型视图投影矩阵转换,只有一种颜色)。
每当我尝试渲染某些东西时,我最终只会得到一些颜色!我之前只在 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);
其中windowWidth 和windowHeight 是传递给 orthoM 的相同值
编辑: 可能值得注意的是android.opengl.Matrix 方法将偏移量作为第二个参数,以便可以将多个矩阵推入一个数组中,这就是第一个@ 987654332@是为
另一个编辑:作为参考,这是我的顶点着色器代码:
uniform mat4 ModelView;
uniform mat4 Projection;
attribute vec4 vPosition;
void main() {
mat4 mvp = Projection * ModelView;
gl_Position = vPosition * mvp;
}
又一次编辑:我尝试将 Projection * ModelView 与 ModelView * Projection 交换,但现在我得到了一些看起来非常时髦的形状......
【问题讨论】:
标签: android opengl-es-2.0 orthographic