28
Stefan Dubois Stefan Dubois WS 02/03 WS 02/03 Texturen Texturen in in Java 3D Java 3D

Stefan Dubois WS 02/03 Texturen in Java 3D. Übersicht Was sind Texturen? Klassenhierarchie fünf-Schritt-Plan Optionen für Texturen (Auswahl) TextureAttributes

Embed Size (px)

Citation preview

Page 1: Stefan Dubois WS 02/03 Texturen in Java 3D. Übersicht Was sind Texturen? Klassenhierarchie fünf-Schritt-Plan Optionen für Texturen (Auswahl) TextureAttributes

Stefan DuboisStefan DuboisWS 02/03WS 02/03

TexturenTexturen

inin

Java 3DJava 3D

Page 2: Stefan Dubois WS 02/03 Texturen in Java 3D. Übersicht Was sind Texturen? Klassenhierarchie fünf-Schritt-Plan Optionen für Texturen (Auswahl) TextureAttributes

ÜbersichtÜbersicht

• Was sind Texturen?

• Klassenhierarchie

• fünf-Schritt-Plan

• Optionen für Texturen (Auswahl)

• TextureAttributes (Auswahl)

• MIP-mapping

• Quellen

Stefan DuboisStefan DuboisWS 02/03WS 02/03

Page 3: Stefan Dubois WS 02/03 Texturen in Java 3D. Übersicht Was sind Texturen? Klassenhierarchie fünf-Schritt-Plan Optionen für Texturen (Auswahl) TextureAttributes

Was sind Texturen?Was sind Texturen?

Texturen sind Bilder, die dazu dienen, komplexe Oberflächen von geometrischen Objekten nachzubilden, ohne die Struktur selbst nachbilden zu müssen.

In Java 3D erfolgt die Bindung der Textur an das geometrische Objekt durch das Appearance-Objekt (wie auch z.B. Material).

Vorteile:

• flexibel, da wiederverwendbar

• zeitsparend

• ...

Stefan DuboisStefan DuboisWS 02/03WS 02/03

Page 4: Stefan Dubois WS 02/03 Texturen in Java 3D. Übersicht Was sind Texturen? Klassenhierarchie fünf-Schritt-Plan Optionen für Texturen (Auswahl) TextureAttributes

KlassenhierarchieKlassenhierarchie Stefan DuboisStefan DuboisWS 02/03WS 02/03

class javax.media.j3d.SceneGraphObjectclass javax.media.j3d.SceneGraphObject

class javax.media.j3d.NodeComponentclass javax.media.j3d.NodeComponent

class javax.media.j3d.TextureAttributesclass javax.media.j3d.TextureAttributes

class javax.media.j3d.Texture3Dclass javax.media.j3d.Texture3D

class javax.media.j3d.Texture2Dclass javax.media.j3d.Texture2D

class javax.media.j3d.Texture (abstract)class javax.media.j3d.Texture (abstract)

class javax.media.j3d.TexCoordGenerationclass javax.media.j3d.TexCoordGeneration

Page 5: Stefan Dubois WS 02/03 Texturen in Java 3D. Übersicht Was sind Texturen? Klassenhierarchie fünf-Schritt-Plan Optionen für Texturen (Auswahl) TextureAttributes

In fünf Schritten zum ErfolgIn fünf Schritten zum Erfolg

• Erstellen eines Bildes, welches als Textur genutzt werden soll

• Laden der Textur in ein entsprechendes Objekt

• Texturkoordinaten festlegen

• weitere Texturattribute bestimmen (optional)

• geometrisches Objekt mit der gewünschten Appearence-Klasse

erzeugen

Stefan DuboisStefan DuboisWS 02/03WS 02/03

Page 6: Stefan Dubois WS 02/03 Texturen in Java 3D. Übersicht Was sind Texturen? Klassenhierarchie fünf-Schritt-Plan Optionen für Texturen (Auswahl) TextureAttributes

Schritt 1Schritt 1

• Bild mit herkömmlichem Grafikprogramm erstellen

• Abmessungen beachten:

Format muss als 2n x 2m darstellbar sein, d.h. jede Dimension muss eine Potenz von 2 sein

Beispiele: 64 x 8, 128 x 4, 32 x 32, etc.

Stefan DuboisStefan DuboisWS 02/03WS 02/03

Page 7: Stefan Dubois WS 02/03 Texturen in Java 3D. Übersicht Was sind Texturen? Klassenhierarchie fünf-Schritt-Plan Optionen für Texturen (Auswahl) TextureAttributes

