Eine kleine Demo Sammlung. Vielleicht erleichtert das Einsteigern die Wahl.
Alle Programme zeigen einen Würfel.
JPCT (Von Quaxil, mit ein paar Verbesserungen von mir)
Java 3D (von hoon):
Vielleicht kann noch jemand Demos für jMe und weitere ergänzen.
MFG
Alle Programme zeigen einen Würfel.
JPCT (Von Quaxil, mit ein paar Verbesserungen von mir)
Code:
import com.threed.jpct.*;
import java.awt.*;
public class Test1 extends Frame{
private static final long serialVersionUID = 1L;
private World world;
private Camera camera;
private FrameBuffer buffer;
boolean running = true;
Object3D box;
TextureManager texman;
public static void main(String[] args){
new Test1();
}
public Test1(){
//Engine konfigurieren
Config.maxPolysVisible = 10000; //max. sichtbare Polygone
world = new World(); // Hauptklasse instanziieren
world.setAmbientLight(0,255,0); //grünes Umgebungslicht
texman = TextureManager.getInstance();
Texture spot=new Texture(getClass().getClassLoader().getResourceAsStream("textures/envmap.jpg"),false);
TextureManager.getInstance().addTexture("car", spot);
//Box erzeugen
box = Primitives.getBox(8f,1f);
box.setTexture("car");
box.setSpecularLighting(true);
// Textur als Umgebungs-Map. Noch keine so rechte Ahnung was gemeint ist, sieht
box.setEnvmapped(Object3D.ENVMAP_ENABLED);
box.build();
world.addObject(box); //Box in die Welt packen
camera = world.getCamera(); //Kamera abholen
camera.setPosition(50,-50,-5); //Position verändern
camera.lookAt(box.getTransformedCenter()); //auf die Box gucken
//Frame erzeugen
setTitle("jPCT "+Config.getVersion());
pack();
setSize(800,600);
setResizable(false);
setVisible(true);
loop();
}
private void loop(){
World.setDefaultThread(Thread.currentThread()); //JPCT-Funktionen werde aus diese Thread aufgerufen
buffer = new FrameBuffer(800,600,FrameBuffer.SAMPLINGMODE_NORMAL); //FrameBuffer zum Zeichnen
buffer.enableRenderer(IRenderer.RENDERER_SOFTWARE); //Renderer zuweisen
buffer.optimizeBufferAccess();//schnellst Buffer-Zugriff ermitteln
while(running){
buffer.clear(); //no comment
world.renderScene(buffer);
//world.drawWireframe(buffer, Color.green); um im Wireframe zu zeichnen
world.draw(buffer); //zeichne in den Buffer
buffer.update(); //gewährleistet, daß alle Änderungen übernommen werden. Update des Output-Buffers
buffer.display(getGraphics());
Thread.yield();
try {
Thread.sleep(20);
} catch (InterruptedException e) {
System.out.println(e);
}
}
}
}
Java 3D (von hoon):
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.universe.SimpleUniverse;
import com.sun.j3d.utils.geometry.ColorCube;
import com.sun.j3d.utils.behaviors.mouse.MouseRotate;
import javax.media.j3d.*;
public class MySimpleUniverse extends Applet
{
// Inhaltszweig
public BranchGroup erzeugeInhalt()
{
// Erzeugen einer (Wurzel)Gruppe die den geamten Inhalt des Universum aufnehmen soll
BranchGroup inhalt = new BranchGroup();
// Erzeugen eines geometrischen Objektes inklusive voreingestellten Aussehens
ColorCube farbigerWuerfel = new ColorCube(0.4);
// Erzeugen einer Transformgruppe mit Zugriffsrechten fuer Maussteuerung
TransformGroup tg = new TransformGroup();
tg.setCapability(TransformGroup.ALLOW_TRANSFORM_READ);
tg.setCapability(TransformGroup.ALLOW_TRANSFORM_WRITE);
// Gebe dem verwaisten Wuerfel drehfreudige Eltern
tg.addChild(farbigerWuerfel);
// Erzeuge ein Mausdrehobjekt in einem geplanten Bereich mit Ziel-Transformgruppe
MouseRotate rotor = new MouseRotate();
rotor.setSchedulingBounds(new BoundingSphere());
rotor.setTransformGroup(tg);
// Einhaengen der Transformgruppe und des Mausverhaltens in die Wurzelgruppe
inhalt.addChild(tg);
inhalt.addChild(rotor);
// Optimiert den gesamten Inhaltszweig - nicht unbedingt erforderlich
inhalt.compile();
return inhalt; // Los, gibs mir!
}
// Sichtzweig
public SimpleUniverse erzeugeSicht()
{
// Erzeugen eines minimalen virtuellen Universums mit Hilfe der SimpleUniverse-Klasse
SimpleUniverse minimalesUniversum = null;
// Besorgen der besten Konfiguration hinsichtlich der
// Anzeigeumgebung (Farbtiefe, Tranzparenzwerte der Pixel, ...)
GraphicsConfiguration config = SimpleUniverse.getPreferredConfiguration();
// Erzeugen des aeusserst schweren Anzeigeflaeche-Objektes
Canvas3D canvas3d = new Canvas3D(config);
// Hinzufügen der Anzeigeflaeche zum Clientbereich des Fensters
add(canvas3d);
// Uebergabe des Canvas3D-Objekts als Anzeigeflaeche
minimalesUniversum = new SimpleUniverse(canvas3d);
// setNominalViewingTransform() stellt den Betrachter 2,41m auf die positive
// z-Achse mit Sichtrichtung nach unten in negative z-Achse
minimalesUniversum.getViewingPlatform().setNominalViewingTransform();
return minimalesUniversum; // Her mit dem Mist!
}
// Diese Methode wird vom Browser beim Laden des Applets aufgerufen.
public void init()
{
// Erzeuge neues Layout für Container
setLayout(new BorderLayout());
// Sei Gott und erzeuge ein minimales Universum mit Sicht auf den Inhalt
SimpleUniverse su = erzeugeSicht();
// Sei Gott und erzeuge den Inhalt des Universums mit Maussteuerung
BranchGroup suInhalt = erzeugeInhalt();
// Es werde Licht! - verbindet Universum inklusive Sicht mit Inhalt
su.addBranchGraph(suInhalt);
}
// Startpunkt fuer die Laufzeitumgebung
public static void main(String[] args)
{
new MainFrame(new MySimpleUniverse(), 800, 600);
}
}
Vielleicht kann noch jemand Demos für jMe und weitere ergänzen.
MFG