Java3D Textur Problem

Status
Nicht offen für weitere Antworten.
D

Developer_X

Gast
Hi, was mache ich im folgenden Quellcode falsch?

Code:
package Bäume;

import java.applet.Applet;
import java.awt.BorderLayout;
import java.awt.GraphicsConfiguration;
import Figuren.Rayman_Body;
import Figuren.Rayman_Feet;
import Figuren.Rayman_Hand_Left;
import Figuren.Rayman_Hand_Right;
import Figuren.Rayman_Head;
import com.sun.j3d.utils.applet.MainFrame;
import com.sun.j3d.utils.universe.*;
import javax.media.j3d.*;
import javax.vecmath.*;
import com.sun.j3d.utils.behaviors.vp.*;       
import com.sun.j3d.utils.image.TextureLoader;
	
	public class C_2 extends Applet {       
    
	//Private definierungen
	
        private Appearance blue = new Appearance();
        private Appearance blue2 = new Appearance();

    private SimpleUniverse universe ;
    private Canvas3D canvas;
    private BoundingSphere bounds = new BoundingSphere(new Point3d(0.0, 0.0, 10.0), 1000.0);
    Transform3D translate = new Transform3D();
    
      public void setupView() 
      { 
    	OrbitBehavior orbit = new OrbitBehavior(canvas,
                OrbitBehavior.REVERSE_ALL|OrbitBehavior.STOP_ZOOM);
        orbit.setSchedulingBounds(bounds);
        ViewingPlatform viewingPlatform = universe.getViewingPlatform();
        
        viewingPlatform.setNominalViewingTransform();
        viewingPlatform.setViewPlatformBehavior(orbit);       
        }       
         
        

          
          public BranchGroup createSceneGraph() {
          // Wurzel des Ast-Graphen erstellen
         BranchGroup objRoot = new BranchGroup();       
         // 45°-Rotation um die x-Achse
         translate.rotY(Math.toRadians(45));      
         
         Appearance white = new Appearance();

         Transform3D g1 = new Transform3D();
         g1.setTranslation(new Vector3f(0,1,0));
         TransformGroup G1 = new TransformGroup();
         G1.setTransform(g1);
         G1.addChild(new Rayman_Head().getChild());
         Transform3D g2 = new Transform3D();
         g2.setTranslation(new Vector3f(0,0,0));
         TransformGroup G2 = new TransformGroup();
         G2.setTransform(g2);
         G2.addChild(new Rayman_Body().getChild());
         Transform3D g3 = new Transform3D();
         g3.setTranslation(new Vector3f(-0.5f,0,0));
         TransformGroup G3 = new TransformGroup();
         G3.setTransform(g3);
         G3.addChild(new Rayman_Hand_Left().getChild());
         Transform3D g4 = new Transform3D();
         g4.setTranslation(new Vector3f(0.5f,0,0));
         TransformGroup G4 = new TransformGroup();
         G4.setTransform(g4);
         G4.addChild(new Rayman_Hand_Right().getChild());
         Transform3D g5 = new Transform3D();
         g5.setTranslation(new Vector3f(0.5f,-1f, 1.5f));
         TransformGroup G5 = new TransformGroup();
         G5.setTransform(g5);
         G5.addChild(new Rayman_Feet(blue).getChild1());
         G5.addChild(new Rayman_Feet(blue).getChild2());
         G5.addChild(new Rayman_Feet(blue).getChild3());
         G5.addChild(new Rayman_Feet(blue).getChild4());
         Transform3D g6 = new Transform3D();
         g6.setTranslation(new Vector3f(-0.5f,-1f, 1.5f));
         TransformGroup G6 = new TransformGroup();   
         G6.setTransform(g6);
         G6.addChild(new Rayman_Feet(blue2).getChild1());
         G6.addChild(new Rayman_Feet(blue2).getChild2());
         G6.addChild(new Rayman_Feet(blue2).getChild3());
         G6.addChild(new Rayman_Feet(blue2).getChild4());

         objRoot.addChild(G1);
         objRoot.addChild(G2);
         objRoot.addChild(G3);
         objRoot.addChild(G4);
         objRoot.addChild(G5);
         objRoot.addChild(G6);

       


        
         white.setTexture((new TextureLoader("F:/FUTURE.SYSTEMS/Rayman_Bilder/Rayman_Feet_!!!.jpg",null)).getTexture());
         white.setTextureAttributes(new TextureAttributes(TextureAttributes.MODULATE,new Transform3D(),new Color4f(),TextureAttributes.FASTEST));
        
         blue2.setTexture((new TextureLoader("F:/FUTURE.SYSTEMS/Rayman_Bilder/Rayman_Feet_!.jpg",null)).getTexture());
         blue2.setTextureAttributes(new TextureAttributes(TextureAttributes.MODULATE,new Transform3D(),new Color4f(),TextureAttributes.FASTEST));

         blue.setTexture((new TextureLoader("F:/FUTURE.SYSTEMS/Rayman_Bilder/Rayman_Feet_!!.jpg",null)).getTexture());
         blue.setTextureAttributes(new TextureAttributes(TextureAttributes.MODULATE,new Transform3D(),new Color4f(),TextureAttributes.FASTEST));

        Color3f lightColor = new Color3f(.3f,.3f,.3f);
        AmbientLight ambientLight= new AmbientLight(lightColor);
        ambientLight.setInfluencingBounds(bounds);
        objRoot.addChild(ambientLight);
        DirectionalLight directionalLight = new DirectionalLight();
        directionalLight.setColor(lightColor);
        directionalLight.setInfluencingBounds(bounds);
        objRoot.addChild(directionalLight);       
        return objRoot;       
    }       
     
    public void init() {
         BranchGroup scene = createSceneGraph();       
         setLayout(new BorderLayout());
         
         GraphicsConfiguration config = SimpleUniverse.getPreferredConfiguration();
         canvas = new Canvas3D(config);
         add("Center", canvas);       
        
         universe = new SimpleUniverse(canvas);       
         setupView();       
         universe.addBranchGraph(scene);
    }       
    public void destroy() {universe.removeAllLocales();}       
   
    public static void main(String[] args) {new MainFrame(new C_2(), 256, 256);}
}
Die Fehlermeldung ist folgende;
Code:
java.lang.OutOfMemoryError: Java heap space
	at java.awt.image.DataBufferByte.<init>(Unknown Source)
	at java.awt.image.Raster.createInterleavedRaster(Unknown Source)
	at java.awt.image.BufferedImage.<init>(Unknown Source)
	at com.sun.j3d.utils.image.TextureLoader.getScaledImage(TextureLoader.java:806)
	at com.sun.j3d.utils.image.TextureLoader.getScaledImage(TextureLoader.java:783)
	at com.sun.j3d.utils.image.TextureLoader.getTexture(TextureLoader.java:526)
	at Bäume.C_2.createSceneGraph(C_2.java:106)
	at Bäume.C_2.init(C_2.java:121)
	at sun.applet.AppletPanel.run(Unknown Source)
	at java.lang.Thread.run(Unknown Source)
