Textur mehrfach auf Objekt

Started by cocojack, May 02, 2013, 11:17:52 PM

Previous topic - Next topic

cocojack

Hallo, ich bin relativ neu in JPCT-AE aber ein fortgeschrittener Java-Programmierer.

Da ich ziemlich untertalentiert bin 3D Objekte zu Designen habe ich einige Stunden nach Hilfsmitteln zur Terrain-Generierung gesucht.
Ich habe mich letzten Endes für "GM Terrain Editor 2" entschieden.

Problem bei diesem Editor ist jedoch, dass es in einem Obj mehrere Teile der Karte als, ich nenne es einfach mal Fragment, speichert.

Das ist dann das Ergebnis, die Colormap wird mehrfach auf das Object3D geladen.


Wie kann ich erzwingen, dass er die Textur für das gesamte Object3D lädt?

mfg Coco

EgonOlsen

Du könntest die Texturkoordinaten nachträglich ändern. Es gibt hier im Forum irgendwo Beispiele dazu...reTile oder reTexture müssten die Methoden in diesen Beispiele heißen. Alternativ kannst du es mit einer Texture-Matrix versuchen, aber es kommt darauf an, wie die Koordinaten im Modell sind. Wenn die pro Patch immer von 0..1 gehen, dann bringt das nichts.

cocojack

Leider kann ich die Methode nicht finden.

Aber gibt es noch andere Tools um ein Gelände zu erstellen, welche vielleicht einfacher in die Engin integrierbar sind?

cocojack

Wie es scheint habe ich einen Weg gefunden, jedoch hat es nichts mit JPCT zu tun.

Eigentlich ist es recht einfach:

1. Laden mit Blender
2. Alle auswählen und mit strg+j Mergen
3. UV-Mapping -> Unwrap
4. Export als Obj

-> fertig

um die Von dem "GM Terrain Editor 2" ausgegebenen Textur-Datein zu mergen habe ich mir eine kleine Java-Applikation (für den PC) geschrieben.

Falls das jemandem hilft, hier ist der Code:

package Main;

import java.awt.image.BufferedImage;
import java.io.File;
import java.io.IOException;

import javax.imageio.ImageIO;

public class Main {

public static void main(String args[]) throws IOException{

if(args.length == 0) {
System.out.println("Bitte Pfad zu den Datein angeben!");
return;
}




int zeilen =8;
int spalten = 8;


int hoehe;
int breite;

int type; 

File[][] imgFiles = new File[zeilen][spalten];
for (int s = 0; s < spalten; s++) { 
for(int z = 0; z < zeilen; z++)
{
String debug = args[0] + z + "_" + s + ".png";
imgFiles[z][s] = new File(debug);

if(imgFiles[z][s] == null){
System.out.println("File not found");
}else{
System.out.println(debug + " loaded");
}
}
    }

BufferedImage[][] buffImages = new BufferedImage[zeilen][spalten]; 

for (int s = 0; s < spalten; s++) { 
for(int z = 0; z < zeilen; z++)
{
buffImages[z][s] = ImageIO.read(imgFiles[s][z]);
}
    }

type = buffImages[0][0].getType(); 
breite = buffImages[0][0].getWidth();
hoehe = buffImages[0][0].getHeight();

BufferedImage finalImg = new BufferedImage(breite*spalten, hoehe*zeilen, type);

for (int s = 0; s < spalten; s++) { 
for(int z = 0; z < zeilen; z++)
{
finalImg.createGraphics().drawImage(buffImages[z][s], breite * s, hoehe * z, null);
}
    }

        System.out.println("Füge Bild zusammen..."); 
        ImageIO.write(finalImg, "png", new File("E:/pictures_map/final.png"));
        System.out.println("Fertig"); 
}

}