私はopenglesを試していて、画面上を移動するいくつかの単純な正方形を作成しました。
//inside my renderScreen() method, called from onDrawFrame()
gl.glClear(GL10.GL_COLOR_BUFFER_BIT | GL10.GL_DEPTH_BUFFER_BIT);
gl.glMatrixMode(GL10.GL_MODELVIEW);
if (gameObjects != null) {
// iterate and draw objects
for (GameObject obj : gameObjects) {
if (obj != null) {
gl.glLoadIdentity();
gl.glTranslatef(obj.posX, obj.posY, 0.0f);
obj.doDraw(gl);
}
単純で、オブジェクトを画面に描画します(引き続き機能します)。ここで、タッチ入力に基づいて投影行列を変換することにより、画面をドラッグするのが好きになりました。以前のコードの上にこのコードを追加しました(オブジェクトを描画する前に)
//change projection matrix
gl.glMatrixMode(GL10.GL_PROJECTION);
gl.glLoadIdentity();
gl.glTranslatef(-cameraX, -cameraY, 0.0f); //cameraX and cameraY set in updateGame()
updateGameは、MyPanel.getDiffX()からそれらを取得します。ここで、DiffXは、指がどれだけ動いたかを示します。
// Inside MyPanel Class
public boolean onTouch(View v, MotionEvent event) {
if (event.getAction() == MotionEvent.ACTION_DOWN) {
startingX = event.getX();
startingY = event.getY();
MyRenderer.addObject(new GameSquare(event.getX(), v
.getHeight() - event.getY())); // Y is inverted!
}
if (event.getAction() == MotionEvent.ACTION_MOVE) {
diffX = (event.getX() - startingX) / 100;
//diffY = (event.getX() - startingY) / 1000;
Log.d("diffX" ,Float.toString(diffX));
}
return true;
}
これで、コードを使用して投影マトリックスを変換すると、画面にオブジェクトが表示されなくなります(glClearカラーのみ)。誰かが何が起こっているのか知っていますか?行列を間違って使用していますか?