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.
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);
}
}