[/b]
Kann mir bitte jemand helfen???
 

SegFault

Bekanntes Mitglied
Was ist an der Meldung
java.lang.OutOfMemoryError: Java heap space

so missverständlich. Texturen sind typische Speicherfresser. Meist sogar als bmp im Speicher. Dazu kommt noch Power of 2 (Die größe einer Textur wird auf irgendeine 2er potenz gelegt. Also ist deine Textur 513 x 513 Pixel groß wird sie auf 1024x1024 aufgebläht) ob das in java 3d auch so ist weiss ich nicht. Auf jedenfall ist der Speicher deiner jvm voll lass das ganze mal mit -Xms=256m -Xmx=512m laufen, damit gibst du der jvm mehr speicher. Bei Netbeans ist die z.B. bei mir nur auf 128 mb voreingestellt das gab schon mehrfach probleme.
 
D

Developer_X

Gast
Heißt das es ist begrenzt???
Also alle Bilder zusammen sind 50 kb groß, die Figuren Rayman_Hand,_Body usw... verbrauchen auch Texturen, dass macht insgesamt an Texturen 272kb ist das wirklich zu groß?
Das sind alle JPG Dateien falls das wichtig ist, denkst du ich sollte sie in Gifs umwandelN?
 

Fu3L

Top Contributor
Developer_X hat gesagt.:
Heißt das es ist begrenzt???
Also alle Bilder zusammen sind 50 kb groß, die Figuren Rayman_Hand,_Body usw... verbrauchen auch Texturen, dass macht insgesamt an Texturen 272kb ist das wirklich zu groß?
Das sind alle JPG Dateien falls das wichtig ist, denkst du ich sollte sie in Gifs umwandelN?

