Створюємо polygon soup в Processing

У прикладі Прості обєкти в 3D ми дізналися, що в Processing є два основних обєкти: паралелепіпед і сфера Незважаючи на те, що з ними можна зробити багато цікавого, вам напевно захочеться зробити свою 3D-фігуру Тут ми розглянемо, як створити гнучку функцію для малювання циліндра

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

За аналогією попередніми прикладами, ми почнемо з імпорту бібліотеки OpenGL і установки вікна здатністю 640 x 480 пікселів Далі ми напишемо функцію Рісане циліндра Код для верху і низу циліндра буде виглядати схоже, ми робили що подібне в прикладі Малюємо довільні фігури в попередньому розділі Код бічної сторони циліндра буде дещо відрізнятися

void cylinder( int numSegments, float h, float r )

{

float angle = 3600 / (float)numSegments

// top beginShape()

for ( int i = 0 i &lt numSegments i++ ) { float x = cos( radians( angle * i ) ) * r float y = sin( radians( angle * i ) ) * r vertex( x, y, -h/2 )

}

endShape( CLOSE )

// side

beginShape( QUAD_STRIP )

for ( int i = 0 i &lt numSegments + 1 i++ ) { float x = cos( radians( angle * i ) ) * r float y = sin( radians( angle * i ) ) * r vertex( x, y, -h/2 )

vertex( x, y, h/2 )

}

endShape()

// bottom beginShape()

for ( int i = 0 i &lt numSegments i++ ) { float x = cos( radians( angle * i ) ) * r float y = sin( radians( angle * i ) ) * r vertex( x, y, h/2 )

}

endShape( CLOSE )

}

Тепер, коли у нас є гнучка функція, ми можемо вивести на екран кілька циліндрів Наберіть наступний код у функції draw ():

background( 255 )

pushMatrix()

translate( width*3, height*3, 0 ) rotateY( radians( frameCount ) ) fill( 255, 0, 0 )

cylinder( 30, 100, 50 ) popMatrix()

pushMatrix()

translate( width*7, height*5, 0 ) rotateY( radians( frameCount ) ) fill( 255, 255, 0 )

cylinder( 4, 200, 50 ) popMatrix()

pushMatrix()

translate( width*3, height*7, 0 ) rotateY( radians( frameCount ) ) fill( 0, 0, 255 )

cylinder( 3, 200, 30 ) popMatrix()

Якщо ви зробите все правильно, то в результаті побачите те, що зображено на скріншоті Поекспериментуйте з параметрами функції cylinder (), щоб отримати різні циліндри

Як це працює

Polygon soup є, по суті, набором трикутників, розташованих без особливого пядка Обєкт може виглядати як реальний тривимірний обєкт, але якщо ви спробуєте надрукувати його, наприклад, на 3D принтері, нічого не вийде Однак це найпростіший спосіб малювати тривимірні обєкти

Структура нашого циліндра не складна Сторони циліндра соедінаются з верхом і низом і вичіслются двічі В ідеалі у вас повинен бути масив вершин і масив з ІНФОРМ про їх зєднанні

Єдина принципово нова ідея в цьому прикладі – це параметр QUAD_STRIP у функції beginShape () В результаті вершини будуть зєднані по-іншому Ми розглянемо це далі в цьому розділі в прикладі Обєкти з простих деталей

Додатково

Якщо ви хочете малювати 3D-обєкти з цікавою структурою, можете звернутися в бібліотеці Hemesh від Фредеріка Ванхотта Вона допоможе вам малювати різні треерние обєкти, не займаючись складною математикою Бібліотека доступна за адресою http://hemeshwblutcom/

Джерело: Ян Вантомм, 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>

*

*