Главная » Processing » Трехмерное пространство в Processing

0

В Главе 1, Начинаем программировать в Processing 2, мы рассказывали о системе координат в Processing. В этом примере мы рассмотрим третье измерение и наруем объекты в трехмерном пространстве.

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

Первое, что нужно сделать – импортировать библиотеку OpenGL. Это позволит вам использовать третье измерение. Вы уже делали это в примере Рисуем кривые в Главе 2, Рисуем текст, кривые и фигуры в 2D. Для импорта библиотеки с помощью кода выберите Sketch | Import Library | OpenGL:

import processing.opengl.*;

Следущее, что мы сделаем – объявим две переменные перед функцией setup() и присвоим им значения. Обратите внимание, что функция size() несколько отличается от той, что была в Главе 2.

float depth; float zSpeed;

void setup()

{

size( 640, 480, OPENGL );

depth = 0;

zSpeed = -1;

}

Первое действие в блоке draw() это обновление значения переменной depth для реализации анимации. Следующий фрагмент кода изменяет эту величину от 0 до 1000 и сбрасывает снова в 0.

void draw()

{

depth += zSpeed;

if ( depth <= -1000 || depth >= 0 ) { zSpeed *= -1;

}

}

Дальше мы очистим фон и нарисуем несколько трехмерных прямоугольников. Они не бут закрашены, мы будем видеть только их грани. Добавьте этот фрагмент кода далее в функцию draw().

background( 255 );

noFill(); stroke( 0 );

for ( int i = 0; i < 10; i++ ) { pushMatrix();

translate( 0, 0, -i * 100 );

rect( 0, 0, width, height ); popMatrix();

}

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

pushMatrix();

translate( 0, 0, depth );

fill( 255, 0, 0 );

rect( 0, 0, 80, 80 );

fill( 0, 255, 0 );

rect( width-80, 0, 80, 80 );

fill( 255, 255, 0 );

rect( width-80, height-80, 80, 80 );

fill( 0, 255, 255 );

rect( 0, height-80, 80, 80 ); popMatrix();

Когда вы запустите скетч, вы увидите приближающиеся и отдаляющиеся прямоугольники.

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

Для работы в трехмерном пространстве Processing нужно добавить к функции size() третий параметр, установив рендерер. В этом случае этим параметром будет OPENGL. Не забудьте импортировать библиотеку OpenGL, имаче скетч не будет работать.

Вы могли заметить, что функции типа rect() или ellipse() в предыдущей главе имеют только координаты x и y. Для рисования этих фигур в трехмерном пространстве координата z не используется. Если вы хотите нарисовать эти двумерные фигуры в треерном пространстве, сместите систему координат с помощью функции translate(). Используя функцию translate() между функциями pushMatrix() и popMatrix(), я вращал графические блоки.

Функция pushMatrix() сохраняет текущее положение системы координат. Она используется в паре с функцией popMatrix(), восстанавливающей положение системы координат, сохраненное с помощью функции pushMatrix().

Функция translate(), когда вы с ней работаете в 3D, имеет три параметра. Это координаты x, y и z новой опорной точки, которую вы будете использовать. Для анимации цветных квадратов я использовал переменную depth для указания z-координаты в функции translate(). Посмотрите на красный квадрат в процессе работы скетча: он всегда нисован в точке (0, 0), но это незаметно, потому что мы смещаем опорную точку по оси z.

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

По теме:

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