Бібліотека GLUT
Цей урок заснований на уроці № 4.
- Кут повороту навколо осі "у". Ця змінна дозволить повертати камеру. - float x, z: змінні, що зберігають положення камери в площині "xz". - float lx, lz: координати вектора, що визначають напрямок переміщення камери.
Визначимо такі змінні:
Скористаємося готовим кодом, що описує сцену зі сніговиком.
Тепер модифікуємо функцію візуалізації
Перша зміна функції gluLookAt. Параметри функції gluLookAt тепер стали змінними замість фіксованих значень. Функція gluLookAt забезпечує простий та інтуїтивно зрозумілий спосіб визначення положення та орієнтації камери. В основному це три групи параметрів, кожен із яких складається з 3 значень з плаваючою точкою. Перші три значення вказують положення камери. Другий набір значень визначає точку зору камери. Насправді це може бути будь-яка точка нашої лінії огляду. Остання група параметрів вказує на вектор, це зазвичай встановлені значення ( 0.0, 1.0 , 0.0), це означає, що камери не нахилена. Якщо ви хочете нахилити камеру – просто пограйте з цими параметрами та подивіться результат. Наприклад, щоб бачити все догори дригом, потрібно ввести такі значення спробувати (0.0, -1.0, 0.0). Отже, перший набір параметрів х, у і z - початкове положення камери. Другий набір параметрів, це напрямок вектора огляду, розраховується додаванням вектора, який визначає нашу лінію огляду з положенням камери. Крапка = пряма видимість + координати положення камери. Код функції рендерингу:
Тепер потрібно створити функцію переміщення камери, яка оброблятиме натискання клавіш переміщення. Ми використовуємо клавіші "вліво" та"вправо", щоб повернути камеру або змінити вектор, який визначає лінію огляду. Клавіші "вгору" та "вниз" використовуються для переміщення вздовж нинішньої лінії огляду. Коли користувач натискає ліву або праву клавіші, змінний кут нахилу змінюється відповідно. На підставі значення кута вона обчислює відповідні значення нових компонентів lx і lz лінії вектора огляду. Зверніть увагу, що ми тільки рухаємося в площині "xz" , тому нам не потрібно змінювати ly координати лінії вектора огляду. Нові значення lx та lz відображаються на одиничному колі на площині "xz". Тому, враховуючи змінну кута ang нові значення для lx і lz, розраховуються за формулою:
Ми робили б ці дії, якби ми хотіли конвертувати полярні координати в декартові координати. lz є негативним, тому що початкове значення дорівнює -1. Зауважте, що камера не рухається при оновленні lx та lz, положення камери залишається, тільки змінюється точка огляду. Ми також хочемо переміщати камеру по лінії огляду. Для цього ми збираємося додати або відняти частину лінії вектора огляду нашої поточної позиції, коли стрілки вгору і вниз будуть натиснуті відповідно. Наприклад, для переміщення камери вперед нові значення для змінних x та z будуть:
fraction – можлива реалізація швидкості. Ми знаємо, що (lx, lz) є одиничним вектором (як згадувалося раніше, його точка в одиничному колі), тому якщо fraction залишається незмінним, то швидкість залишиться постійною. При збільшенні значення fraction ми рухаємося швидше.
Функція обробки натискання клавіш переміщення