Bilder besser interpolieren

Status
Nicht offen für weitere Antworten.

dergrüne

Aktives Mitglied
Servus,

ich habe ne kleine Frage, wieso interpoliert Java3D jpgs so schlecht?

Als beispiel ich habe eine Sphere mit dem Radius 1f und nicht in der Z Achse verschoben, also ist die Kugel recht groß.

Jetzt muss ich da aber eine 2048x2048er Texture von der Erde drüberbügeln, dass es einigermaßen gescheit aussieht.

Eigentlich müsste das Bild doppelt so groß sein, dass man keine Pixel mehr sieht und keine Treppen (AntiAliasing geht

leider nicht, weil das verbugged ist). 2048² ist natürlich eine Hammertextur für jede Grafikkarte, ich frage mich einfach

wie das bei anderen Spielen z.B. X3 - Reunion oder so gemacht wird, da sind die Objekte noch viel größer, aber die

Texturen gestochen scharf, die können doch keine 16000er Texturen oder so verwenden.

Gibt es da einen Tip wie ich die Texturen schärfer bekomme, ohne noch mehr Pixel benutzen zu müssen. Z.B. einen

anderen Interpolationsmodus oder so?

mfg Der Grüne

Hier noch der Code wie ich Texturen einlade:

Code:
public static Appearance texture(String s) {
		TextureLoader loader = new TextureLoader(s, TextureLoader.GENERATE_MIPMAP, null);		
        ImageComponent2D image = loader.getImage();
        int imageWidth = image.getWidth();
        int imageHeight = image.getHeight();
        int imageLevel = 0;
        image.setCapability(ImageComponent2D.ALLOW_IMAGE_WRITE);
        Texture2D texture = new Texture2D(Texture.MULTI_LEVEL_MIPMAP, Texture.RGB,imageWidth ,imageHeight);
        /*Texture2D texture = new Texture2D();
        int form  = texture.getFormat();
        int base = texture.getMipMapMode();
        texture = new Texture2D(base,form,image.getWidth(),image.getHeight());
        */
        texture.setImage(imageLevel, image);
        Appearance appear = new Appearance();
        
        while(imageHeight > 1 || imageWidth > 1){
        	//Imagelevel erhöhen
        	++imageLevel;
        	if(imageHeight > 1){
        		imageHeight /= 2;
        	}        	
        	if(imageWidth > 1){
        		imageWidth /= 2;
        	}
        	image = loader.getScaledImage(imageWidth, imageHeight);
        	texture.setImage(imageLevel, image);
        }
        
        
        appear.setTexture(texture);        
        TextureAttributes texat = new TextureAttributes(TextureAttributes.MODULATE,
        		                  new Transform3D(),new Color4f(),TextureAttributes.NICEST);
        appear.setTextureAttributes(texat);
        Material mat = new Material(new Color3f(0f,0f,0f),new Color3f(0f,0f,0f),new Color3f(0f,0f,0f),new Color3f(0f,0f,0f),100f);
        mat.setDiffuseColor(1, 1, 1, 255);
        appear.setMaterial(mat);        
        return(appear);	
	}
 

0x7F800000

Top Contributor
wenn eine textur ordentlich mit nem biliniaren filter gerendert wird, dann dürftest du da niemals irgendwelche pixel erkennen können. Man muss es bestimmt irgendwo auch in J3D einstellen können...

Ansonsten, was die texturen von Planeten angeht: bist du dir da sicher, dass sich auf der Oberfläche des Planeten absolut jedes erkennbare detail absolut einzigartig ist?
Bei großen landschaften speichert schließlich auch kein mensch die gesamte textur an einem stück... wäre es vielleicht möglich, die textur in viele kleine fragmente zu unterteilen (zB kleines rechteck für die Eiskappen an den Polen, ein kleines recheck für schmelzendes eis an den Polrändern, ein kleines recheck für eine ebene felslandschaft, ein kleines recheck für gebirgsketten, ein rechteck für blaue ozeane usw...) und dann in einer groben textur abspeichern, wo auf dem planeten welche textur-stücke hingehören? Mit Multitexturing kann man sich damit recht vernünftig aussehende landschaften zusammenbasteln, ohne dass man viel redundante informationen in einer riesentextur unterbringt...
 

dergrüne

Aktives Mitglied
Das mit den Multitexturing stimmt schon, nur leider sind wir jetzt mehr oder weniger am Ende des Projektes und müssen es in zwei Wochen abgeben. Vor knapp 4 Monaten wusste ich es noch nicht besser und habe halt alles in einer großen Textur gemacht ich möchte halt jetzt nicht kurz vor der Abgabe nochmal alles umwerfen, zudem es auch noch andere Sachen gibt die gemacht werden müssen.

