КАМЕРА У 2D – РОЗРОБКА ІГОР ДЛЯ ОС ANDROID

&nbsp

До цього моменту у нас не було поняття камери в нашому коді ми тільки визначили область видимості камери (конус відображення) за допомогою glOrthof:

Ви знаєте, що перші два параметри визначають х-координати лівого і правого країв конуса відображення в нашому світі, наступні два параметри задають у-координати нижнього і верхнього країв конуса відображення, а останні два параметри вказують ближню і дальню площині відсікання На рис 819 показана область видимості камери

Таким чином, ми бачимо тільки область від (0, 0, 1) до (FRUSTUMWIDTH FRUSTUM HEIGHT -1) нашого світу Як думаєте, добре було б мати можливість зрушити область видимості, скажімо, вліво Звичайно, це було б непогано, а це ж дуже просто:

У даному випадку х – це просто якась початкова точка, яку ми можемо визначити Ми також можемо провести зрушення по х-і у-осях:

На рис 820 показано, що мається на увазі

Так, ми просто позначаємо нижній лівий кут конуса відображення нашої камери в просторі світу Цього вже достатньо для реалізації вільно рухається 20-камери Але ми можемо зробити її ще краще Як насчет ухвали не нижнього лівого кута області видимості точками хіу, а центру області видимості

Рис 819 Область видимості камери для нашого 2Р-світу

Рис 820 Зрушення області видимості камери

Таким чином ми могли б просто розміщувати центр нашої області видимості на обєкті в специфічному становищі – скажімо, гарматному ядрі з попереднього прикладу:

На рис 821 показано, як це виглядає

Рис 821 Визначення центру конуса відображення через його центр

І це ще не все, що можна зробити з gl Orthof Як щодо зміни масштабу Ми знаємо, що завдяки gl Viewportf ми можемо повідомити OpenGL ES, на яку частину екрану демонструвати вміст нашого конуса відображення OpenGL ES автоматично розтягне і змінить масштаб підсумкового зображення, погоджуючи його з областю перегляду (viewport) Якщо ми зробимо ширину і довжину нашого конуса відображення менше, ми просто покажемо меншу область світу на екрані Це збільшення масштабу Якщо ми робимо область більше, ми показуємо більшу частину нашого світу – це зменшення масштабу Таким чином, ми можемо ввести змінну масштабу і множити її на ширину і довжину нашого конуса відображення для збільшення або зменшення масштабу При множнику, рівному 1, світ буде показаний, як на рис 821, при використанні нормальних ширини і довжини області видимості При множнику менше 1 буде відбуватися зменшення масштабу до центру конуса відображення А при множнику більше 1 масштаб буде зменшуватися, показуючи велику частина світу (наприклад, при множнику, рівному 2, буде видно в 2 рази більше світу) Ось як ми можемо використовувати glOrthof О, щоб зробити це:

Простіше простого Тепер ми можемо створити клас камери з точкою, до якої камера звернена (центр конуса відображення), стандартними шириною і довжиною області видимості і змінної масштабу, яка робить конус відображення більше або менше, таким чином показуючи нам меншу (збільшення масштабу) або велику (зменшення масштабу) частина світу На рис 822 зображена область видимості при множнику масштабу, рівному 0,5 (внутрішній сірий прямокутник), і та ж область при множнику, рівному 1 (зовнішній прозорий прямокутник)

Рис 822 Зміна масштабу за допомогою зміни розмірів конуса відображення

Для повноти картини потрібно зробити ще одну річ Уявіть, що ми торкаємося екрану і хочемо зясувати, якої точки в нашому 2D-MHpe ми торкнулися Ми вже робили таке кілька разів на наших постійно удосконалюються прикладах з гарматою При конфігурації конуса відображення, яка не враховує положення камер і масштаб, як на рис 819, ми має наступні рівняння (дивіться метод update в наших прикладах з гарматою):

Спочатку нормалізуємо координати х і у, отримані при торканні, до проміжку від 0 до 1 шляхом ділення їх на ширину і довжину екрану Потім змінюємо їх масштаб так, щоб вони виражалися через простір нашого світу, множачи їх на ширину і довжину області видимості Нам необхідно врахувати позицію конуса відображення і змінну масштабу Ось як ми це робимо:

-Х і у тут – положення камери в просторі світу

Джерело: Mario Zechner / Маріо Цехнер, «Програмування ігор під Android», пров Єгор Сидорович, Євген зазноби, Видавництво «Пітер»

Схожі статті:


Сподобалася стаття? Ви можете залишити відгук або підписатися на RSS , щоб автоматично отримувати інформацію про нові статтях.

Коментарів поки що немає.

Ваш отзыв

Поділ на параграфи відбувається автоматично, адреса електронної пошти ніколи не буде опублікований, допустимий HTML: <a href="" title=""> <abbr title=""> <acronym title=""> <b> <blockquote cite=""> <cite> <code> <del datetime=""> <em> <i> <q cite=""> <s> <strike> <strong>

*

*