Probleme mit dem setTextureCoordinate

Status
Nicht offen für weitere Antworten.
W

walk_on_deadline

Gast
Hallo Leute,
mein Problem ist bestimmt ganz simple aber im Moment stehe ich da echt auf dem Schlauch, irgendwie platziere ist die TextureCoordinate's nicht richtig (oder zumindest glaube ich das hier das Problem liegt). Ich habe das ganze Konzept der TextureCoordinate noch nicht so ganz verstanden. Logisch wäre für mich die Coordinaten auf den Eckpunkte von meinem Array zu legen, aber bei fast alle Tutorials liegen sie woanders, auffällig nie im negativen Bereich.
Ich hab mein Programm mal bis auf die nötigsten Teile zusammengestrichen damit ihr euch ein Bild von meiner Lage machen könnt. eigentlich will ich nur eine simple Textur auf der Oberseite des Würfel anbringen, aber ich krieg es einfach nicht hin.

Gruß Ole
Code:
import java.applet.Applet;
import java.awt.BorderLayout;
import java.awt.Frame;
import java.awt.Panel;
import java.awt.image.BufferedImage;
import javax.media.j3d.Background;
import java.awt.event.*;
import com.sun.j3d.utils.applet.MainFrame;
import com.sun.j3d.utils.universe.*;
import java.awt.GraphicsConfiguration;
import java.util.Vector;

import com.sun.j3d.utils.geometry.Box;
import com.sun.j3d.utils.image.TextureLoader;
import javax.media.j3d.*;
import javax.vecmath.*;
import javax.media.j3d.Shape3D;
import javax.media.j3d.ImageComponent2D;
import javax.media.j3d.BoundingBox;
import javax.media.j3d.Transform3D;

public class Car extends Applet {
	//---- Attribute -----------------------
	private SimpleUniverse universe;
	private Canvas3D canvas3D;
	private static Frame frame;
	private BranchGroup szene;
	private String backgroundImage;
	private Background background = null;
	private ImageComponent2D[] imageComponents = null;

	public Car() {
		setLayout(new BorderLayout());
		GraphicsConfiguration config = SimpleUniverse
				.getPreferredConfiguration();
		canvas3D = new Canvas3D(config); // Die Erstellung des Canvas3D Objektes
		add("Center", canvas3D);

		TextureLoader myLoader = new TextureLoader(
				"/home/ole/studium/Java3dTut/src/bg.jpg", this);
		ImageComponent2D myImage = myLoader.getImage();

		Background myBack = new Background();
		myBack.setImage(myImage);
		BoundingSphere myBounds = new BoundingSphere(new Point3d(), 1000.0);
		myBack.setApplicationBounds(myBounds);

		BranchGroup szene = macheSzene(); // content branch
		szene.addChild(myBack);
		szene.compile();

		universe = new SimpleUniverse(canvas3D); // Erstellung des SimleUniverse
		universe.getViewingPlatform().setNominalViewingTransform();
		universe.addBranchGraph(szene); // Einfügen des content branch ins SimpleUniverse

	}

	/**
	 * Erstellt den Szenegraphen
	 * @return BranchGroup
	 */
	public BranchGroup macheSzene() {

		BranchGroup objRoot = new BranchGroup();
		BoundingBox bounds = new BoundingBox();

		//Car1
		Transform3D t3d_car1 = new Transform3D();
		TransformGroup tg_car1 = new TransformGroup(t3d_car1);
		tg_car1.setCapability(TransformGroup.ALLOW_TRANSFORM_WRITE);
		tg_car1.setCapability(TransformGroup.ALLOW_TRANSFORM_READ);
		tg_car1.setCapability(TransformGroup.ALLOW_CHILDREN_READ);
		Shape3D car1 = new Shape3D(makeCube(), car1Appearance());
		tg_car1.addChild(car1);
		objRoot.addChild(tg_car1);
		

		//Car2
//		Transform3D t3d_car2 = new Transform3D();
//		TransformGroup tg_car2 = new TransformGroup(t3d_car2);
//		tg_car2.setCapability(TransformGroup.ALLOW_TRANSFORM_WRITE);
//		tg_car2.setCapability(TransformGroup.ALLOW_TRANSFORM_READ);
//		tg_car2.setCapability(TransformGroup.ALLOW_CHILDREN_READ);
//		Shape3D car2 = new Shape3D(makeCube(), car2Appearance());
//		tg_car2.addChild(car2);
//		objRoot.addChild(tg_car2);
//		

		return objRoot;
	}

