Как мне создать эффект масштабирования в OpenGLES на iPhone?

StackOverflow https://stackoverflow.com/questions/103537

  •  01-07-2019
  •  | 
  •  

Вопрос

У меня есть игра на OpenGL ES, которую я взламываю вместе.Одна из его частей включает в себя просмотр большой области, похожей на карту, а затем двойное нажатие на одну часть, чтобы "увеличить" ее.Как бы вы использовали OpenGL ES для обеспечения этого эффекта (учитывая, что может потребоваться увеличить масштаб разных частей карты).

Я слышал о glScale и glOrtho, но мне неясно, как они на самом деле работают, поскольку весь мир OpenGL для меня очень новый.

Это было полезно?

Решение

Двумерное масштабирование, которое вы описываете, может быть лучше достигнуто с помощью базовой анимации.NSView (и его аналог NDA для iPhone) обеспечивают неявную анимацию при смене их кадра.Все, что вам нужно было бы сделать в этом случае, это установить для фреймов origin.x и origin.y, а также size.width и size.height такие значения, чтобы вид был больше экрана.Если вы сделаете это и добавите соответствующие вызовы для запуска и фиксации анимации, вы получите анимацию масштабирования бесплатно.Core Animation использует OpenGL за кулисами для своей анимации.

Однако, если вы чувствуете, что должны сделать это в OpenGL, могу я предложить небольшую статью, которую я сделал в http://www.sunsetlakesoftware.com/2008/08/05/lessons-molecules-opengl-es?Я автор книги Молекулы, бесплатный трехмерный молекулярный визуализатор для iPhone, и я ничего не знал об OpenGL ES до начала этого проекта.3 недели спустя она появилась в App Store в момент запуска.

Вызовы OpenGL довольно просты, именно математика, окружающая их, может вызвать у вас головную боль.Увеличение масштаба объектов на самом деле довольно просто, и его можно выполнить либо перемещением камеры, либо физическим масштабированием объектов.Для молекул я пошел по пути масштабирования объекта с помощью функции glScalef (x, y, z), где x, y и z - масштабные коэффициенты, которые вы хотите применить к вашему объекту модели.Я делаю свое масштабирование постепенно.То есть я не сбрасываю матрицу преобразования в начале каждого отображаемого кадра (используя glLoadIdentity()), а просто немного масштабирую ее на основе пользовательского ввода.Если пользователь раздвигает пальцы на 5%, я увеличиваю масштаб на 5%.

Опять же, я бы предложил Основную анимацию для двумерного масштабирования, которое вы описываете, но достичь тех же результатов в OpenGL ES не так уж сложно.

Другие советы

При всем уважении, ответ заключается в том, чтобы потратить несколько дней на изучение основ OpenGL, и в сети для этого есть гораздо лучшие места, чем здесь.

Лицензировано под: CC-BY-SA с атрибуция
Не связан с StackOverflow
scroll top