Schritt 2.1Schritt 2.1

Laden der Grafikdatei mit dem TextureLoader

Konstruktor:

public TextureLoader(java.awt.Image image, java.awt.Component observer)

wobei

image = URL des zu ladenden Bildes

observer = zugegöriger Image-Obserer (überwacht Ladevorgänge von Bildern)

TextureLoader loader =

new TextureLoader("earth.jpg", this);

Stefan DuboisStefan DuboisWS 02/03WS 02/03

Page 8: Stefan Dubois WS 02/03 Texturen in Java 3D. Übersicht Was sind Texturen? Klassenhierarchie fünf-Schritt-Plan Optionen für Texturen (Auswahl) TextureAttributes

Schritt 2.1Schritt 2.1

Unterstützte Grafikformate:

• JPG

• GIF

• PNG

GIF und PNG werden mit Transparenz unterstützt

weitere Formate (z.B. BMP und TIFF) durch Verwendung des JAI (Java Advanced Imaging) statt des AWT

Stefan DuboisStefan DuboisWS 02/03WS 02/03

Page 9: Stefan Dubois WS 02/03 Texturen in Java 3D. Übersicht Was sind Texturen? Klassenhierarchie fünf-Schritt-Plan Optionen für Texturen (Auswahl) TextureAttributes

Schritt 2.2Schritt 2.2

Bild wird aus TextureLoader mit der Methode getImage() in ein ImageComponent extrahiert

ImageComponent2D image = loader.getImage();

bzw.

ImageComponent3D image = loader.getImage();

Stefan DuboisStefan DuboisWS 02/03WS 02/03

Page 10: Stefan Dubois WS 02/03 Texturen in Java 3D. Übersicht Was sind Texturen? Klassenhierarchie fünf-Schritt-Plan Optionen für Texturen (Auswahl) TextureAttributes

Schritt 2.3Schritt 2.3

Textur-Objekt wird erzeugt

public Texture2D(int mipMapMode,

int format,

int width,

int height)

bzw.

public Texture3D(int mipMapMode,

int format,

int width,

int height,

int depth)

Stefan DuboisStefan DuboisWS 02/03WS 02/03

Page 11: Stefan Dubois WS 02/03 Texturen in Java 3D. Übersicht Was sind Texturen? Klassenhierarchie fünf-Schritt-Plan Optionen für Texturen (Auswahl) TextureAttributes

Schritt 2.3Schritt 2.3

Parameter für Texture2D

mipMapMode = bestimmt Anzahl der TexturebenenBASE_LEVEL für eine Texturebene,MULTI_LEVEL_MIPMAP für mehrere.

format = Art des Texturformates INTENSITY, LUMINANCE, ALPHA,

LUMINANCE_ALPHA, RGB, RGBA.

width = horizontale Ausdehnung des Bildes (2n) height = vertikale Ausdehnung des Bildes (2m)

bei Texture3D zusätzlich depth als dritte Dimension

Stefan DuboisStefan DuboisWS 02/03WS 02/03

Page 12: Stefan Dubois WS 02/03 Texturen in Java 3D. Übersicht Was sind Texturen? Klassenhierarchie fünf-Schritt-Plan Optionen für Texturen (Auswahl) TextureAttributes

Schritt 2.3Schritt 2.3

Beispiel:

Texture2D texture = new Texture2D(Texture.BASE_LEVEL,

Texture.RGBA,image.getWidth(),image.getHeight());

bzw.

Texture3D texture = newTexture3D(Texture.BASE_LEVEL,

Texture.RGBA,image.getWidth(),image.getHeight(),image.getDepth());

Stefan DuboisStefan DuboisWS 02/03WS 02/03

Page 13: Stefan Dubois WS 02/03 Texturen in Java 3D. Übersicht Was sind Texturen? Klassenhierarchie fünf-Schritt-Plan Optionen für Texturen (Auswahl) TextureAttributes

Schritt 2.3Schritt 2.3

Bild in Textur einfügen mit der Methode setImage()

public void setImage(int level, image)

level = Ebene der Textur (0 bei BASE_LEVEL)

image = die gewünschte Instanz der vorher erzeugten ImageComponent

texture.setImage(0, image);

Stefan DuboisStefan DuboisWS 02/03WS 02/03

Page 14: Stefan Dubois WS 02/03 Texturen in Java 3D. Übersicht Was sind Texturen? Klassenhierarchie fünf-Schritt-Plan Optionen für Texturen (Auswahl) TextureAttributes