	public QuadArray makeCube() {
		QuadArray plane = new QuadArray(24, GeometryArray.COORDINATES
				| QuadArray.TEXTURE_COORDINATE_2); //
		// Punkte 
		Point3f pa = new Point3f(-.1f, .05f, -.001f);
		Point3f pb = new Point3f(-.1f, -.05f, -.001f);
		Point3f pc = new Point3f(.1f, -.05f, -.001f);
		Point3f pd = new Point3f(.1f, .05f, -.001f);
		Point3f pe = new Point3f(-.1f, .05f, .001f);
		Point3f pf = new Point3f(-.1f, -.05f, .001f);
		Point3f pg = new Point3f(.1f, -.05f, .001f);
		Point3f ph = new Point3f(.1f, .05f, .001f);

		// 1. Seite
		plane.setCoordinate(0, pa);
		plane.setCoordinate(1, pb);
		plane.setCoordinate(2, pc);
		plane.setCoordinate(3, pd);

		// 2. Seite
		plane.setCoordinate(4, pe);
		plane.setCoordinate(5, pf);
		plane.setCoordinate(6, pg);
		plane.setCoordinate(7, ph);

		// 3. Seite
		plane.setCoordinate(8, pe);
		plane.setCoordinate(9, pf);
		plane.setCoordinate(10, pb);
		plane.setCoordinate(11, pa);

		// 4. Seite
		plane.setCoordinate(12, pd);
		plane.setCoordinate(13, pc);
		plane.setCoordinate(14, pg);
		plane.setCoordinate(15, ph);

		// 5. Seite
		plane.setCoordinate(16, pe);
		plane.setCoordinate(17, pa);
		plane.setCoordinate(18, pd);
		plane.setCoordinate(19, ph);

		// 6. Seite
		plane.setCoordinate(20, pf);
		plane.setCoordinate(21, pb);
		plane.setCoordinate(22, pc);
		plane.setCoordinate(23, pg);

		TexCoord3f q = new TexCoord3f();
		//Seite 1
//		q.set(pe);
//		plane.setTextureCoordinate(0, 0, q);
//		q.set(pf);
//		plane.setTextureCoordinate(0, 1, q);
//		q.set(pg);
//		plane.setTextureCoordinate(0, 2, q);
//		q.set(ph);
//		plane.setTextureCoordinate(0, 3, q);
		plane.setTextureCoordinate(0,0,new TexCoord2f(0.0f,0.0f));
		plane.setTextureCoordinate(0,1,new TexCoord2f(0f,0.5f));
		plane.setTextureCoordinate(0,2,new TexCoord2f(1f,0.5f));
		plane.setTextureCoordinate(0,3,new TexCoord2f(1f,0.0f));


		//Seite 2
//		q.set(pe);
//		plane.setTextureCoordinate(0, 4, q);
//		q.set(pf);
//		plane.setTextureCoordinate(0, 5, q);
//		q.set(pg);
//		plane.setTextureCoordinate(0, 6, q);
//		q.set(ph);
//		plane.setTextureCoordinate(0, 7, q);
//
//		//Seite 3
//		q.set(pe);
//		plane.setTextureCoordinate(0, 8, q);
//		q.set(pf);
//		plane.setTextureCoordinate(0, 9, q);
//		q.set(pb);
//		plane.setTextureCoordinate(0, 10, q);
//		q.set(pa);
//		plane.setTextureCoordinate(0, 11, q);
//
//		//Seite 4
//		q.set(pd);
//		plane.setTextureCoordinate(0, 12, q);
//		q.set(pc);
//		plane.setTextureCoordinate(0, 13, q);
//		q.set(pg);
//		plane.setTextureCoordinate(0, 14, q);
//		q.set(ph);
//		plane.setTextureCoordinate(0, 15, q);
//
//		//Seite 5
//		q.set(pe);
//		plane.setTextureCoordinate(0, 16, q);
//		q.set(pa);
//		plane.setTextureCoordinate(0, 17, q);
//		q.set(pd);
//		plane.setTextureCoordinate(0, 18, q);
//		q.set(ph);
//		plane.setTextureCoordinate(0, 19, q);
//
//		//Seite 5
//		q.set(pf);
//		plane.setTextureCoordinate(0, 20, q);
//		q.set(pb);
//		plane.setTextureCoordinate(0, 21, q);
//		q.set(pc);
//		plane.setTextureCoordinate(0, 22, q);
//		q.set(pg);
//		plane.setTextureCoordinate(0, 23, q);

		// übergib den Würfel
		return plane;
	}

