2017-11-21 5 views
0

큰 구가 있습니다. 구 주위를 움직이는 빨간 점이 있습니다. 나는 그것이 구형으로 움직일 때 그 빨간 점을 따라 가고 싶다. 그래서 내 카메라는 빨간 점으로 움직여야합니다. 그러나 문제가 있습니다. 지금 내가 겪고 있어요 내 애니메이션 관점이 전시 A. 여기P3D 카메라 방향

I want my animation to realize the point of view shown in exhibit A.

에 표시된 실현하고 싶은 전시 B.에 표시됩니다 내가 지금까지 가지고있는 코드이다. 꽤 간단하다고 생각합니다. 나는 눈이 어디에 있는지를 제어하는 ​​3 가지 변수를 가지고 있으며, 목표가있는 곳을 제어하는 ​​3 가지 변수가 있습니다. 빨간색 점도 목표 위치에 있습니다. x-y에 2 개의 비행기를 추가했는데, 회전하는 동안 너무 혼란스러워지지 않았습니다.

https://jsfiddle.net/da8nza6y/

float radius = 1000; 
float view_elevation = 1500; 
float target_elevation = 300; 

float x_eye; 
float y_eye; 
float z_eye; 

float x_aim; 
float y_aim; 
float z_aim; 
float h; 
float theta; 

void setup() { 
    size(600, 600, P3D); 
    theta = 0; 
    h = 30; 
} 

void draw() { 

    theta += 0.5; 
    theta = theta%360; 

    x_eye = (radius+view_elevation)*cos(theta*PI/180); 
    y_eye = 0; 
    z_eye = (radius+view_elevation)*sin(theta*PI/180); 

    x_aim = (radius+target_elevation)*cos((theta+h)*PI/180); 
    y_aim = 0; 
    z_aim = (radius+target_elevation)*sin((theta+h)*PI/180); 

    camera(x_eye, y_eye, z_eye, x_aim, y_aim, z_aim, 0, 0, -1); 

    background(255); 

    // the red dot 
    pushMatrix(); 
    translate(x_aim, y_aim, z_aim); 
    fill(255, 0, 0, 120); 
    noStroke(); 
    sphere(10); 
    popMatrix(); 

    // the big sphere 
    noStroke(); 
    fill(205, 230, 255); 
    lights(); 
    sphere(radius); 

    // the orange plane 
    pushMatrix(); 
    translate(0, 0, 10); 
    fill(255, 180, 0, 120); 
    rect(-2000, -2000, 4000, 4000); 
    popMatrix(); 

    // the green plane 
    pushMatrix(); 
    translate(0, 0, -10); 
    fill(0, 180, 0, 120); 
    rect(-2000, -2000, 4000, 4000); 
    popMatrix(); 

} 

그래서 피클이 순간처럼 그 위치 XZ 평면의 각도에 의해 주어진다 빨간 점을 (보인다이다 (세타 + : 여기

는 바이올린입니다 h)와 거리 (반경 + 목표 _ 방향)가 xy 평면을 교차하면 모든 것이 거꾸로 뒤집혀 뒤집어집니다.

이제는 camera() 함수에서 마지막 3 개의 변수를 제어하려고 시도했지만 혼란스러워집니다. 기능에 대한 설명서는 여기에 있습니다 :

https://processing.org/reference/camera_.html

사람은이 문제에 대한 해결책을 볼 수 있을까요?

또한 내가 할 수있는 구체를 회전시키고 이러한 문제가 없다고 확신하지만이 애니메이션으로 어디로 갈 것인지 확신 할 수있을 것입니다. 이 방법으로 더 쉬울 것입니다. 내가 틀릴 수도 있지만.

답변

0

나는 내 자신의 문제를 해결했다고 생각합니다.

나는 camera() 함수를 호출하기 전에, 무승부에 다음 줄을 추가했습니다 :

if ((x_eye- x_aim) < 0) { 
    z_orientation = 1; 
    } else { 
    z_orientation = -1; 
    } 
나는 그것이 플립을 유발 한 것을하지 (theta+h)했지만 것으로 나타났습니다

뷰 및 대상의 상대적 위치 .

https://jsfiddle.net/da8nza6y/1/

+0

당신은 [이 답변을 받아 들일]한다 (https://meta.stackexchange.com/questions/5234/how-does-accepting-an-answer- : 여기

업데이트 된 바이올린입니다 이 질문은 답변이 필요한 것으로 표시되지 않습니다. –

+0

나는 그것을 할 것이다. 수락하기 위해 클릭하면, 내 답변을 수락하기 위해 2 일을 기다려야한다는 메시지가 나타납니다. – Jozurcrunch