Как сделать револьверную камеру в обработке?

0
void setup() {
  size(640, 360, P3D);
  frameRate(10);
}

void draw() {
  cameraRotation();
  background(0);
  lights();
  fill(120,10,120);
  box(40,20,40);
}

void cameraRotation() {
  for (int i=0; i<360; i+=1) {
    camera(80*cos(i), -25, 80*sin(i),
    0,0,0,
    0,1,0);
  }
}

Я хочу, чтобы камера вращалась вокруг центральной коробки. cameraRotation мой метод cameraRotation должен перемещать камеру по кругу над объектом, всегда фокусируясь на нем.

Однако я получаю неподвижное изображение коробки. Я попытался установить frameRate ниже.

Теги:
camera
processing

1 ответ

0
Лучший ответ

Во-первых, обработка использует радианы в ней триггерные функции, поэтому вы должны перевести 0 - 360 в 0 - TWO_PI.

Во-вторых, вы меняете камеру 360 раз за каждый кадр. Функция CameraRotation не должна содержать цикл for. Вы можете либо увеличивать переменную в контуре рисования:

int ang = 0;

void setup() {
  ...
}

void draw() {
  cameraRotation(ang);
  ...
  ang+=1;
  if ( ang > 360 ) ang = 0;
}

void cameraRotation( int a ) {
  camera(80*cos(a), -25, 80*sin(a),
  0,0,0,
  0,1,0);
}

Это увеличение также может быть обернуто внутри функции CameraRotation.

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

void cameraRotation() {
  int a = frameCount % 360;
  camera(80*cos(a), -25, 80*sin(a),
  0,0,0,
  0,1,0);
}

Опять же, вы, вероятно, не хотите использовать целые числа 0-360, поскольку это очень быстро вращается. Вероятно, вы захотите превратить эти числа в поплавки и сделать некоторое разделение, чтобы сделать их меньшими для более плавного вращения.

Ещё вопросы

Сообщество Overcoder
Наверх
Меню