Main Menu

Textures ohne X11

Started by fendres, July 15, 2005, 04:52:57 PM

Previous topic - Next topic

fendres

Hallo,
ich suchte eine 3D Engine, die ich auf einem Server laufen lassen kann um Bilder für Webseiten generieren zu lassen.
Allerdings habe ich nachdem ich einen kleinen Prototyp auf Windows gebaut habe ein Problem: Auf den (GNU/Linux-) Server gebracht und dort kompiliert, bekomme ich eine Exception wenn ich versuche Texturen einzulesen:

Quote~/projects/jpct/buildtest/classes$ java `cat java_opts` JPCTDemo
Adding Lightsource: 0
Loading Texture...textures/other/numbers.jpg
Exception in thread "main" java.lang.InternalError: Can't connect to X11 window
server using ':0.0' as the value of the DISPLAY variable.
       at sun.awt.X11GraphicsEnvironment.initDisplay(Native Method)
       at sun.awt.X11GraphicsEnvironment.<clinit>(X11GraphicsEnvironment.java:134)
       at java.lang.Class.forName0(Native Method)
       at java.lang.Class.forName(Class.java:141)
       at java.awt.GraphicsEnvironment.getLocalGraphicsEnvironment(GraphicsEnvironment.java:62)
       at sun.awt.motif.MToolkit.<clinit>(MToolkit.java:81)
       at java.lang.Class.forName0(Native Method)
       at java.lang.Class.forName(Class.java:141)
       at java.awt.Toolkit$2.run(Toolkit.java:748)
       at java.security.AccessController.doPrivileged(Native Method)
       at java.awt.Toolkit.getDefaultToolkit(Toolkit.java:739)
       at com.threed.jpct.Texture.loadTexture(Unknown Source)
       at com.threed.jpct.Texture.<init>(Unknown Source)
       at JPCTDemo.<init>(JPCTDemo.java:183)
       at JPCTDemo.main(JPCTDemo.java:130)
Der Code, der das auslöst ist noch unverändert aus dem fps Beispiel:

183     numbers=new Texture("textures"+c+"other"+c+"numbers.jpg");
184     texMan.addTexture("numbers", numbers);
185      texMan.addTexture("envmap", new Texture("textures"+c+"other"+c+"envmap.jpg"));


Ich weiss da nicht so recht weiter. ..
Auf dem Webserver läuft kein X11 Server, geht es denn nicht ohne?
Den ganzen Code, der zum erstellen der GUI nötig war habe ich übrigens rausgeworfen, also denke ich, dass in die Richtung keine Ursache zu finden ist.
Auf Windows läuft der Prototyp auch und schreibt den Framebuffer in JPEG Dateien.
Irgendwo stand doch, dass einige Leute jPCT zum offscreen rendering benutzen, wie machen die das denn?

Schöne Grüße
fendres

EgonOlsen

Das Problem liegt bei Java bzw. bei AWT...es läuft unter Unix standardmäßig nicht ohne X11 Server. Um das zu lösen, gibt es mehrere Ansätze.

1. X11-Server installieren (Ja, nicht immer eine gute Lösung...)
2. X11-Dummyserver installieren (z.B. Xvfb)...das soll gehen, ich habe es aber noch nie probiert
3. Java 1.4+ im Headless-Mode betrieben. Dazu muss man einen Aufrufparameter angeben: -Djava.awt.headless=true
Aber auch damit geht nicht alles...manches wirft eine HeadlessException. jPCT als API sollte damit aber gehen.

fendres

Die Headless option hat super funktioniert, vielen Dank.