	/**
	 * gibt speicher frei
	 */
	public void destroy() {
		universe.removeAllLocales();
	}

	private Appearance car1Appearance() {
		TexCoordGeneration textCoorder = new TexCoordGeneration(
		        TexCoordGeneration.OBJECT_LINEAR,
		        //TexCoordGeneration.EYE_LINEAR,
		        TexCoordGeneration.TEXTURE_COORDINATE_2);
		    //Load the texture from the external image file
		    TextureLoader textLoad = new TextureLoader("/home/ole/studium/Java3dTut/src/car_red.png", this);
		    //Access the image from the loaded texture
		    ImageComponent2D textImage = textLoad.getImage();
		    //Create a two dimensional texture
		    Texture2D texture = new Texture2D(Texture2D.BASE_LEVEL, Texture.RGB,
		        textImage.getWidth(), textImage.getHeight());
		   
		    //Set the texture from the image loaded
		    texture.setImage(0, textImage);
		    texture.setEnable(true);
		    //Create the appearance that will use the texture
		    Appearance app = new Appearance();
		    app.setTexture(texture);
		    //Pass the coordinate generator to the appearance
		    app.setTexCoordGeneration(textCoorder);
		    //Define how the texture will be mapped onto the surface
		    //by creating the appropriate texture attributes
		    TextureAttributes textAttr = new TextureAttributes();
		    textAttr.setTextureMode(TextureAttributes.MODULATE);

		    app.setTextureAttributes(textAttr);
		    return app;

	    }

	

//	private Appearance car2Appearance() {
//
//		Appearance a = new Appearance();
//		TextureLoader loader = new TextureLoader(
//				"/home/ole/studium/Java3dTut/src/car_green.png", this);
//		Texture2D texture = (Texture2D) loader.getTexture();
//		a.setTexture(texture);
//		return a;
//
//	}

	public static void main(String[] args) {

		
		frame = new MainFrame(new Car(), 550, 550);
		frame.setTitle("Cartest");


	}

}
 

Marco13

Top Contributor
Du musst die Textur auf die Seite kleben, die sichtbar ist.

Als Beispiel: Bei allen z-Werten das Vorzeichen umdrehen
Code:
      Point3f pa = new Point3f(-.1f, .05f, .001f);
      Point3f pb = new Point3f(-.1f, -.05f, .001f);
      Point3f pc = new Point3f(.1f, -.05f, .001f);
      Point3f pd = new Point3f(.1f, .05f, .001f);
      Point3f pe = new Point3f(-.1f, .05f, -.001f);
      Point3f pf = new Point3f(-.1f, -.05f,- .001f);
      Point3f pg = new Point3f(.1f, -.05f, -.001f);
      Point3f ph = new Point3f(.1f, .05f, -.001f);
dann tun's die Texturkoordinaten
Code:
      plane.setTextureCoordinate(0,0,new TexCoord2f(0f,1f));
      plane.setTextureCoordinate(0,1,new TexCoord2f(0f,0f));
      plane.setTextureCoordinate(0,2,new TexCoord2f(1f,0f));
      plane.setTextureCoordinate(0,3,new TexCoord2f(1f,1f));
... oder eben andere indizes für die Koordinaten angeben, oder, oder ....
 

Marco13

Top Contributor
Vielleicht noch so als nachtrag: Die Texturkoorinaten beschreiben die Position des Bildes, die an der jeweilgen VertexPosition liegen soll - normiert auf den Bereich [0...1].

