PDA

View Full Version : [Java3d] Pavimenti con texture


franksisca
16-03-2010, 12:01
private TransformGroup creaPavimento() {
Texture texture = (new TextureLoader("textures/autobloccanti.jpg", this))
.getTexture();
float l = 60f; // (float) lato;
texture.setMagFilter(Texture.NICEST);
texture.setMipMapMode(Texture.BASE_LEVEL);
Appearance apparence = new Appearance();
apparence.setTexture(texture);
Box pavimento = new Box(l, 0.1f, l, Box.GENERATE_TEXTURE_COORDS, apparence);
GeometryArray g = (GeometryArray) pavimento.getShape(Box.TOP)
.getGeometry();
TexCoord2f[] tx = new TexCoord2f[g.getVertexCount()];
for (int k = 0; k < tx.length; k++) {
tx[k] = new TexCoord2f();
}
g.getTextureCoordinates(0, 0, tx);
for (TexCoord2f t : tx) {
t.scale(2f);
}
g.setTextureCoordinates(0, 0, tx);
pavimento.getShape(Box.TOP).setAppearance(apparence);
Transform3D transf = new Transform3D();
TransformGroup tg = new TransformGroup();
tg.setCapability(TransformGroup.ALLOW_TRANSFORM_READ);
tg.setCapability(TransformGroup.ALLOW_TRANSFORM_WRITE);
Vector3f posizione = new Vector3f(0, -2.5f, 0);
transf.setTranslation(posizione);
tg.setTransform(transf);
tg.addChild(pavimento);
return tg;
}


con questo codice creo il pavimento della mia applicazione 3d.
solo che non riesco a trovare il codice per "replicare" questa texture, ovvero me ne crea una ma poi tutto il resto è vuoto.

considerando che bene o male io sò la dimensione massima del mio "mondo", come faccio a fargliela replicaer?

franksisca
16-03-2010, 16:11
allora gho trovato qeusta vecchia discussione:
http://www.hwupgrade.it/forum/showthread.php?t=1952043

(P.S.: tramite google, con la ricerca interna non l'aveva trovata O_O)

solo che non riesco a fare quello che voglio


praticamente io creo un box 1000x1000 e voglio replicare su di lui la stessa texture.

non riesco e ci sto sbattendo abbastanza

franksisca
16-03-2010, 16:24
continuando a spulciare ho trovato questo....
apparence.setTexCoordGeneration(new TexCoordGeneration());

però ora la texture la restringe troppo e sembra una immagine "diversa"...

franksisca
18-03-2010, 13:56
up

PGI-Bis
18-03-2010, 14:17
Puoi replicare un'immagine su una superficie usando WRAP come valore per i metodi setBoundary S e T di un oggetto Texture E avendo un set di coordinate per le texture che ecceda il range [0,1]. Vale a dire che se ho un quadrato le cui coordinate texture vanno da (0,0) per un estremo a (4,4) per l'altro e uso un oggetto Texture in modalità "WRAP" l'immagine della texture sarà replicata 4 volte (lungo il lato, quindi 16 tile sulla superficie).

TexCoordGeneration "replica troppo" perch produce un set di coodinate usando una formula tipo:

u = x + z
v = y

che genera valori eccedenti il range [0,1] per una superficie piana sufficientemente estesa.

franksisca
18-03-2010, 14:25
Puoi replicare un'immagine su una superficie usando WRAP come valore per i metodi setBoundary S e T di un oggetto Texture E avendo un set di coordinate per le texture che ecceda il range [0,1]. Vale a dire che se ho un quadrato le cui coordinate texture vanno da (0,0) per un estremo a (4,4) per l'altro e uso un oggetto Texture in modalità "WRAP" l'immagine della texture sarà replicata 4 volte (lungo il lato, quindi 16 tile sulla superficie).

TexCoordGeneration "replica troppo" perch produce un set di coodinate usando una formula tipo:

u = x + z
v = y

che genera valori eccedenti il range [0,1] per una superficie piana sufficientemente estesa.
il fatto è che credo che la texture sia troppo piccola, anche se è una immagine 2500x1600

PGI-Bis
18-03-2010, 14:31
La dimensione dell'immagine non contribuisce alla dimensione della sua proiezione sulla superficie 3d ma stabilisce la risoluzione di quella proiezione.

franksisca
18-03-2010, 14:34
La dimensione dell'immagine non contribuisce alla dimensione della sua proiezione sulla superficie 3d ma stabilisce la risoluzione di quella proiezione.

ok, dopo provo a fare come mi hai suggerito