Schritt 2.3Schritt 2.3

Alle Codefragmente im von Schritt 2 im Überblick

TextureLoader loader =

new TextureLoader("earth.jpg", this);

ImageComponent2D image = loader.getImage();

Texture2D texture = new Texture2D(Texture.BASE_LEVEL,

Texture.RGBA,image.getWidth(),image.getHeight());

texture.setImage(0, image);

Stefan DuboisStefan DuboisWS 02/03WS 02/03

Page 15: Stefan Dubois WS 02/03 Texturen in Java 3D. Übersicht Was sind Texturen? Klassenhierarchie fünf-Schritt-Plan Optionen für Texturen (Auswahl) TextureAttributes

Schritt 3Schritt 3 Stefan DuboisStefan DuboisWS 02/03WS 02/03

Neben der physikalischen Größe (Grafikabmessungen in Pixeln) besitzen Texturen auch eine logische Größe (1 1, vergleichbar mit Prozentwerten):

v0 bis v3 sind die Eckpunkte eines Quadrates,tc jeweils die Texturkoordinaten

Page 16: Stefan Dubois WS 02/03 Texturen in Java 3D. Übersicht Was sind Texturen? Klassenhierarchie fünf-Schritt-Plan Optionen für Texturen (Auswahl) TextureAttributes

Schritt 3Schritt 3

Beispiel

Stefan DuboisStefan DuboisWS 02/03WS 02/03

Page 17: Stefan Dubois WS 02/03 Texturen in Java 3D. Übersicht Was sind Texturen? Klassenhierarchie fünf-Schritt-Plan Optionen für Texturen (Auswahl) TextureAttributes

Schritt 3Schritt 3

Beispiel

Stefan DuboisStefan DuboisWS 02/03WS 02/03

Page 18: Stefan Dubois WS 02/03 Texturen in Java 3D. Übersicht Was sind Texturen? Klassenhierarchie fünf-Schritt-Plan Optionen für Texturen (Auswahl) TextureAttributes

Schritt 3Schritt 3 Stefan DuboisStefan DuboisWS 02/03WS 02/03

Page 19: Stefan Dubois WS 02/03 Texturen in Java 3D. Übersicht Was sind Texturen? Klassenhierarchie fünf-Schritt-Plan Optionen für Texturen (Auswahl) TextureAttributes

Schritt 3Schritt 3

Die verwendete Methode im Einzelnen

public void setTextureCoordinate(int index, float[] texCoord)

index = Nummer des Punktes des geometrischen Objektes

texCoord = Koordinaten der Textur

Stefan DuboisStefan DuboisWS 02/03WS 02/03

Page 20: Stefan Dubois WS 02/03 Texturen in Java 3D. Übersicht Was sind Texturen? Klassenhierarchie fünf-Schritt-Plan Optionen für Texturen (Auswahl) TextureAttributes

Schritt 3Schritt 3

Texturverhalten

1. Objekt bewegt sich unter der Textur (Diaprojektor)

2. Textur bewegt sich mit Objekt

public TexCoordGeneration(int genMode, int format)

genMode = EYE _LINEAR (1) bzw. OBJECT _LINEAR (2) SPHERE_MAP (Spherical Mapping)

format = TEXTURE_COORDINATE_2 (2D) bzw. TEXTURE_COORDINATE_3 (3D)

Stefan DuboisStefan DuboisWS 02/03WS 02/03

Page 21: Stefan Dubois WS 02/03 Texturen in Java 3D. Übersicht Was sind Texturen? Klassenhierarchie fünf-Schritt-Plan Optionen für Texturen (Auswahl) TextureAttributes

Schritt 4Schritt 4

ist optional

Texturattribute werden später behandelt

Stefan DuboisStefan DuboisWS 02/03WS 02/03

Page 22: Stefan Dubois WS 02/03 Texturen in Java 3D. Übersicht Was sind Texturen? Klassenhierarchie fünf-Schritt-Plan Optionen für Texturen (Auswahl) TextureAttributes

Schritt 5Schritt 5

Mit der Methode setTexture() der Appearance-Klasse wird die Textur dem Apearance-Objekt zugefügt.

appear.setTexture(texture);

Zum Abschluss wird das gesamte geometrische Objekt erzeugt und der BranchGroup zugefügt.

objRoot.addChild(new Sphere(1.0f,Primitive.GENERATE_TEXTURE_COORDS,appear));

