Interpolatoren in Folge produzieren falsche Ausgaben

Status
Nicht offen für weitere Antworten.
R

Rietz

Gast
hi,

ich habe versucht mehre interpolatoren hinter einander zu setzen. im detail:

erst ein rotationsinterpolator, dann pathinterpolator, dann ein rotationsinterpolator, dann ein pathinterpolator ... .

nun scheint es aber bei der darstellung probleme zu geben. ich habe den eindruck als optimiert er die interpolatoren und führt alle bei der darstellung im applet gleichzeitig aus.

wo liegt der fehler?

vielen dank.
 
R

rietz

Gast
hallo Illuvatar,

vielen dank für dein interesse.

im detail, ich habe drei punkte. ich bewege (kamera) von punkt 1 zu punkt 2 und verwende hier den positionpathinterpolator. an punkt 2 angekommen soll die kamera sich in richtung punkt 3 drehen, dafür nehme ich den rotationsinterpolator. nachdem gedreht nehme ich wieder den positionpathinterpolator um zu p3 zu gelangen.

im normalfall würde man den RotPosPathInzerpolator nehmen, nur dieser würde sich in der bewegung von punkt 2 zu punkt 3 während der bewegung drehen und nicht direkt an punkt 2.

wenn ich meinen animation dann ausführe scheint er alle interpolatoren gleichzeitig auszuführen, da nur die bewegung von p1 zu p2 erfolgt und die animation endet.

weisst du eine lösung?
 

Illuvatar

Top Contributor
Solang ich net weiß wie du es machst kann ich dir net helfen^^ du musst halt erst nen PathInterpolator machen, wenn der fertig is nen RotationInterpolator, wenn der fertig is nen PathInterpolator usw
 
R

rietz

Gast
ich verwende eine for schleife.

als abfragebedingung wird ein point3f array verwendet.
{ermittlung winkel um den sich gedreht werden muss.
setzen rotationsinterpolator
setzen positionpathinterpolator
}

bei der darstellung scheint er aber den inhalt der schleife zu optimieren.

ist dir dies schon mal passiert?

danke
 

bazz-dee

Aktives Mitglied
Wenn ich das richtig verstehe machst du immer abwechselnd Rotation und Position ja??

Willst du das Objekt um sich selbst drehen oder um ein andere Objekt?
Weil die Rotation ja normal nur um den Urspung läuft.
 
R

rietz

Gast
hallo bazz-dee,

das stimmt, in der schleife erfolgt jeweils eine roation und dann bewegung. die rotation dreht sich um die eigene achse.

kannst du mir helfen?
 

bazz-dee

Aktives Mitglied
Dann probier mal das Objekt vor der Rotation jeweils in den Ursprung zu verschieben, um sich selber zu drehen, und dann wieder zurück zu schieben.

Ansonsten zeig mal nen bischen Quelltext.


Oder ne Idee:
Code:
...
TransformGroup tgObjekt = new TransformGroup();
TransformGroup tgRotationObjekt = new TransformGroup();
TransformGroup tgPositionObjekt = new TransformGroup();

tgObjekt.add(new Spehere(radius, myAppearance));

tgRotationObjekt.add(tgObjekt);

tgPositionObjekt.add(tgRotationObjekt);
...

Und jetz tust du die Rotationsinterpolation immer auf das tgRotationObjekt anwenden und die Positionsinterpolation immer auf das tgPositionObjekt.
Ich bin mir jetzt zwar nicht 100%ig sicher, aber ich glaube so müsste das funktionieren.
 
R

rietz

Gast
halllo bazz-dee,

also am Bsp.

Als erstes möchte ich den Körper drehen und anschließend verschieben.

Die Drehung dauert 5s und anschl. soll der Körper 7s verschoben werden.

Das Problem. wärend er dreht führt er schon die Verschiebung aus. Wenn Die Rotation aufhört, wird der Körper noch 2s verschoben.

Woran habert es?

Wäre sehr nett wenn du mir dabei helfen könntest.

Code:
import java.applet.Applet;
import java.awt.BorderLayout;
import java.awt.GraphicsConfiguration;
import com.sun.j3d.utils.applet.MainFrame;
import com.sun.j3d.utils.geometry.*;
import com.sun.j3d.utils.image.*;
import com.sun.j3d.utils.universe.*;
import javax.media.j3d.*;
import javax.vecmath.*;

public class Universe extends Applet
   {
   private SimpleUniverse u = null;

   public Universe()
      {
      }

   public BranchGroup createSceneGraph()
      {
      BranchGroup          RootBG=new BranchGroup();
      DirectionalLight     DLgt=new DirectionalLight(new Color3f(0.8f,0.8f,1.0f),new Vector3f(-0.5f,-1f,-0.5f));
      AmbientLight         ALgt=new AmbientLight(new Color3f(0.8f,0.8f,0.8f));
      BoundingSphere       BigBounds=new BoundingSphere(new Point3d(),100000);
      ALgt.setInfluencingBounds(BigBounds);
      DLgt.setInfluencingBounds(BigBounds);
      RootBG.addChild(ALgt);
      RootBG.addChild(DLgt);
  
      Appearance           BoxAppearance=new Appearance();
      TransformGroup       BoxTG=new TransformGroup(),RotTG=new TransformGroup();

      BoxTG.addChild(RotTG);
      RotTG.addChild(new com.sun.j3d.utils.geometry.Box(0.1f,0.2f,0.3f,Sphere.GENERATE_NORMALS,BoxAppearance));
      RotTG.setCapability(TransformGroup.ALLOW_TRANSFORM_WRITE);

      Alpha alpha = new Alpha(1, 5000);
      RotationInterpolator rotationInterpolator = new RotationInterpolator(
                     alpha, RotTG);
      rotationInterpolator.setMinimumAngle(0);
      rotationInterpolator.setMaximumAngle((float) Math
                     .toRadians(360 * 5));
      rotationInterpolator.setSchedulingBounds(new BoundingSphere(
                     new Point3d(), 100000));
      RootBG.addChild(rotationInterpolator);  
  

       Alpha alpha2 = new Alpha(1, 7000);
       PositionInterpolator positionInterpolator = new PositionInterpolator(alpha2, RotTG);
       positionInterpolator.setStartPosition(0f);
       positionInterpolator.setEndPosition(1f);
       positionInterpolator.setSchedulingBounds(new BoundingSphere(
                       new Point3d(), 100000));
      RootBG.addChild(positionInterpolator);
      RootBG.addChild(BoxTG);

      RootBG.compile();
      return RootBG;
      }

   public void init()
      {
      setLayout(new BorderLayout());
      GraphicsConfiguration config=SimpleUniverse.getPreferredConfiguration();
      Canvas3D c = new Canvas3D(config);
      add("Center", c);
      u = new SimpleUniverse(c);

      u.getViewingPlatform().setNominalViewingTransform();
      u.addBranchGraph(createSceneGraph());
      }


   public static void main(String[] args)
      {
      new MainFrame(new Universe(), 400, 400);
      }
}
 

rietz

Mitglied
für alle die es interessiert:

das problem bestand in der kurzen def. der alpha und kann mit der ausführlichen schreibweise korrigiert werden.

recht herzlichen dank an bazz-dee! :lol:
 
Status
Nicht offen für weitere Antworten.

Ähnliche Java Themen

Neue Themen


Oben