Ohne besondere Angaben verfügt die VM (meistens) über max. 128 MB Speicher... Und irgendwas in deinem Rayman ( :roll: ) scheint diese 128 MB zu beanspruchen....

The default value is chosen at runtime based on system configuration. For more information, see HotSpot Ergonomics
 

Marco13

Top Contributor
Ein SImpleUniverse ist auch nicht umsonst. Aber nebenbei: Wenn du eine 270kb große JPG-Datei hast, dann sagt das ... fast garnichts aus. Entschiedend ist die Größe des Bildes. Wenn die Textur 1000*1000 Pixel groß ist, dann braucht die schonmal mindestens 4 MB Speicher... Schau einfach mal ob das mit
java -Xmx500m MeinProgramm
funzt
 
D

Developer_X

Gast
Vielleicht könnte man eclipse entdrosseln, weil ich ein Viedeo Spiel programmiere, und dazu nun mal enorm viel Arbeitsspeicher benötigt, also könnte mir einer sagen wie man in Eclipse den Arbeittspeicher erhöhen könnte?

Ach und auch wenn das nicht geht, kann ich die Probeläufe nun mal nicht mit Texturen machen kann, aber wenn ich das Spiel nun außerhalb von Eclipse, so wie ne Exe datei starte, gibt es da dann auch einen Arbeitsspeicher, und ist dieser dann vom Computer Arbeittspeicher ?
 

Fu3L

Top Contributor
Der Arbeitsspeicher hat mit Eclipse und .exe gar nix zu tun...

Die Menge des Arbeitsspeicher, die das Programm zur Verfügung hat richtet sich entweder nach dem Standartwert (meist 128 MB) oder dem was du beim Aufruf festlegst und das geht, wie Marco13 und SegFault schon geschrieben haben halt mit "java -Xmx500m MeinProgramm" beim Aufruf. Diese Parameter kann man in Eclipse einstellen, dass die beim Start immer mit übergeben werden. Wenn mich nicht alles täuscht: Rechtsklick auf deine Datei mit der main-methode, dann auf "Run as" ---> "Run..." --> Da gibts auf der rechten Seite den Karteireiter "arguments" und da gibts dann einen Teil der zur VM gehört (habs noch nie benutzt, also ka, ob das die richtige Stelle dafür ist :D )
 

SegFault

Bekanntes Mitglied
Developer_X hat gesagt.:
Also die Bilder sind 20*20 groß

also wie schon angesprochen sagt das ggf noch nichts aus.

Sofern Java wirklich mit power of 2 arbeitet wäre das also intern eine 32x32 pixel textur.
Zugegeben ich glaube kaum das java mit sowas arbeitet ich weiss zumindest das in Grafikkarten Texturen so benutzt werden da ein Zugriff auf solche Größen als gesamter Block weitaus schneller geht.
Zumindest vermute ich mal das eine Textur aber als Bitmap im Arbeitsspeicher vorliegt.
d.h. 32x32 = 1024 pixel x 32 bit pro pixel = 32768 Bit (Ich gehe mal davon aus das java Texturen einen Alpha Wert haben können und er diesen einfach mit in den ram legt) 32768 Bit = 4 kb. Ich glaube aber das er für Verwaltung intern noch weitaus mehr verbraucht.