Von daher habe ich gedacht, dass es evtl. in Java nen Filter oder so für Texturen gibt, den man einfach einbauen kann, ohne an die Texturen selber rann zu müssen.

Danke für deine Antwort. Ich google mal ob es J3D sowas wie biliniare filter gibt.
 

0x7F800000

Top Contributor
Ich dachte der biliniare filter wär einfach ein felsenfestes hardware-element, das schon seit jahrzehnten auf jeder grafikkarte vorhanden ist, ohne dieses teil kann man doch kein einziges texturiertes dreick vernünftig auf den bildschirm zaubern... Dass man es evtl auch deaktivieren kann ist eine andere sache.

Aber ich meine: das ist ja nicht "alles nochmal umwerfen", du musst einfach deine zeichenfunktion für die planeten ein bisschen anpassen, da dürften zwei wochen doch reichen :toll:
 

dergrüne

Aktives Mitglied
Dank dir habs raus.

Einfach bei der Texture mit texture.setMagFilter(Texture.BASE_LEVEL_LINEAR); arbeiten. Super bilinear war das Zauberwort was mir in Google geholfen hat.
 
Status
Nicht offen für weitere Antworten.
Ähnliche Java Themen
  Titel Forum Antworten Datum
M Bilder werden unscharf angezeigt Spiele- und Multimedia-Programmierung 5
S Bilder Für Schachfiguren Spiele- und Multimedia-Programmierung 14
beatles Minesweeper - keine Bilder Spiele- und Multimedia-Programmierung 3
P [Spiel]Welche Bilder sind gleich Spiele- und Multimedia-Programmierung 2
O Bilder senden TV über DLNA? Spiele- und Multimedia-Programmierung 0
T Bilder Elegant darstellen... Spiele- und Multimedia-Programmierung 7
T Bilder einbinden, bzw. ändern Spiele- und Multimedia-Programmierung 5
M Bilder effizient speichern/serialisieren Spiele- und Multimedia-Programmierung 10
M Bilder in Java Spiele- und Multimedia-Programmierung 7
D Slick Lib - Bilder einlesen funktioniert nicht Spiele- und Multimedia-Programmierung 2
B Bilder in GUI ändern ohne repaint() Spiele- und Multimedia-Programmierung 6
T Spielautomat bilder vergleichen Spiele- und Multimedia-Programmierung 34
A Bilder werden nicht geladen Spiele- und Multimedia-Programmierung 6
S Datenbank gesucht für Bilder(gif-dateien) Spiele- und Multimedia-Programmierung 5
A Bilder (auf JPanels) auf komplette Zellengröße (GridBagLayout) skalieren Spiele- und Multimedia-Programmierung 2
I Bilder aus Quaxli's Tutorial Spiele- und Multimedia-Programmierung 3
A bilder performant und unhässlich skalliert darstellen? Spiele- und Multimedia-Programmierung 10
A 2 Bilder übereinander legen Spiele- und Multimedia-Programmierung 15
J 2D-Bilder in Java3D Spiele- und Multimedia-Programmierung 4
A Bilder(BMP) speichern Spiele- und Multimedia-Programmierung 2
S Bilder zuscheiden - Werte von php übergeben Spiele- und Multimedia-Programmierung 7
F Dynamische Bilder erzeugen? Spiele- und Multimedia-Programmierung 7
R Bilder aus animierter .gif extrahieren? Spiele- und Multimedia-Programmierung 4
C jpg.Bilder teilen/bearbeiten für Puzzle Spiele- und Multimedia-Programmierung 7
A Bilder bewegen Spiele- und Multimedia-Programmierung 2
M Bilder verzerren [Rechteck -> Trapez] Spiele- und Multimedia-Programmierung 4
K Bilder drehen Spiele- und Multimedia-Programmierung 5
H Bilder speichern 2 - Methode richten? Spiele- und Multimedia-Programmierung 2
H Bilder speichern Spiele- und Multimedia-Programmierung 3
A Bilder flackern Spiele- und Multimedia-Programmierung 5
T Gekachelte Bilder darstellen Spiele- und Multimedia-Programmierung 2
M Soll ich besser glTranslatef() oder gluLookAt() benutzen? Spiele- und Multimedia-Programmierung 6
D Java mit OpenGL - besser LWJGL oder JOGL? Spiele- und Multimedia-Programmierung 6
Q 2D Ansicht auf 3D Ansicht interpolieren! Spiele- und Multimedia-Programmierung 5

Ähnliche Java Themen

Neue Themen


Oben