Torna indietro   Hardware Upgrade Forum > Software > Programmazione

Cineca inaugura Pitagora, il supercomputer Lenovo per la ricerca sulla fusione nucleare
Cineca inaugura Pitagora, il supercomputer Lenovo per la ricerca sulla fusione nucleare
Realizzato da Lenovo e installato presso il Cineca di Casalecchio di Reno, Pitagora offre circa 44 PFlop/s di potenza di calcolo ed è dedicato alla simulazione della fisica del plasma e allo studio dei materiali avanzati per la fusione, integrandosi nell’ecosistema del Tecnopolo di Bologna come infrastruttura strategica finanziata da EUROfusion e gestita in collaborazione con ENEA
Mova Z60 Ultra Roller Complete: pulisce bene grazie anche all'IA
Mova Z60 Ultra Roller Complete: pulisce bene grazie anche all'IA
Rullo di lavaggio dei pavimenti abbinato a un potente motore da 28.000 Pa e a bracci esterni che si estendono: queste, e molte altre, le caratteristiche tecniche di Z60 Ultra Roller Complete, l'ultimo robot di Mova che pulisce secondo le nostre preferenze oppure lasciando far tutto alla ricca logica di intelligenza artificiale integrata
Renault Twingo E-Tech Electric: che prezzo!
Renault Twingo E-Tech Electric: che prezzo!
Renault annuncia la nuova vettura compatta del segmento A, che strizza l'occhio alla tradizione del modello abbinandovi una motorizzazione completamente elettrica e caratteristiche ideali per i tragitti urbani. Renault Twingo E-Tech Electric punta su abitabilità, per una lunghezza di meno di 3,8 metri, abbinata a un prezzo di lancio senza incentivi di 20.000€
Tutti gli articoli Tutte le news

Vai al Forum
Rispondi
 
Strumenti
Old 10-11-2006, 17:08   #1
PUMA81
Senior Member
 
L'Avatar di PUMA81
 
Iscritto dal: Sep 2004
Messaggi: 404
Texture in Java 3D

Salve a tutti, avrei bisogno di un aiutino...
Come faccio ad applicare una texture su un'altra? mi spiego meglio: ho un parallelepipedo dove ho applicato una texture di mattoni e adesso vorrei applicare in un punto specifico una texture per le finestre. Come si fa?
Grazie e ciao.
PUMA81 è offline   Rispondi citando il messaggio o parte di esso
Old 11-11-2006, 12:41   #2
PGI-Bis
Senior Member
 
L'Avatar di PGI-Bis
 