du kannst ja mal alle textursachen weglassen und den speicherverbrauch ausgeben und das ganze mal mit Texturen anzeigen lassen.

Speicherauslastung kannst du hiermit ausgeben:

Runtime.getRuntime().totalMemory();

P.S:

Zum speicherhandling vom Java. Die Java Runtime hat eben einen gewissen Speicher der ihr zugesichert ist. Die ist im normalfall 128 mb. Dies ist unabhängig vom reinen Arbeitsspeicher, wenn der erschöpft ist wird auf virtuellen Speicher zugegriffen und notfalls brachliegende Programmteile auf der HD ausgelager was aber extrem langsam ist. Diese 128 mb hat die Java Maschine belegt sie aber erst wenn der Speicher wirklich von irgendwas angefordert wird.
Wird mehr speicher als die 128 mb angefordert kommt die von dir gezeigte meldung.
Falls die Java Maschine noch genügend speicher übrig hat macht sie auch nicht so oft eine Garbage Collection weil die noch unnötig ist. Je voller das ganze wird umso eher räumt die Maschine mal auf. Jedoch wird so wieder geleerter Speicher nicht sofort zurückgegeben sondern weiterhin für die Java Maschine beansprucht.
Kurzum die JVM holt sich ggf immer mehr speicher bis zu der Grenze gibt den einmal reservierten Speicher aber nicht an andere applikationen zurück sondern behält den weiterhin für die JVM
 
Status
Nicht offen für weitere Antworten.
Ähnliche Java Themen
  Titel Forum Antworten Datum
