Too Cool for Internet Explorer

J3DScene .. 3D fremviser i java

JScene1.png
De gange jeg har lavet geometriske algoritmer har det altid generet mig at jeg ikke har haft noget ordentligt værktøj til at visualisere løsninger eller data-strukturer. Jeg har enten tegnet 2D-tegninger på papir hvor punkter var store hvis de var ude af papirets plan og små hvis de var inde i planet. Hvis jeg skal lave rotationer eller translateringer i 3D sidder jeg typisk og stritter og vifter med højre hånds tommel, pege og lange-finger for at illustrere et Cartesisk koordinatsystem, og hvis to koordinat-systemer skal bruges må jeg tage hjørnet af et bord til hjælp.

Problemet blev ikke mindre da jeg begyndte at interessere mig for proteiner, som er store makro-molekyler med indviklede strukturer. Selvom der findes glimrende fremvisere af protein-strukturer vil man altid gerne selv rode med fremviseren så den kan vise forskellige egenskaber. Jeg har en tid benyttet POV-Ray til at fremvise scener, men det tager for lang tid både at skrive en scene samt at ray-trace et billede med megen gennemsigtighed.

Jeg har derfor endelig taget mig sammen til at lave en lille 3D fremviser i mit yndlings-sprog java: J3DScene. Formålet med biblioteket er at gøre opbygning af 3D-scenen så enkel som muligt så man kan bruge sin tid til at kigge på den i stedet. Biblioteket skal blot inkluderes i ens class-path hvorefter følgende java-instruktioner opretter en frame som viser en kapsel-form, en cylinder og en tekst:

J3DGraphics scene = J3DGraphics.createJ3DGraphicsInFrame();
scene.addVolume( new Cylinder(new Vector(1,0,0), new Vector(0,1,0), 0.1f) );
scene.addVolume( 
        new Capsule(new Vector(0,0,0), new Vector(-1,1,0), 0.2f), 
        new java.awt.Color(200,40,40,100)   );
scene.addText( "Some text", new Vector(1,1,0) );
scene.repaint();

Flere eksempler og detaljer kan ses på J3DScene hjemmesiden. Desværre kræves det at man installerer Java3D for at fremviseren virker.
JScene2.png

Rasmus's billede

classpath

Det er måske ikke alle der ved hvordan man tilføjer en jar-fil til sin class-path så her er en lille vejledning i dette også. Antag du har filen Test.java som indeholder følgende

import edu.jScene.*;
import edu.math.*;
import edu.geom3D.*;

class Test{
   public static void main(String[] args){
      J3DGraphics scene = J3DGraphics.createJ3DGraphicsInFrame();
      scene.addVolume( new Cylinder(new Vector(1,0,0), new Vector(0,1,0), 0.1f) );
      scene.addVolume( 
              new Capsule(new Vector(0,0,0), new Vector(-1,1,0), 0.2f), 
              new java.awt.Color(200,40,40,100)     );
      scene.addText( "Some text", new Vector(1,1,0) );
      scene.repaint();
   }
}

Denne fil skal nu kompileres, så vi lægger eksempelvis J3DScene.jar i samme bibliotek som Test.java og skriver
javac -classpath J3DScene.jar Test.java
java -classpath J3DScene.jar Test

Dette skulle gerne kompilere og køre.

Ønsker man at tilføje en jar-fil til sit projekt i eclipse kan man trykke 'Project' -> 'Properties' -> 'Java Build Path' -> 'Libraries' -> 'Add external JARs' og så finde J3DScene.jar. Ovenstående kode vil derefter også virke. Husk stadig at Java3D skal være installeret.

A common mistake made by people trying to design something completely foolproof, is to underestimate the engenuity of complete fools.
-HHGTTG

Rasmus's billede

Det bør nævnes at nogle

Det bør nævnes at nogle metoder har skiftet navn siden jeg skrev denne post. Men hjemmesiden jeg linker til er opdateret.