2017-11-21 5 views
0

Ich habe eine große Kugel. Es gibt einen roten Punkt, der sich um die Kugel bewegt. Ich möchte diesem roten Punkt folgen, während er sich in die Kugel bewegt. Also muss sich meine Kamera mit dem roten Punkt bewegen. Aber es gibt ein Problem. Gerade jetzt, was ich erlebe, was in Exponat B. gezeigt ich meine Animation der Sicht gezeigt in Ausstellung A.P3D Kameraausrichtung

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

Hier ist der Code, den ich bisher müssen erkennen wollen. Ich denke, es ist ziemlich einfach. Ich habe 3 Variablen, die steuern, wo mein Auge ist, und ich habe 3 Variablen, die steuern, wo das Ziel ist. Der rote Punkt befindet sich ebenfalls an der Zielposition. Ich habe zwei Flugzeuge in x-y hinzugefügt, was mir geholfen hat, nicht zu verwirrt zu werden, während sich das Ding drehte. Hier

ist eine Geige:

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(); 

} 

So ist die Gurke ist, dass es wie vor (deren Lage in der XZ-Ebene auf den roten Punkt scheint durch den Winkel (Theta + gegeben h) und distanz (radius + target_elevation) vom Ursprung) kreuzt die xy-Ebene, alles wird umgedreht und rückwärts umgedreht.

Jetzt habe ich versucht, die letzten 3 Variablen in der camera() Funktion zu steuern, aber ich bin verwirrt. Die Dokumentation für die Funktion ist hier:

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

Kann mir jemand eine Lösung für dieses Problem sehen?

Auch ich bin mir sicher, dass ich nur die Kugel drehen könnte (was ich tun kann) und diese Probleme nicht habe, aber ich bin sicher, wohin ich mit dieser Animation gehe und ich habe das Gefühl, dass es Dinge geben wird komm, das wird mit dieser Methode einfacher. Obwohl ich mich irren könnte.

Antwort

0

Ich glaube, ich habe mein eigenes Problem gelöst.

Ich habe die folgenden Zeilen in Draw hinzugefügt, bevor die camera() Funktion aufrufen:

if ((x_eye- x_aim) < 0) { 
    z_orientation = 1; 
    } else { 
    z_orientation = -1; 
    } 

Ich bemerkte, dass es nicht (theta+h) war, dass die Flip wurde Auslösung, aber die relativen Positionen der Ansicht und Ziel . Hier

ist eine aktualisierte Geige:

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

+0

Sie sollten [akzeptieren diese Antwort] (https://meta.stackexchange.com/questions/5234/how-does-accepting-an-answer- arbeiten), so dass diese Frage nicht als eine Antwort –

+0

Ich werde das tun. Wenn ich auf "Akzeptieren" klicke, bekomme ich eine Aufforderung, dass ich zwei Tage warten muss, bis ich meine Antwort auf meinen eigenen Beitrag angenommen habe. – Jozurcrunch

Verwandte Themen