そのため、それぞれ異なる場所にある 2 つの移動クワッドをレンダリングしようとしています。私のシェーダーは可能な限りシンプルです (頂点はモデルビュー投影マトリックスによってのみ変換され、色は 1 つだけです)。
何かをレンダリングしようとすると、色の断片だけになってしまいます。私は以前に OpenGL で 3D レンダリングを行ったことがあるだけなので、2D のものに問題があります。
これが私の基本的なレンダリング ループで、少し単純化されています (私は によって提供される Matrix 操作メソッドを使用しており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 を間違って使用していますか? すべてを Z 値 0 でレンダリングしていることは 100% 確信しています。 のfrustumM
代わりに を使用しorthoM
てみました。フラスタムがどのように機能するかを正しく理解してください (とにかく、3D レンダリングに適しています)。
違いがある場合は、ビューポートを次のように定義しました
GLES20.glViewport(0, 0, windowWidth, windowHeight);
windowWidth
とは、 orthoMwindowHeight
に渡される同じ値です。
編集:android.opengl.Matrix
複数の行列を1つの配列に押し込むことができるように、メソッドが2番目のパラメータとしてオフセットを受け取ることに0
注意する価値があるかもしれません。
別の編集:参考までに、これが私の頂点シェーダーコードです:
uniform mat4 ModelView;
uniform mat4 Projection;
attribute vec4 vPosition;
void main() {
mat4 mvp = Projection * ModelView;
gl_Position = vPosition * mvp;
}
さらに別の編集:交換しようとProjection * ModelView
しましModelView * Projection
たが、今では本当にファンキーな形になっています...