Я разрабатываю приложение для Android-устройств с использованием OpenGL ES 2.0, и у меня возникают проблемы с пониманием того, как перемещать камеру - (в конечном счете, я пытаюсь создать эффект «потрясающего экрана» - поэтому мне нужно, чтобы все отображаемые в данный момент объекты перемещались в унисон).Изменение положения камеры в OpenGL ES 2.0
Итак, на данный момент у меня есть класс SpriteBatch
, который я использую для загрузки нагрузки сущностей и рендеринга их всех в одном вызове OpenGL.
В этом классе, у меня Vertex и фрагмент шейдеры.
Итак, я просто создать экземпляр этого класса для моих объектов ..... что-то вроде:
SpriteBatch tileSet1 = new SpriteBatch(100); //100 tiles
Я затем сделать это следующим образом:
tileSet1.render();
В моей GLSurfaceView
класс (в onSurfaceChanged
), я устанавливаю мой взгляд, как это:
//offsetX, offsetY, width and height are all valid and previously declared)
GLES20.glViewport(offsetX, offsetY, width, height);
Matrix.orthoM(mProjMatrix, 0, -ratio, ratio, -1, 1, 3, 7);
Тогда ш ithin моего onDrawFrame()
метода, я просто называю все мои логики и рендеринг, как это:
logic();
render();
(Очевидно, что моя игра петля была значительно упрощена для целей данного вопроса).
Я действительно не уверен, где я должен положить Matrix.setLookAtM
.
Я попытался помещать его в класс «GLSufaceView» - снова, в onSurfaceChanged
, но он, похоже, не имеет никакого эффекта. Как работает setLookAtM
в отношении шейдеров? Я спрашиваю, потому что мои шейдеры находятся в моем классе «SpriteBatch» и относятся к экземплярам этого класса (я мог бы неправильно понять это полностью).
Если требуется еще какой-либо код, пожалуйста, спросите, и я отправлю сообщение.
Поблагодарите указатель в правильном направлении.
Привет @RetroKoradi, спасибо вам. Я действительно делаю все, что вы сказали в моей рутине SpriteBatch. Таким образом, каждый экземпляр объекта (как мой пример tileSet1 выше) имеет весь код, который вы упомянули. Моя путаница в том, что это касается конкретных экземпляров этого класса (spriteBatch). Мне нужно знать, как мне перемещать камеру таким образом *** каждый *** объект (или игровой мир, если вы это сделаете), если у меня нет шейдеров вне класса SpriteBatch. – Zippy
У вас есть шейдерная программа на каждом экземпляре 'SpriteBatch'? Действительно ли им нужны разные шейдеры? В противном случае это очень расточительно. –
Да, как упоминалось в моем вопросе, у меня есть шейдерная пара в каждом экземпляре SpriteBatch. Различные партии могут потребовать различных преобразований, поэтому, подумав об этом, это был лучший способ - пока что это не вызвало никаких проблем (я не создаю тысячи экземпляров, самое большее, всего около 40) :-) Если они не были в моем классе SpriteBatch, где они были бы лучше всего расположены? Если я оставлю их там (как я хочу, по крайней мере, для этого проекта), как мне решить проблему, изложенную в этом вопросе? :-) Спасибо – Zippy