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 ниже.
Во-первых, обработка использует радианы в ней триггерные функции, поэтому вы должны перевести 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, поскольку это очень быстро вращается. Вероятно, вы захотите превратить эти числа в поплавки и сделать некоторое разделение, чтобы сделать их меньшими для более плавного вращения.