J Java3D - Textur laden geht nicht Spiele- und Multimedia-Programmierung 9
H Java3D - Textur aufs innere einer Sphere mappen Spiele- und Multimedia-Programmierung 9
P Java3D Textur verzerrt Spiele- und Multimedia-Programmierung 3
G Textur in Java3D Spiele- und Multimedia-Programmierung 3
J Java3D: Textur kacheln? Spiele- und Multimedia-Programmierung 2
S Bump Mapping (Relief-Textur) in Java3D Spiele- und Multimedia-Programmierung 3
N Java3d in Eclipse einbinden Spiele- und Multimedia-Programmierung 4
Neumi5694 Java3D Viewer Beschriftung Spiele- und Multimedia-Programmierung 1
C Java3D Transformieren von obj. Datein Spiele- und Multimedia-Programmierung 0
M Cylinder anhand eines Vektors ausrichten (Java3d) Spiele- und Multimedia-Programmierung 0
Ruvok Java3D Tutorial gesucht Spiele- und Multimedia-Programmierung 5
U Hilfe bei Implementierung eines PointSounds in Java3D Spiele- und Multimedia-Programmierung 1
R Java3d ViewingPlatform erst Verschieben und dann RotationsInterpolator Spiele- und Multimedia-Programmierung 0
D Java3D - Blickfeld Spiele- und Multimedia-Programmierung 1
P Java3D Box Dimensionen und Positionierung Spiele- und Multimedia-Programmierung 1
E Java3D Objekt skalieren per JSlider/JButton Spiele- und Multimedia-Programmierung 10
S Java3D: Primitives zu einem Objekt kombinieren Spiele- und Multimedia-Programmierung 7
J Java3D - Farben vermischen sich Spiele- und Multimedia-Programmierung 7
T Java3D Rendering Problem Spiele- und Multimedia-Programmierung 7
S Java3D oder JMonkey? Spiele- und Multimedia-Programmierung 17
C java 3d ohne Java3d Spiele- und Multimedia-Programmierung 28
Maxim6394 [Java3D] Probleme bei Kollision Spiele- und Multimedia-Programmierung 7
Maxim6394 [Java3D] lookAt Mausposition Spiele- und Multimedia-Programmierung 17
Maxim6394 [Java3D] Probleme mit KeyFrame Animationen Spiele- und Multimedia-Programmierung 9
K Java3D als Applet ohne Installation von Java3d Spiele- und Multimedia-Programmierung 6
D Java3D Installation: package javax.media.j3d not found Spiele- und Multimedia-Programmierung 5
C Java3D Texture Mapping Spiele- und Multimedia-Programmierung 2
W Java3D: Kanten die hinter einem Objekt liegen werden gezeigt Spiele- und Multimedia-Programmierung 2
W Java3D: Farbe von Objekten stimmt nicht mit übergebenem RGB-Wert überein Spiele- und Multimedia-Programmierung 9
M Eigene Renderengine ohne Java3D,etc. Spiele- und Multimedia-Programmierung 19
C Java3D Sound spielt nur einen Sound ab. Spiele- und Multimedia-Programmierung 8
A JAVA3D TransformGroup <--> Group Problem Spiele- und Multimedia-Programmierung 3
M [Java3D] Animation von mehreren Objekten Spiele- und Multimedia-Programmierung 7
W Java3D: Eckkoordinaten einer Box herausfinden Spiele- und Multimedia-Programmierung 18
T Java3D: Objekte platzieren und entfernen? Spiele- und Multimedia-Programmierung 7
T Java3D: Nur die Kanten des Würfels rendern? Spiele- und Multimedia-Programmierung 4
W Java3D setBounds(BoundingBox) Spiele- und Multimedia-Programmierung 6
T [gelöst] Java3D: Unerwünschte Rotation um die 3.Achse vermeiden? Spiele- und Multimedia-Programmierung 3
Bastie JAVA3D - WRL Transform Spiele- und Multimedia-Programmierung 9
G Eclipse Problem mit Java3d Spiele- und Multimedia-Programmierung 3
T Java3D - Lichtquelle einbauen Spiele- und Multimedia-Programmierung 7
jemandzehage java3d parallel und perspective view Spiele- und Multimedia-Programmierung 5
H Cinema 4D in Java3D importieren Spiele- und Multimedia-Programmierung 2
1 [Java3D] komplexes Projekt? Spiele- und Multimedia-Programmierung 10
P .obj-Datei in Java3D laden: ParsingErrorException Spiele- und Multimedia-Programmierung 7
C Java3D Lichtquelle beim Beobachter Spiele- und Multimedia-Programmierung 2
C Java3D Interaktion während Animation Spiele- und Multimedia-Programmierung 3
aze Java3D: Flächen teilen Spiele- und Multimedia-Programmierung 15
aze Java3D: Gegenstände aufeinander zubewegen ohne Kollision Spiele- und Multimedia-Programmierung 4
D [JAVA3D] Es werden 2 Fenster erzeugt und auf dem falschen gezeichnet Spiele- und Multimedia-Programmierung 3
aze Java3D: leere Räume füllen Spiele- und Multimedia-Programmierung 2
aze Java3d:Helligkeit von Shape3D ändern Spiele- und Multimedia-Programmierung 2
S Einschätzung zu Java3D-Einstieg Spiele- und Multimedia-Programmierung 3
F Programm mit Java3D unter Linux laufen lassen Spiele- und Multimedia-Programmierung 3
I Vergleich von Java3D und OpenGL Spiele- und Multimedia-Programmierung 17
W Waterslide mit Java3D Spiele- und Multimedia-Programmierung 11
M Java3D Picking - falsche Objekte werden gepickt Spiele- und Multimedia-Programmierung 3
M [Java3D] Rotieren der Scene NICHT des POV Spiele- und Multimedia-Programmierung 4
F Jogl oder Java3D ? Spiele- und Multimedia-Programmierung 20
K Java3D Abfängerfrage Spiele- und Multimedia-Programmierung 3
aze Java3D:Farbige Flächen verschwinden lassen(Transparenz- oder Colorinterpolator?)) Spiele- und Multimedia-Programmierung 5
C Java3D PositionInterpolator Spiele- und Multimedia-Programmierung 3
G [Java3D] Probleme bei Animation Spiele- und Multimedia-Programmierung 4
E [JAVA3D] Kamerasteuerung Spiele- und Multimedia-Programmierung 3
E [JAVA3D] Schattenstrich durch die Szene Spiele- und Multimedia-Programmierung 4
M Grundsätzliche Java3D Fragen Spiele- und Multimedia-Programmierung 2
C Java3D SceneGraohPath Spiele- und Multimedia-Programmierung 2
C Java3D Rotation um einen Punkt (y-achse) Spiele- und Multimedia-Programmierung 2
G Java3D plattformunabhängig bundeln Spiele- und Multimedia-Programmierung 3
TheKing Java3D-Shooter View Spiele- und Multimedia-Programmierung 2
A Java3D tutorial? Spiele- und Multimedia-Programmierung 3
R Java3D Kollisionserkennung und Schwerkraft Spiele- und Multimedia-Programmierung 17
M Java3D Objekte entfernen und hinzufügen Spiele- und Multimedia-Programmierung 10
J Java3d Schnelle Geschosse Spiele- und Multimedia-Programmierung 12
D Kann ich mit Java3D 2D Daten als 3D surfaceplot plotten? Spiele- und Multimedia-Programmierung 5
J Java3d setTextureTransform verändert J3DGraphics2D Spiele- und Multimedia-Programmierung 4
J Hilfe: Rotation X und Y Achse (Java3d) Spiele- und Multimedia-Programmierung 12
K Java3D: LineStripArray Spiele- und Multimedia-Programmierung 2
P Java3D - Zylinder genau wie Vektor ausrichten Spiele- und Multimedia-Programmierung 5
Developer_X Java3D Mensch Ärgere Dich nicht. Spiele- und Multimedia-Programmierung 10
C JAVA3D Rotation um einen bestimmten Punkt Spiele- und Multimedia-Programmierung 20
Developer_X Java3D-Ungeeignet für 3D Spiele wegen Heap Space=? Spiele- und Multimedia-Programmierung 23
Developer_X Java3D Canvas post Renderer und? Spiele- und Multimedia-Programmierung 5
A Java3D Sichtweite Spiele- und Multimedia-Programmierung 2
"Er" Kamera rotation in Java3D Spiele- und Multimedia-Programmierung 2
A Java3D: Behavior scheduling bounds Spiele- und Multimedia-Programmierung 3
Developer_X THE BALL (needs Java3D) Spiele- und Multimedia-Programmierung 34
Developer_X Java3D Game_(die erste) Spiele- und Multimedia-Programmierung 2
Developer_X Java3D und while schleifen Spiele- und Multimedia-Programmierung 4
Developer_X Collisionserkennung in Java3D Spiele- und Multimedia-Programmierung 3
Developer_X Java3D Node -> Obj Data Spiele- und Multimedia-Programmierung 2
Developer_X Figuren werden nicht angezeigt (Java3D) Spiele- und Multimedia-Programmierung 5
S PDFRenderer und Java3D Spiele- und Multimedia-Programmierung 2
Developer_X Java3D- der Mausklick auf Nodes Spiele- und Multimedia-Programmierung 3
Developer_X Java3D Point Sound Spiele- und Multimedia-Programmierung 71
Developer_X Lines in Java3D Spiele- und Multimedia-Programmierung 4
V Java3D: HUD erstellen Spiele- und Multimedia-Programmierung 2
V Java3D: scheinende Sonne Spiele- und Multimedia-Programmierung 4
V Java3D: Ringe für Saturn erstellen Spiele- und Multimedia-Programmierung 8
V Java3D: automatisches Bewegen der Kamera Spiele- und Multimedia-Programmierung 19

Ähnliche Java Themen


Oben