頂点シェーダーでベクトルとマトリックスをポスト乗算すると、デスクトップ マシンでは機能しますが、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 には行列の乗算に関する癖がありますか? これはバグですか?明らかな何かが欠けているだけですか?