Главная » Processing » Использование 3D камеры в Processing

0

Работая в 3D, вы можете перемещать и вертеть объекты в пространстве или добиться того же визуального эффекта с помощью камеры. В этом примере мы создадим небольшую композицию и поиграем с функцией camera().

Как это делается

Как обычно, начинаем с установки окна OpenGL размером 640 x 480 пикселей. Затем нам потребуется объявить две вещественные переменные, x и z и присвоить им значия в функции setup(). С помощью этих переменных и камеры мы сделаем анимацию.

import processing.opengl.*;

float x; float z;

void setup()

{

size( 640, 480, OPENGL );

x = 0;

z = 0;

noStroke();

}

Далее мы создадим небольшую трехмерную композицию. Это будет поверхность с кубом, лежащим в центре. Я использовал функцию fill() перед каждой вершиной, поэтому каждый угол окрашен в свой цвет. Это, возможно, самый простой способ сделать градиент в Processing.

background( 255 ); lights();

beginShape(); fill( 255, 0, 0 );

vertex( 0, height, 0);

fill( 255, 255, 0 );

vertex( 0, height, -1000 ); fill(

0, 255, 0 );

vertex( width, height, -1000 ); fill( 0, 0, 255 );

vertex( width, height, 0 ); endShape(CLOSE);

fill( 255 ); pushMatrix();

translate( width/2, height-50, -500 ); box( 100 );

popMatrix();

Когда вы запустите скетч, вы увидите сцену с ракурса, установленного по умолчанию. Далее мы изменим местоположение камеры так, чтобы она вращалась вокруг объекта, увеличивала и уменьшала его. Наберите этот фрагмент кода после функции lights().

x = cos( radians( frameCount ) ) * 1000; z = sin( radians( frameCount ) ) * 1000;

camera( x, 0, z, width/2, height-50, -500, 0, 1, 0 );

Когда вы запустите скетч, вы увидите сцену с позиции камеры, заданной функцией camera(). И пусть вас не смущает анимация. Камера перемещается с каждым кадром. Объекты же не двигаются.

Как это работает

В функции camera() может быть до девяти параметров. Используйте функцию camera() без параметров для установки камеры Processing по умолчанию. Для размещения камеры в другой точке трехмерного пространства вам нужно ввести девять параметров. Первые три параметра это координаты x, y и z “объектива” камеры. Следующий блок из трех параметров это координаты x, y и z центра экрана. В нашем примере камера направлена на куб. Последние три параметра находятся в диапазоне от -1.0 до 1.0; как правило, мы используем -1.0, 0.0 или 1.0. Я указал здесь (0, 1, 0) что является самым распространенным вариантом. Если вы поменяете его на (0, -1, 0), камера будет поворачиваться на 180 градусов вокруг оси Y и вы увидите композицию перевернутой.

Поэкспериментируйте с этими величинами и посмотрите на результаты.

Дополнительно

Зачастую функция camera() сложна для разработки и отладки. Для упрощения управния камерой предлагаю попробовать библиотеку PeasyCam от Джонатана Файнберга. Она доступна по адресу http://mrfeinberg.com/peasycam/. Альтернативный вариант – библиотека Obsessive Camera Direction (OCD) от Кристиана Линна Дамкьера; скачать ее можно здесь: http://gdsstudios.com/processing/libraries/ocd/.

Источник: Ян Вантомм, Processing 2: креативное программирование, перевод с английского Александры Мишутиной, Published by Packt Publishing Ltd., 2012, BIRMINGHAM – MUMBAI.

По теме:

  • Комментарии