Mit den gegebenen Koordinaten wird die Würfelseite so beklebt:
Code:
0, 0 ---------- 1, 0
 |               |
 |               |
 |               |
 |               |
0, 1 ---------- 1, 1

Wenn man
Code:
0, 0 ---------- 2, 0
 |........       |
 |........       |
 |               |
 |               |
0, 2 ---------- 2, 2
verwenden würde, würde man nur im gepunkteten Bereich das Bild sehen (der Rest wird ggf. gekachelt).

Bei
Code:
1, 0 ---------- 0, 0
 |               |
 |               |
 |               |
 |               |
1, 1 ---------- 0, 1
wäre das Bild gespiegelt, und bei
Code:
0, 0 ---------- 0.5, 0
 |               |
 |               |
 |               |
 |               |
0, 1 ---------- 0.5, 1
würde man nur die Linke hälfte des Bildes sehen.
 
Status
Nicht offen für weitere Antworten.
Ähnliche Java Themen
  Titel Forum Antworten Datum
E Scaling Probleme Spiele- und Multimedia-Programmierung 6
J Probleme bei Pong Spiele- und Multimedia-Programmierung 9
D Java Bomberman Probleme java.lang.NullPointerException Spiele- und Multimedia-Programmierung 1
J YoutubeAPI Livestream probleme Spiele- und Multimedia-Programmierung 3
G [LibGDX] Button Klick Probleme Spiele- und Multimedia-Programmierung 1
T Probleme mit JButton Spiele- und Multimedia-Programmierung 5
T Probleme bei "Pixel-Fighting"-Spiel: Unausgewogene Mannschaften??? Spiele- und Multimedia-Programmierung 4
P Probleme mit VLCJ Spiele- und Multimedia-Programmierung 0
F Probleme bei der Soundwiedergabe Spiele- und Multimedia-Programmierung 0
S Probleme bei Breakout - Brick kollision Spiele- und Multimedia-Programmierung 2
S 2D-Render Probleme LWJGL 2 (Java) Spiele- und Multimedia-Programmierung 1
F BlueJ Ufospiel Probleme Spiele- und Multimedia-Programmierung 1
B Probleme mit AndEngine in Android Spiele- und Multimedia-Programmierung 1
M 2048, 3 kleine Probleme Spiele- und Multimedia-Programmierung 4
A Probleme mit Darstellung von Umgebungen mittels mehrdimensionaler Arrays Spiele- und Multimedia-Programmierung 8
J Java Game performance Probleme Spiele- und Multimedia-Programmierung 7
J Perfomance Probleme beim eigenen Editor Spiele- und Multimedia-Programmierung 1
K Probleme beim kompilieren von javakara Spiele- und Multimedia-Programmierung 10
Q LWJGL - Alpha-Probleme Spiele- und Multimedia-Programmierung 2
M Point & Click Thread Probleme Spiele- und Multimedia-Programmierung 20
K Probleme mit .jar Spiele- und Multimedia-Programmierung 12
L Probleme beim kompilieren von javakara Spiele- und Multimedia-Programmierung 3
D Probleme mit der Runnable jar Datei Spiele- und Multimedia-Programmierung 3
D Probleme mit objekt initializirung mit Mouselistener Spiele- und Multimedia-Programmierung 10
Black_ixx Hintergrund & Koordinaten Probleme Spiele- und Multimedia-Programmierung 2
B Probleme mit Texturen Spiele- und Multimedia-Programmierung 7
Maxim6394 Probleme bei Sidescroller Spiele- und Multimedia-Programmierung 5
R Probleme mit JPanel!KeyListener geht nicht Spiele- und Multimedia-Programmierung 6
Maxim6394 [Java3D] Probleme bei Kollision Spiele- und Multimedia-Programmierung 7
Maxim6394 [Java3D] Probleme mit KeyFrame Animationen Spiele- und Multimedia-Programmierung 9
T Probleme mit Skysphere in Opengl Spiele- und Multimedia-Programmierung 4
B Probleme mit redraw() Spiele- und Multimedia-Programmierung 3
Gossi Quaxlis 2D Tutorial....Probleme nach hinzufügen der Kollisionsabfrage Spiele- und Multimedia-Programmierung 16
Gossi Probleme beim Laden der Images aus dem "Tutorial für Java-Spiele" Spiele- und Multimedia-Programmierung 4
S Probleme mit Tutorial Spiele- und Multimedia-Programmierung 3
T Probleme mit AffineTransform Spiele- und Multimedia-Programmierung 13
W Probleme mit Mouselook Spiele- und Multimedia-Programmierung 2
B GameGrid Probleme mit mehrere Actors Spiele- und Multimedia-Programmierung 5
B GameGrid Probleme mit mehrere Actors Spiele- und Multimedia-Programmierung 2
M [Spiel] Kartenspiel Leben und Tod Tips und Probleme Spiele- und Multimedia-Programmierung 7
G [Java3D] Probleme bei Animation Spiele- und Multimedia-Programmierung 4
S Probleme mit JMenu in einem JFrame mit BufferStrategy Spiele- und Multimedia-Programmierung 2
Steev Probleme mit Kameraausrichtung bei ISO-Map Spiele- und Multimedia-Programmierung 3
R MediaPlayer macht Probleme Spiele- und Multimedia-Programmierung 2
N Jogl Probleme mit dem Buffer beim laden einer Textur Spiele- und Multimedia-Programmierung 2
prakdi Probleme mit Quaxlis tutorial Spiele- und Multimedia-Programmierung 5
D Java Pong Probleme Spiele- und Multimedia-Programmierung 7
T Java Sound Probleme Spiele- und Multimedia-Programmierung 8
P probleme mit key event Spiele- und Multimedia-Programmierung 11
T Bekanntes Heli Spiel -> Aber Probleme damit Spiele- und Multimedia-Programmierung 30
S Probleme mit Thread beim Streaming Spiele- und Multimedia-Programmierung 1
O Ampel - Probleme mit der Farbgebung Spiele- und Multimedia-Programmierung 16
F Probleme bei Bewegung Spiele- und Multimedia-Programmierung 7
P Probleme mit Vista und JOGL Spiele- und Multimedia-Programmierung 2
P Probleme mit Wolkenbewegung Spiele- und Multimedia-Programmierung 5
D Probleme beim Download von GIF-Bildern Spiele- und Multimedia-Programmierung 4
S Probleme mit dem Licht und dem KeyListener Spiele- und Multimedia-Programmierung 2
L Probleme Bei Pong Programmierung Spiele- und Multimedia-Programmierung 2
D Probleme bei ATI Karten bekannt? Spiele- und Multimedia-Programmierung 4
H Probleme bei Rotation Spiele- und Multimedia-Programmierung 9
X Probleme. Spiele- und Multimedia-Programmierung 2
E Probleme mit Kollisionserkennung ! Spiele- und Multimedia-Programmierung 2
F Probleme mit selbsterstelltem transparenten PNG Spiele- und Multimedia-Programmierung 5
S probleme mit material Spiele- und Multimedia-Programmierung 2
W Probleme beim entfernen von Childs im HauptSceneGraph Spiele- und Multimedia-Programmierung 8
N Pong - noch 2 kleinere Probleme Spiele- und Multimedia-Programmierung 16
M Probleme mit WaveFront-Object - Datei Spiele- und Multimedia-Programmierung 7
B Probleme beim zeichnen Spiele- und Multimedia-Programmierung 15
D Gomoku --- Probleme bei Instanzierung Spiele- und Multimedia-Programmierung 2
G Probleme beim installieren java 3d linux Spiele- und Multimedia-Programmierung 4
G Sound Probleme Spiele- und Multimedia-Programmierung 2
S Probleme mit Canvas! Spiele- und Multimedia-Programmierung 2
S Jump'n'Run: Probleme mit Kollision Spiele- und Multimedia-Programmierung 13
C Probleme mit Java3D (sun.awt.DrawingSurface) in Java 5 Spiele- und Multimedia-Programmierung 10
R Probleme mit Sound in Applikation. HILFE Spiele- und Multimedia-Programmierung 5
N Probleme mit View Spiele- und Multimedia-Programmierung 3

Ähnliche Java Themen

Neue Themen


Oben