Регулюємо освітлення в Processing

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

Як це робиться

Перше, що потрібно зробити, це імпортувати бібліотеку OpenGL і встановити дозвіл вікна OpenGL рівне 640 x 480 пікселів Перед функцією setup () нам потрібно оголосити дві цілочисельні змінні, lightMode і lightDirection, за допомогою яких ми будемо перемикати види освітлення У функції setup () я присвоїв їм нульові значення

lightMode = 0

lightDirection = 0

У першому блоці коду функції draw () ми налаштуємо освітлення Мінлива lightMode використовується для перемикання освітлення, а lightDirection встановлює напрям освітлення, коли воно спрямоване

background( 0 )

switch ( lightMode ) { case 0:

noLights() break

case 1: lights() break

case 2:

if ( lightDirection == 0 ) {

directionalLight( 255, 128, 0, 0, -1, 0 ) // UP

} else if ( lightDirection == 1 ) { directionalLight( 0, 255, 0, 1, 0, 0 ) // RIGHT

} else if ( lightDirection == 2 ) { directionalLight( 255, 0, 255, 0, 1, 0 ) // DOWN

} else if ( lightDirection == 3 ) { directionalLight( 0, 255, 255, -1, 0, 0 ) // LEFT

}

break case 3:

ambientLight( 0, 255, 255 ) break

case 4:

pointLight( 255, 255, 0, 100, height*03, 100 ) break

case 5:

spotLight( 128, 255, 128, 800, 20, 300, -1, 25, 0, PI, 2 )

break default:

noLights()

}

Після установки освітлення можна зайнятися тривимірної геометрією Я намалював куб і сферу в одній і тій же точці і використовував функції rotateY () і rotateX () для їх обертання

pushMatrix()

translate( width/2, height/2, 0 )

pushMatrix()

rotateY( radians( frameCount ) ) fill( 255 )

noStroke() sphere( 100 ) popMatrix()

pushMatrix()

rotateZ( radians( frameCount ) ) rotateX( radians( frameCount/2 ) ) fill( 255 )

noStroke() box( 150 ) popMatrix()

popMatrix()

І нарешті нам потрібно зробити щось на зразок інтерфейсу для перемикання видів освітлення Це виконано в наступному фрагменті коду Щоб розібратися, як він працює, поверніться наприклад Взаємодія з клавіатурою в Главі 1, Починаємо програмувати в Processing 2

void keyPressed()

{

switch ( key ) { case n:

lightMode = 0 // no lights break

case l:

lightMode = 1 // lights break

case d:

lightMode = 2 // directional light break

case a:

lightMode = 3 // ambient light break

case p:

lightMode = 4 // point light break

case s:

lightMode = 5 // spot light break

}

if ( key == CODED ) { switch ( keyCode ) {

case UP: lightDirection = 0 break

case RIGHT: lightDirection = 1 break

case DOWN: lightDirection = 2 break

case LEFT: lightDirection = 3 break

}

}

}

Коли закінчите введення програми, ви зможете перемикати режими освітлення клавішами N, L, D, A, P і S Клавіші-стрілки будуть змінювати напрям освітлення, коли буде включено спрямоване

Як це працює

Найлегша функція – це lights () Вона просто включає освітлення, встановлене в Processing за замовчуванням Для відключення освітлення є функція noLights () Перше, що ви побачите, запустивши скетч – це функцію noLights ()

Для спрямованого освітлення є функція directionalLight () Джерело освітлення розташовується віддалено і висвітлює всі елементи композиції Він працює так само, як сонце Перші три параметри – це значення r, g і b джерела освітлення Останні три параметри використовуються для направлення освітлення вздовж осей x, y і z у вашій тривимірної композиції Для цих параметрів використовуються величини в діапазоні від -1 до +1

Функція ambientLight () встановлює розсіяне освітлення вашої композиції Це освітлення йде звідусіль Зазвичай воно використовується в поєднанні з іншими видами освітлення Ви можете вказати компоненти r, g і b кольору освітлення Метоположеніе джерела розсіяного освітлення в тривимірному просторі вказується в якості останніх трьох параметрів

Функція pointLight () схожа на лампочку Вона світить в усіх напрямках Перші три параметри потрібні для установки кольору, а другий три – координат x, y і z местопоженія джерела в тривимірному просторі

Напевно найскладніша функція це spotLight () Вам доведеться ввести одинадцять параметрів Перша трійка параметрів встановлює колір, другий – координати x, y і z джерела Параметри 7, 8 і 9 встановлюють напрям променя щодо осей x, y і z, Так само, як у функції directionalLight () Десятий параметр – це кут світлового конуса Зверніть увагу, що він вказується в радіанах Останній параметр устанаівает щільність

Джерело: Ян Вантомм, Processing 2: креативне програмування, переклад з англійської Олександри Мішутіної, Published by Packt Publishing Ltd, 2012, BIRMINGHAM – MUMBAI

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


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

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

Ваш отзыв

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

*

*