Falsche Positionierung der Interpolatoren nach Verwendung

Status
Nicht offen für weitere Antworten.

rietz

Mitglied
hallo,

mittlerweile habe ich ein anderes problem:

bei dem unten aufgeführten code wird erst ein positionsinterpolator angewendet, gefolgt von einem rotationsinterpolator.

der positionsinterpolator verschiebt den körper von 0 bis 0,7. danach soll der rotationinterpolator an der stelle 0,7 zum einsatz kommen. nur leider wird der körper wieder auf 0 verschoben und beginnt dort mit der rotation.

wie bewerkstellige ich es, das der körper an position 0,7 gedreht wird?

vielen dank für euer interesse im voraus.

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

      RotationInterpolator rotator;
      Alpha                rotationAlpha;

      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 alpha2 = new Alpha(1,Alpha.DECREASING_ENABLE|Alpha.INCREASING_ENABLE,0,5000,
                              7000, 0, 500,0,0,0);
    PositionInterpolator positionInterpolator = new PositionInterpolator(alpha2, RotTG);
    positionInterpolator.setStartPosition(0f);
    positionInterpolator.setEndPosition(0.7f);
    positionInterpolator.setSchedulingBounds(new BoundingSphere(
                    new Point3d(), 100000));
   RootBG.addChild(positionInterpolator);


      rotationAlpha=new Alpha(1,Alpha.INCREASING_ENABLE,0,13000,
                              9000,0,500,0,0,0);
      rotator=new RotationInterpolator(rotationAlpha,RotTG);
      rotator.setMinimumAngle(0f);
      rotator.setMaximumAngle((float)Math.toRadians(360*5));
    rotator.setSchedulingBounds(BigBounds);
      RootBG.addChild(rotator);


      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
hallo,

hat denn niemand je ein solches problem gehabt?

wie kann man das bsp. so verändern, das der 2. interpolator dort anfängt wo der erste aufgehört hat?

es wäre dringend.

vielen dank.
 

rietz

Mitglied
das hat keine auswirkungen.

hast du noch eine andere idee? probier mal das bsp. vielleicht fällt dir noch was ein. :cry:
 
Status
Nicht offen für weitere Antworten.

Oben