【发布时间】:2012-07-26 16:03:04
【问题描述】:
我似乎发现在顶点着色器中将向量与矩阵相乘的帖子适用于我的台式机,但不适用于我的 Android 手机。
我正在使用 libGDX 和 GLES2.0 编写游戏。我有相当一部分在桌面上运行,但是当我尝试在 Android 上运行它时,它只显示空白的清晰颜色。通过乱搞,我发现问题只存在于我在顶点着色器中使用矩阵时。有问题的顶点着色器是:
attribute vec3 aVertPos;
attribute vec2 aTexCoord;
uniform mat4 uCamMatrix;
uniform vec3 uPosition;
uniform vec2 uSize;
varying vec2 vTexCoord;
void main() {
vTexCoord = aTexCoord;
vec3 scale = vec3(uSize,0.0);
vec4 dest = vec4((aVertPos*scale)+uPosition,1.0) * uCamMatrix;
gl_Position = dest;
}
我发现即使我将 uCamMatrix 作为单位矩阵传递,我仍然会得到空白屏幕。非常困惑,我环顾四周其他着色器 - 没想到结果 - 切换了该行中矩阵和向量的顺序:
vec4 dest = uCamMatrix * vec4((aVertPos*scale)+uPosition,1.0);
我在传递之前一直在转置矩阵,所以我停止这样做,因为我正在更改顺序。这完全解决了问题。
桌面版看起来和往常一样,所以计算结果一定是以前的样子。
那么 Android/GLES20 对矩阵乘法有什么奇怪的地方吗?这是一个错误吗?我只是错过了一些明显的东西吗?
【问题讨论】:
-
听起来你在对我做正确的事,我猜是一个错误。
-
什么设备/芯片组/GL驱动?我在使用某种 Qualcomm Adreno 的第二代 Nexus 7 平板电脑上遇到了类似的问题。
标签: android matrix glsl opengl-es-2.0 shader