Ich beschäftige mich jetzt schon ne weile mit verschiedenen tutorials zu java 3d, aber ich komme beim morphing einfach nicht klar. ich habs jetzt geschafft 2 meshes aus 3ds max zu importieren, eine standart kugel und eine deformierte kugel. beide werden korrekt angezeigt wenn ich sie einfach nur in den sceneGraph einfüge.
ich will jetzt aber eine keyframe animation, wo die eine kugel sich zu der anderen transformiert. ich hab die geometryarrays aus den 3ds dateien rausgeholt, beide haben die gleiche vertex anzahl. ich hab ein alpha objekt und ein morph objekt erzeugt. dazu noch das behavior, aber ich versteh nicht so richtig was ich genau machen soll.
hier der code:
kann jemand helfen?
übrigens ist dabei im sceneGraph nur das ausgangsframe zu sehen(je nachdem welche 3ds datei ich zuerst lade), bewegung ist da keine.
ich will jetzt aber eine keyframe animation, wo die eine kugel sich zu der anderen transformiert. ich hab die geometryarrays aus den 3ds dateien rausgeholt, beide haben die gleiche vertex anzahl. ich hab ein alpha objekt und ein morph objekt erzeugt. dazu noch das behavior, aber ich versteh nicht so richtig was ich genau machen soll.
hier der code:
Java:
Shape3D[] frames;
GeometryArray[] frameGeom;
Java:
public void loadFrames(String dir)
{
String[] frameNames=new String[]{"testSphere02.3DS","testSphere01.3DS"};
this.frames=new Shape3D[frameNames.length];
int i=0;
for(String s:frameNames)
{
FileWriter ofw=null;
System.out.println("Loading: "+s);
try{
ModelLoader loader=new ModelLoader();
loadedScene=loader.load(dir+s);
if(loadedScene!=null)
{
frames[i]=(Shape3D)loadedScene.getSceneGroup().getChild(0).cloneNode(true);
Appearance app=new Appearance();
frames[i].setAppearance(createAppearance());
System.out.println(loadedScene.getSceneGroup().getChild(0));
i++;
}
}catch(Exception e){System.err.println(e);}
}
}
Java:
public void playAni()
{
TransformGroup tg=new TransformGroup();
loadFrames("F:\\3d\\");
frameGeom=new GeometryArray[frames.length];
int i=0;
for(Shape3D s:frames)
{
frameGeom[i]=(GeometryArray)frames[i].getGeometry();
i++;
}
Morph morphObj=new Morph(frameGeom,createAppearance());
morphObj.setCapability(Morph.ALLOW_WEIGHTS_WRITE);
Alpha alpha = new Alpha(-1, 500);
alpha.setIncreasingAlphaRampDuration(100);
morphBehavior morphBehav=new morphBehavior(morphObj,alpha);
tg.addChild(morphObj);
sceneBG.addChild(morphBehav);
sceneBG.addChild(tg);
}
Java:
public class morphBehavior extends Behavior
{
Morph targetMorph;
Alpha alpha;
WakeupCondition trigger = new WakeupOnElapsedFrames(0);
morphBehavior(Morph targetMorph, Alpha alpha)
{
this.targetMorph=targetMorph;
this.alpha=alpha;
setSchedulingBounds(bounds);
}
public void initialize()
{
this.wakeupOn(trigger);
}
public void processStimulus(Enumeration e)
{
System.out.println("asdf");
this.wakeupOn(trigger);
}
}
kann jemand helfen?
übrigens ist dabei im sceneGraph nur das ausgangsframe zu sehen(je nachdem welche 3ds datei ich zuerst lade), bewegung ist da keine.
Zuletzt bearbeitet: