Benutzer-Werkzeuge

Webseiten-Werkzeuge


api:documentation:grafik3d:animation:start

Unterschiede

Hier werden die Unterschiede zwischen zwei Versionen angezeigt.

Link zu dieser Vergleichsansicht

Beide Seiten der vorigen RevisionVorhergehende Überarbeitung
Nächste Überarbeitung
Vorhergehende Überarbeitung
api:documentation:grafik3d:animation:start [2025/03/04 17:58] – [Animation] martinapi:documentation:grafik3d:animation:start [2025/03/08 13:47] (aktuell) – [Beispiel] martin
Zeile 1: Zeile 1:
 ====== Animation ====== ====== Animation ======
 <WRAP center round info 80%> <WRAP center round info 80%>
-Jedes graphische Objekt (''Box3d'', ''Sphere3d'', ...) ist eine Unterklasse von ''Actor'' und besitzt daher eine abstrakte Methode ''act'', die 30-mal je Sekunde aufgerufen wird. Durch Überschreiben dieser Methode ist es möglich, das Objekt zu animieren. Natürlich kann man auch selbst eine Klasse erstellen, die direkt von ''Actor'' erbt. Im Folgenden ein paar Beispielprogramme, die das Konzept anschaulich machen.+Jedes graphische Objekt (''Box3d'', ''Sphere3d'', ...), jede Kamera und jede Lichtquelle ist eine Unterklasse von ''Actor'' und besitzt daher eine abstrakte Methode ''act'', die 30-mal je Sekunde aufgerufen wird. Durch Überschreiben dieser Methode ist es möglich, das Objekt zu animieren. Natürlich kann man auch selbst eine Klasse erstellen, die direkt von ''Actor'' erbt. Im Folgenden ein paar Beispielprogramme, die das Konzept anschaulich machen.
 </WRAP> </WRAP>
  
  
 ==== Beispiel ==== ==== Beispiel ====
-<WRAP center round tip 80%> 
-</WRAP> 
- 
 <HTML> <HTML>
 <div class="java-online" style="height: 300px; width: 100%" data-java-online="{'withBottomPanel': false, 'id': '3d-animation1', 'enableFileAccess': true}"> <div class="java-online" style="height: 300px; width: 100%" data-java-online="{'withBottomPanel': false, 'id': '3d-animation1', 'enableFileAccess': true}">
  
 <script type="text/plain" title="Test1.java"> <script type="text/plain" title="Test1.java">
 +double rotationsPerSecond = 0.5;
 +new OrbitingSphere(new Vector3(1, 0, 0), new Vector3(0, 1, 0), 0, rotationsPerSecond).getMaterial().setColor(0xff0000);
 +new OrbitingSphere(new Vector3(0, 0, 1), new Vector3(0, 1, 0), 90, rotationsPerSecond).getMaterial().setColor(0x0000ff);
 +new OrbitingSphere(new Vector3(0, 0, 1), new Vector3(1, 0, 0), 90, rotationsPerSecond * 2).getMaterial().setColor(0x00ff00);
 +
 +
 +
 +class OrbitingSphere extends Sphere3d {
 +   Vector3 v1;
 +   Vector3 v2;
 +   double phaseShift;
 +   double omega;
 +
 +   public OrbitingSphere(Vector3 v1, Vector3 v2, double phaseShift, double rotationsPerSecond) {
 +      this.v1 = v1;
 +      this.v2 = v2;
 +      this.phaseShift = Math.toRadians(phaseShift);
 +      omega = Math.PI * 2 * rotationsPerSecond / 1000;
 +      scale(0.2);
 +   }
 +
 +   public void act() {
 +      double angle = phaseShift + System.currentTimeMillis() * omega;
 +      Vector3 position = v1.scaledBy(Math.cos(angle)).add(v2.scaledBy(Math.sin(angle)));
 +      moveTo(position);
 +   }
  
 +}
 </script> </script>
  
api/documentation/grafik3d/animation/start.1741111122.txt.gz · Zuletzt geändert: 2025/03/04 17:58 von martin