Primitive.GENERATE_TEXTURE_COORDS sorgt für eine automatischeTexturkoordinatenzuordnung

Stefan DuboisStefan DuboisWS 02/03WS 02/03

Page 23: Stefan Dubois WS 02/03 Texturen in Java 3D. Übersicht Was sind Texturen? Klassenhierarchie fünf-Schritt-Plan Optionen für Texturen (Auswahl) TextureAttributes

Optionen für Texturen (Auswahl)Optionen für Texturen (Auswahl)

Boundary Mode

bestimmt das Verhalten der Textur, falls Textur kleiner als zu texturierende Fläche

Texture.WRAP = Textur kacheln

Texture.CLAMP = Textur nur einmalig verwenden, die übrigeFläche wird mit den Randpixeln der Textur gefüllt

setBoundaryModeS(int boundaryModeS)

setBoundaryModeT(int boundaryModeT)

setBoundaryModeR(int boundaryModeR)

Stefan DuboisStefan DuboisWS 02/03WS 02/03

Page 24: Stefan Dubois WS 02/03 Texturen in Java 3D. Übersicht Was sind Texturen? Klassenhierarchie fünf-Schritt-Plan Optionen für Texturen (Auswahl) TextureAttributes

TextureAttributes (Auswahl)TextureAttributes (Auswahl)

TextureMode (Methode der Texture-Klasse)

setTextureMode(int textureMode)

textureMode: BLEND

DECAL

MODULATE

REPLACE

beeinflusst Wechselwirkungen zwischen Textur und Objektfarbe

Stefan DuboisStefan DuboisWS 02/03WS 02/03

Page 25: Stefan Dubois WS 02/03 Texturen in Java 3D. Übersicht Was sind Texturen? Klassenhierarchie fünf-Schritt-Plan Optionen für Texturen (Auswahl) TextureAttributes

TextureAttributes (Auswahl)TextureAttributes (Auswahl)

Weitere Attribute

• Texture Blend Color

• Perspective Correction Mode

• Texture Map Transform

Stefan DuboisStefan DuboisWS 02/03WS 02/03

Page 26: Stefan Dubois WS 02/03 Texturen in Java 3D. Übersicht Was sind Texturen? Klassenhierarchie fünf-Schritt-Plan Optionen für Texturen (Auswahl) TextureAttributes

MIP-mappingMIP-mapping

mehrere Texturen auf ein Objekt legen

wird verwendet, um Texturen unterschiedlicher Größe entfernungsabhängig zu verwenden

Größenstufen durch Halbierung jeder Seite (bis min. 1 x 1)

Beispiel: 32 x 8 -> 16 x 4 -> 8 x 2 -> 4 x 1 -> 2 x 1 -> 1 x 1

Stefan DuboisStefan DuboisWS 02/03WS 02/03

Page 27: Stefan Dubois WS 02/03 Texturen in Java 3D. Übersicht Was sind Texturen? Klassenhierarchie fünf-Schritt-Plan Optionen für Texturen (Auswahl) TextureAttributes

MIP-mappingMIP-mapping

Besonderheiten:

Texture2D texture = new

Texture2D(Texture.MULTI_LEVEL_MIPMAP,

Texture.RGB, imageWidth, imageHeight);

texture.setImage(imageLevel, image);

imageLevel als Variable zum Einsatz in einer Schleife, in der mittels

image = loader.getScaledImage(imageWidth,

imageHeight);

neu skalierte Bilder entstehen

Stefan DuboisStefan DuboisWS 02/03WS 02/03

Page 28: Stefan Dubois WS 02/03 Texturen in Java 3D. Übersicht Was sind Texturen? Klassenhierarchie fünf-Schritt-Plan Optionen für Texturen (Auswahl) TextureAttributes

QuellenQuellen

• Sun J3D-Tutorial

• Sun JDK-API Dokumentation

• „Texturen in Java 3D“, Florian Angulanza, Manfred Mayr,

Christian Osterrieder, 2. Juli 2002http://www.cosy.sbg.ac.at/~held/teaching/graphics_II/ps_pdf_ppt/angulanza_et_al.pdf

Weitere Programme• ExTexture.java (Henry A. Sowizral, David R. Nadeau)

http://www.sdsc.edu/~nadeau/Courses/Siggraph99

• Jicasso von Colin Mummery http://www.cellspark.com/jicasso.html

Stefan DuboisStefan DuboisWS 02/03WS 02/03