Frage
Ich versuche einen Shader zu machen, der die Sonnenposition und das Licht simuliert, das sie in einem Objekt reflektiert.
Um die Sonnenbahn zu simulieren, habe ich einen Timer, und die leichte Position wird definiert durch:
fvLightPosition.x=-cos(Time)*speed;
fvLightPosition.y=sin(Time)*speed;
fvLightPosition.z=100.0;
Der Timer ist eine Variable float Time0_X
Ich bekomme fast die richtige Flugbahn, außer dass das verkehrt herum ist und irgendwie etwas komisch aussieht. Kann mir jemand einen Tipp geben, wie ich die Sonnenbahn auf die richtige Weise simulieren kann?
Ich benutze Rendermonkey, um den Shader zu machen.
Lösung
Stellen Sie sicher, dass Sie Ihre skalieren Time
Wert so, dass es dazwischen liegt 0
und 2*PI
Radians (was 0 bzw. 180 Grad entspricht). Wenn Ihr Original Time
Wertbereiche von 0
zu einer Reihe MAX
, Sie können die Skalierung wie diese machen: (Time / MAX) * 2PI
.
Ich bin mir nicht sicher was speed
Bezieht sich auf, aber Sie sollten sich höchstwahrscheinlich nicht mit dem multiplizieren. Das cos
und sin
Die Werte repräsentieren die x- und y -Komponenten des Vektors zwischen Sonne und Ursprung, sodass Sie sich mit dem Abstand der Sonne von der Mitte Ihrer Szene vermehren sollten, was normalerweise konstant ist.