transformaciones - ¿Cómo establecer diferentes imágenes como caras/lados de un cubo 3D en Java 3D API?
rotacion 3d java (2)
He creado un pequeño fragmento de código que dibuja un cubo 3D en mi aplicación SWT que permite rotarlo.
Ahora, quiero cambiar cada cara / lado del cubo y dibujar una imagen diferente en él, pero no puedo encontrar cómo hacerlo (o al menos, de una manera fácil, si eso es posible).
Pude cambiar la textura completa del cubo a una imagen, pero cambia todas las caras y quiero establecer una imagen diferente para cada cara. es posible? ¿Algún ejemplo de código?
Gracias
Use la clase TextureCubeMap que es una sub clase de Textura. El mapeo de textura se puede usar para aplicar imágenes a las caras del cubo.
Puedes hacerlo especificando las caras del cubo usando las coordenadas xyz como positivas y negativas.
Consulte el enlace a continuación para obtener la documentación completa.
Bien, basándome en la respuesta anterior y en algunos otros foros alcanzo el siguiente código que permite establecer una textura diferente para cada cara de un cubo:
Básicamente, la línea que permite hacer eso es la siguiente:
((Shape3D) textureCube.getChild(POSITION)).setAppearance(APPEARANCE);
Teniendo en cuenta que:
TextureCube:
Box textureCube = new Box(0.4f, 0.4f, 0.4f, Box.GENERATE_TEXTURE_COORDS,
defaultAppearance);
(defaultAppearance es solo un objeto Apariencia básico: Apariencia defaultAppearance = new Apariencia ();)
La posición viene dada, como señaló vembutech, la clase TextureCubeMap y sus valores para cada cara: POSITIVE_X, POSITIVE_Y, POSITIVE_Z, NEGATIVE_X, NEGATIVE_Y, NEGATIVE_Z.
Y el objeto de apariencia es solo un objeto de apariencia. Creé objetos de apariencia con este método:
private Appearance getAppearance(String f) throws Exception {
Appearance app = new Appearance();
URL texImage = new java.net.URL("file:" + f);
Texture tex = new TextureLoader(texImage, this).getTexture();
app.setTexture(tex);
TextureAttributes texAttr = new TextureAttributes();
texAttr.setTextureMode(TextureAttributes.MODULATE);
app.setTextureAttributes(texAttr);
return app;
}
Este método crea una apariencia basada en un archivo de entrada (f).
Aclamaciones