【问题标题】:2D rendering (matrices, specifically) in OpenGL ES 2.0 (Android)OpenGL ES 2.0 (Android) 中的 2D 渲染(特别是矩阵)
【发布时间】: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);

其中windowWidthwindowHeight 是传递给 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 * ModelViewModelView * Projection 交换,但现在我得到了一些看起来非常时髦的形状......

【问题讨论】:

    标签: android opengl-es-2.0 orthographic


    【解决方案1】:

    mvp 应该是你拥有的 Proj*ModelView。

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

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

    【讨论】:

      【解决方案2】:

      我在 gamedev.stackexchange.com 上发布了这个并想通了,here s a link

      【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2012-05-14
      • 2012-01-16
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多