Iscritto dal: Nov 2004
Città: Tra Verona e Mantova
Messaggi: 4553
Se usi almeno la versione 1.3 (siamo alla 1.4 è in dirittura d'arrivo la 1.5) puoi passare per:

setSubImage(java.awt.image.RenderedImage image, int width, int height, int srcX, int srcY, int dstX, int dstY)

di ImageComponent2D.

setSubimage è l'omologo dell'openg-elliano glTexSubimage2D
PGI-Bis è offline   Rispondi citando il messaggio o parte di esso
Old 13-11-2006, 10:35   #3
PUMA81
Senior Member
 
L'Avatar di PUMA81
 
Iscritto dal: Sep 2004
Messaggi: 404
Non sono molto pratico, potresti spiegarti meglio?
Questo è quello che io ho scritto:


Appearance appB = new Appearance();
TextureLoader tl = new TextureLoader("muro.jpg",null); //Applico una textura in maniera ripetuta
TextureAttributes myTex = new TextureAttributes();
Transform3D myT = new Transform3D();
myT.set(4.0);
myTex.setTextureTransform(myT);
Texture tex = tl.getTexture();
appB.setTextureAttributes(myTex);
appB.setTexture(tex);


//Crea l'aspetto del piano
Appearance appear=new Appearance();

//Carica la texture
TextureLoader loader=new TextureLoader("finestra.jpg",null);
ImageComponent2D image=loader.getImage();

//Crea la texture
Texture2D texture=new Texture2D(Texture.BASE_LEVEL,Texture.RGBA,image.getWidth(),image.getHeight());
texture.setImage(0,image);

//Crea un piano
QuadArray plane=new QuadArray(4,GeometryArray.COORDINATES|GeometryArray.TEXTURE_COORDINATE_2);
Point3f p=new Point3f(-1.0f,1.0f,0.0f);
plane.setCoordinate(0,p);
p.set(-1.0f,-1.0f,0.0f);
plane.setCoordinate(1,p);
p.set(1.0f,-1.0f,0.0f);
plane.setCoordinate(2,p);
p.set(1.0f,1.0f,0.0f);
plane.setCoordinate(3,p);

TexCoord2f q=new TexCoord2f(0.0f,1.0f);
q.set(0,1);
plane.setTextureCoordinate(0,0,q);
q.set(0,0);
plane.setTextureCoordinate(0,1,q);
q.set(1,0);
plane.setTextureCoordinate(0,2,q);
q.set(1,1);
plane.setTextureCoordinate(0,3,q);


//Imposta la texture nell'aspetto
appB.setTexture(texture);


Come faccio a "mettere" la finestra?
Grazie e ciao
PUMA81 è offline   Rispondi citando il messaggio o parte di esso
Old 13-11-2006, 13:51   #4
PGI-Bis
Senior Member
 
L'Avatar di PGI-Bis
 
Iscritto dal: Nov 2004
Città: Tra Verona e Mantova
Messaggi: 4553
Ho fatto zic anzichè zac col registro di windows e al momento sono un po' precario. Ti "indirizzo".

Allora, tex è la texture del muro e image è lo ImageComponent2D della finestra.

Quello che dovresti fare è copiare "image" nell'ImageComponent2D di "tex".

Codice:
ImageComponent2D texImage = (ImageComponent2D)tex.getImage(0);
RenderedImage windowImage = image.getRenderedImage();
textImage.setSubImage(
    windowImage,
    altezzaFinestra,
    larghezzaFinestra,
    0, 0, //"origine" della porzione di finestra da copiare
    posizioneXFinestraSullImmagineDelMuro,
    posizioneYFinestraSullImmagineDelMuro);
Teoricamente non fa una piega ma al momento non posso fare una prova preliminare.
PGI-Bis è offline   Rispondi citando il messaggio o parte di esso
Old 14-11-2006, 23:23   #5
PGI-Bis
Senior Member
 
L'Avatar di PGI-Bis
 
Iscritto dal: Nov 2004
Città: Tra Verona e Mantova
Messaggi: 4553
PUMA81, ti rispondo "al pubblico ludibrio".

Supponendo di avere due immagini, wall.png e window.png, appiccico window su wall.

Codice:
import java.awt.*;
import java.awt.event.*;
import java.awt.image.*;
import javax.swing.*;
import javax.media.j3d.*;
import javax.vecmath.*;
import javax.imageio.*;
import com.sun.j3d.utils.universe.*;

public class Main extends WindowAdapter implements Runnable {

	public static void main(String[] args) {
		SwingUtilities.invokeLater(new Main());
	}

	private Frame frame = new Frame("3D");
	private Canvas3D canvas;

	public void run() {
		int vertexFormat = 
			GeometryArray.COORDINATES |
			GeometryArray.NORMALS |
			GeometryArray.TEXTURE_COORDINATE_2;
		float[] coords = {
			0, 0, 0,
			1, 0, 0,
			1, 1, 0,
			0, 1, 0,
		};
		//Dritto negli occhi (z+)
		float[] normals =  {
			0, 0, 1,
			0, 0, 1,
			0, 0, 1,
			0, 0, 1,
		};
		//U = X + Z
		//V = Y
		float[] uv = {
			0, 0,
			1, 0,
			1, 1,
			0, 1,
		};
		QuadArray tile = new QuadArray(4, vertexFormat);
		tile.setCoordinates(0, coords);
		tile.setNormals(0, normals);
		tile.setTextureCoordinates(0, 0, uv);

		/* Il muro */
		BufferedImage wallImage = getImage("/wall.png"); //64*64
		/* La finestra */
		BufferedImage windowImage = getImage("/window.png"); //16*32

		/* ImageComponent2D del muro... */
		ImageComponent2D wallImageComponent = 
			new ImageComponent2D(ImageComponent.FORMAT_RGB, wallImage);
		
		/* Spiaccica la finestra sul muro... */
		wallImageComponent.setSubImage(
			windowImage,
			windowImage.getWidth(),
			windowImage.getHeight(),
			0,
			0,
			24,
			4);

		/* Crea la texture del muro (che ha la finestra appiccicata) */
		Texture2D wallTexture = new Texture2D(
			Texture2D.BASE_LEVEL,
			Texture2D.RGB,
			wallImage.getWidth(),
			wallImage.getHeight());

		/* Imposta la texture del muro al livello mip map 0 */
		wallTexture.setImages(new ImageComponent[] { wallImageComponent });

		/* Multitexturing... con una texture sola =) */
		TextureUnitState wallTextureUnit = new TextureUnitState();
		wallTextureUnit.setTexture(wallTexture);
		TextureUnitState[] stateArray = { wallTextureUnit };

		Appearance tileApp = new Appearance();
		tileApp.setTextureUnitState(stateArray);

		Shape3D tileShape = new Shape3D(tile, tileApp);

		Transform3D tileLocation = new Transform3D();
		tileLocation.setTranslation(new Vector3d(-0.5f, -0.5f, -5));
		TransformGroup tileGroup = new TransformGroup(tileLocation);
		tileGroup.addChild(tileShape);

		Background bg = new Background(new Color3f(0.5f, 0.5f, 0.5f));
		BoundingSphere bounds = new BoundingSphere(new Point3d(0, 0, 0), 1000);
		bg.setApplicationBounds(bounds);
		BranchGroup root = new BranchGroup();
		root.addChild(bg);
		root.addChild(tileGroup);
		root.compile();

		GraphicsConfiguration config = SimpleUniverse.getPreferredConfiguration();
		canvas = new Canvas3D(config);
		SimpleUniverse universe = new SimpleUniverse(canvas);
		universe.addBranchGraph(root);
		//universe.getViewingPlatform().setNominalViewingTransform();
		
		frame.addWindowListener(this);
		frame.setLayout(new GridLayout(1, 1));
		frame.add(canvas);
		frame.setSize(400, 400);
		frame.setVisible(true);
	}

	private BufferedImage getImage(String path) {
		try {
			return ImageIO.read(getClass().getResource(path));
		} catch(Exception ex) {
			throw new RuntimeException(ex);
		}
	}

	public void windowClosing(WindowEvent e) {
		System.exit(-1);
	}
	
}
Praticamente a te interessa solo la parte colorata, il resto è fuffa sperimentale.
PGI-Bis è offline   Rispondi citando il messaggio o parte di esso
Old 15-11-2006, 10:47   #6
PUMA81
Senior Member
 
L'Avatar di PUMA81
 
Iscritto dal: Sep 2004
Messaggi: 404
Grazie PGI-Bis, sei un grande!!!
E' quello che serviva a me
Ancora grazie e ciao.
PUMA81 è offline   Rispondi citando il messaggio o parte di esso
Old 24-11-2006, 16:50   #7
PUMA81
Senior Member
 
L'Avatar di PUMA81
 
Iscritto dal: Sep 2004
Messaggi: 404
Ciao, volevo chiederti ancora una cosa, però non riguarda direttamente le texture...
Allora:

BoundingSphere bounds=new BoundingSphere(new Point3d(),1500.0);
ImageComponent2D image = new TextureLoader("cielo.jpg",this).getScaledImage(larg,altez);
//Aggiunge uno sfondo
Background background=new Background(image);
background.setApplicationBounds(bounds);
//aggiungiamo l'istanza dello sfondo alla scena 3D
objRoot.addChild(background);

Avrei creato un BoundingSphere e messo una immagine di sfondo.
Adesso nella mia applicazione ho il terreno e subito attaccato il cielo.
Io vorrei fare una cosa un pochino più bellina e cioè mettere tra la terra e il cielo, ad esempio, delle montagne.
Ho provato a replicare ciò che ho scritto sopra passando diverse coordinate rispetto a quelle che passo nel getScaledImage() ma non va, cioè visualizzo solo la prima immagine caricata.
Volevo chiederti: è possibile fare quello che ti ho appena descritto??

Grazie e ciao.
PUMA81 è offline   Rispondi citando il messaggio o parte di esso
Old 24-11-2006, 17:00   #8
PGI-Bis
Senior Member
 
L'Avatar di PGI-Bis
 
Iscritto dal: Nov 2004
Città: Tra Verona e Mantova
Messaggi: 4553
Non puoi usare come sfondo un'immagine in cui ci siano già sia le montagne che il cielo?
PGI-Bis è offline   Rispondi citando il messaggio o parte di esso
Old 24-11-2006, 17:35   #9
PUMA81
Senior Member
 
L'Avatar di PUMA81
 
Iscritto dal: Sep 2004
Messaggi: 404
Quote:
Originariamente inviato da PGI-Bis
Non puoi usare come sfondo un'immagine in cui ci siano già sia le montagne che il cielo?
Dici che mi conviene??
ma se volessi fare come ti ho scritto è molto complicato??
Il fatto è che la nostra applicazione è sospesa nella sfera e al di sotto di essa si vede tutto cielo...
magari volevo provare a mettere un'immagine che si adattava bene all'applicazione...
cmq se dici che non ne vale la pena...
PUMA81 è offline   Rispondi citando il messaggio o parte di esso
Old 24-11-2006, 17:43   #10
PGI-Bis
Senior Member
 
L'Avatar di PGI-Bis
 
Iscritto dal: Nov 2004
Città: Tra Verona e Mantova
Messaggi: 4553
So che esiste la possibilità di fare "sfondi carini" usando delle geometrie come sfondi ma non conosco la teoria che ci sta dietro per cui direi al 101% una cialtroneria .
PGI-Bis è offline   Rispondi citando il messaggio o parte di esso
Old 24-11-2006, 18:28   #11
dupa
Senior Member
 
L'Avatar di dupa
 
Iscritto dal: Jan 2002
Città: Napoli
Messaggi: 1727
Quote:
Originariamente inviato da PGI-Bis
So che esiste la possibilità di fare "sfondi carini" usando delle geometrie come sfondi ma non conosco la teoria che ci sta dietro per cui direi al 101% una cialtroneria .
ma senti un po' ma di che ti occupi? ne sai di ogni linguaggio e di tutte le librerie possibili e immaginabili
__________________
Se buttassimo in un cestino tutto ciò che in Italia non funziona cosa rimarrebbe? Il cestino.
dupa è offline   Rispondi citando il messaggio o parte di esso
 Rispondi


Cineca inaugura Pitagora, il supercomputer Lenovo per la ricerca sulla fusione nucleare Cineca inaugura Pitagora, il supercomputer Lenov...
Mova Z60 Ultra Roller Complete: pulisce bene grazie anche all'IA Mova Z60 Ultra Roller Complete: pulisce bene gra...
Renault Twingo E-Tech Electric: che prezzo! Renault Twingo E-Tech Electric: che prezzo!
Il cuore digitale di F1 a Biggin Hill: l'infrastruttura Lenovo dietro la produzione media Il cuore digitale di F1 a Biggin Hill: l'infrast...
DJI Osmo Mobile 8: lo stabilizzatore per smartphone con tracking multiplo e asta telescopica DJI Osmo Mobile 8: lo stabilizzatore per smartph...
HONOR 500 Pro, scheda tecnica confermata...
GeForce NOW si prepara a vivere un mese ...
Exynos 2600: temperature più bass...
Apple si ispirerà a Nothing? Back...
Da Intel ad AMD, il grande salto di Kulk...
Velocità 12 volte superiore a que...
Una piccola Morte Nera è gi&agrav...
Sei frodi che minacciano gli utenti nel ...
BioShock 4: Take-Two rassicura sullo svi...
Tesla, Musk promette FSD 'quasi pronto' ...
BioWare conferma: il nuovo Mass Effect &...
5 robot aspirapolvere di fascia alta in ...
Xiaomi Redmi Note 14 5G a 179€ è ...
Veri affari con gli sconti de 15% Amazon...
Tutti gli iPhone 16 128GB a 699€, 16e a ...
Chromium
GPU-Z
OCCT
LibreOffice Portable
Opera One Portable
Opera One 106
CCleaner Portable
CCleaner Standard
Cpu-Z
Driver NVIDIA GeForce 546.65 WHQL
SmartFTP
Trillian
Google Chrome Portable
Google Chrome 120
VirtualBox
Tutti gli articoli Tutte le news Tutti i download

Strumenti

Regole
Non Puoi aprire nuove discussioni
Non Puoi rispondere ai messaggi
Non Puoi allegare file
Non Puoi modificare i tuoi messaggi

Il codice vB è On
Le Faccine sono On
Il codice [IMG] è On
Il codice HTML è Off
Vai al Forum


Tutti gli orari sono GMT +1. Ora sono le: 21:30.


Powered by vBulletin® Version 3.6.4
Copyright ©2000 - 2025, Jelsoft Enterprises Ltd.
Served by www3v