Textur - Koordinaten

Status
Nicht offen für weitere Antworten.

nagash56

Aktives Mitglied
Ich habe folgendes Problem... ich brauche für eine Anwendung die Möglichkeit selbsterstellte (nicht wirklich komplexe)
Shape3D - Objekte zu mappen. Leider verstehe ich nicht wirklich wie das mit den Texturkoordinaten funktioniert. Ich hab im folgenden Programm einfach eine Shape3D-Fläche erzeugt auf der ich zB. das unten angegebene Image _komplett_ draufhaben möchte und nicht 8 kleine Bilder so wie es momentan ist... Kann mir da vielleicht jemand helfen?


http://img33.exs.cx/img33/7672/logo53.jpg


Code:
import javax.swing.JFrame;
import java.awt.*;
import com.sun.j3d.utils.universe.*;
import com.sun.j3d.utils.image.*;
import com.sun.j3d.utils.geometry.*;
import com.sun.j3d.utils.behaviors.mouse.*;
import javax.media.j3d.*;
import javax.vecmath.*;

public class Test3D extends JFrame
{
   private SimpleUniverse u = null;

 public Test3D()
 {
 	setSize (400, 400);
        setLocationRelativeTo (null);  
        setDefaultCloseOperation (EXIT_ON_CLOSE);  
	Container f = getContentPane();
        GraphicsConfiguration config = SimpleUniverse.getPreferredConfiguration();
	Canvas3D c = new Canvas3D(config);
	f.add(c);
	u = new SimpleUniverse(c);
	setViewPosition();
	u.addBranchGraph(createSceneGraph());
	setVisible(true);
 }

 
 void setViewPosition()
 {
   TransformGroup viewTG;
   Transform3D viewT3D = new Transform3D();
   viewTG = u.getViewingPlatform().getViewPlatformTransform();
   viewTG.getTransform(viewT3D);
   viewT3D.setTranslation(new Vector3f(0f,0f,8f));
   viewTG.setTransform(viewT3D);
  }
 
 public BranchGroup createSceneGraph()
 {
 	BranchGroup root = new BranchGroup();
 	TransformGroup imageTG = new TransformGroup();
 	
 	Appearance imageAppearance = new Appearance();
 	Shape3D complexObj;
 	
 	
 	imageAppearance.setTexture((new TextureLoader("logo.jpg",null)).
 			getTexture());
 	imageAppearance.setTexCoordGeneration(new TexCoordGeneration
 			(TexCoordGeneration.OBJECT_LINEAR,TexCoordGeneration.TEXTURE_COORDINATE_2));
 	imageAppearance.setTextureAttributes(new TextureAttributes
 			(TextureAttributes.REPLACE,new Transform3D(),new Color4f(),
 			TextureAttributes.NICEST));
 	
 	complexObj = createShape3D();
 	complexObj.setAppearance(imageAppearance);
 	imageTG.addChild(complexObj);
 	imageTG.setCapability(TransformGroup.ALLOW_TRANSFORM_READ);
 	imageTG.setCapability(TransformGroup.ALLOW_TRANSFORM_WRITE);
 	root.addChild(imageTG);
 	MouseRotate mr = new MouseRotate(imageTG);
 	mr.setSchedulingBounds(new BoundingSphere(new Point3d(),100000));
 	
 	
 	root.addChild(mr);
 	root.compile();
 	 	
	return root;
  }

 Shape3D createShape3D()
 {
    Shape3D S3D = new Shape3D();
    GeometryInfo GInfo;
    NormalGenerator NormGen = new NormalGenerator();
    Point3f[] CoordArr = new Point3f[4];
    int[] Vind = new int[4];
 
    CoordArr[0] = new Point3f( -2f, 0f, 0f);
    CoordArr[1] = new Point3f( 2f, 0f, 0f);
    CoordArr[2] = new Point3f( 2f, 2f, 0f);
    CoordArr[3] = new Point3f( -2f, 2f, 0f);
    
 
    Vind[0]=0; Vind[1]=1; Vind[2]= 2;
    Vind[3]=3; 
    
 
    GInfo = new GeometryInfo(GeometryInfo.QUAD_ARRAY);
    GInfo.setCoordinates(CoordArr);
    GInfo.setCoordinateIndices(Vind);
    NormGen.generateNormals(GInfo);
    S3D.addGeometry(GInfo.getGeometryArray());
    return S3D;
 }
 
 public static void main(String[] args)
 {
    new Test3D();
 }
}
 

Oxygenic

Bekanntes Mitglied
Texturkoordinaten sind eigentlich nichts weiter als ein Faktor in x- und y-Richtung (auf dem Objekt), dem Breite und Höhe des Bildes entsprechen. Sprich steht für einen Koordinatenwert z.B. die Zahl 5, so heißt das, dass die Textur in dieser Richtung 5 mal wiederholt wurde. 0,0 ist dementsprechend der Anfangspunkt eines Bildes (ob das nun die linke obere oder untere Ecke ist, hängt vom Y_UP-Flag ab).
 

nagash56

Aktives Mitglied
Ok danke das hat mir schon etwas weitergeholfen. Jetzt hab ich den Konstruktor abgeändert und die zwei Vektoren für PlaneS und PlaneT hinzugenommen die standardmäßig auf (1, 0, 0, 0), (0, 1, 0, 0) initialisiert sind. Dann hab ich von S den Wert geviertelt und den von T halbiert... Jetzt ist tatsächlich nur noch ein Bild auf dem Rechteck. Aber der Anfangspunkt des Bildes ist in der Mitte des Rechtecks sodass auf der einen Seite des Rechtecks das Bild "herausragt" und auf der anderen Seite "weiterläuft". Laut deinen Anmerkungen ist somit der 0,0 Anfangspunkt des Bildes eben nicht äquivalent mit der linken unteren Ecke des Rechtecks(Y_UP flag hab ich nix gesetzt). Ich hab versucht mit Hilfe einer Transformation bei den TextureAttributes eine Verschiebung um 2 in X - Richtung zu erreichen aber das scheint keine Auswirkung zu haben.
Vielleicht könntest du dir das nochmal anschauen?

Code:
TexCoordGeneration t = new TexCoordGeneration
        (TexCoordGeneration.OBJECT_LINEAR, TexCoordGeneration.TEXTURE_COORDINATE_2,
        		new Vector4f(0.25f, 0f, 0f, 0f), new Vector4f(0f, 0.5f, 0f, 0f));

imageAppearance.setTexCoordGeneration(t);
Transform3D t1 = new Transform3D();
t1.setTranslation(new Vector3f(-2f, 0f, 0f));
imageAppearance.setTextureAttributes(new TextureAttributes
         (TextureAttributes.REPLACE, t1, new Color4f(), TextureAttributes.NICEST));
 
Status
Nicht offen für weitere Antworten.
Ähnliche Java Themen
  Titel Forum Antworten Datum
J Quadrat Textur lädt als Dreieck Spiele- und Multimedia-Programmierung 3
L Textur färben Spiele- und Multimedia-Programmierung 1
T [LWJGL] Textur / File wieder freigeben Spiele- und Multimedia-Programmierung 4
S [LWJGL] Zweimal selbe Textur trotz unterschiedlicher IDs Spiele- und Multimedia-Programmierung 3
R LWJGL: Textur -> unsichtbare Stellen, wie erzeugen? Spiele- und Multimedia-Programmierung 4
F LWJGL: Textur ändern mit GL11.readPixels Spiele- und Multimedia-Programmierung 5
A [LWJGL] BMP Textur wird nicht richtig dargestellt Spiele- und Multimedia-Programmierung 8
J Java3D - Textur laden geht nicht Spiele- und Multimedia-Programmierung 9
Creylon [LWJGL] Textur wird falsch angezeigt Spiele- und Multimedia-Programmierung 12
H Java3D - Textur aufs innere einer Sphere mappen Spiele- und Multimedia-Programmierung 9
S OpenGL Textur unsauber Spiele- und Multimedia-Programmierung 2
R OpenGL Textur mit verschiedenen bit depths Spiele- und Multimedia-Programmierung 6
A OpenGL Textur und nicht Textur Spiele- und Multimedia-Programmierung 2
T JMonkey Textur nicht ganz angezeigt Spiele- und Multimedia-Programmierung 3
X JOGL - Textur auf Quad verzerrt Spiele- und Multimedia-Programmierung 2
M Wavefront Object Loader zeigt nur eine Textur an. Spiele- und Multimedia-Programmierung 7
P Java3D Textur verzerrt Spiele- und Multimedia-Programmierung 3
F Kleine GL Texturen auf grosse GL Textur kopieren? Spiele- und Multimedia-Programmierung 24
D Jogl:Textur auf GLUquadric wird vertikal spiegelverkehrt dargestellt Spiele- und Multimedia-Programmierung 2
F 2D Textur auf dem Display 2x so groß wie angeben? Spiele- und Multimedia-Programmierung 4
N Jogl Probleme mit dem Buffer beim laden einer Textur Spiele- und Multimedia-Programmierung 2
radiac Stringtext mit BufferedImage Textur. Spiele- und Multimedia-Programmierung 6
E JPCT textur problem Spiele- und Multimedia-Programmierung 8
D Java3D Textur Problem Spiele- und Multimedia-Programmierung 9
G Textur in Java3D Spiele- und Multimedia-Programmierung 3
S KameraBild als Textur? Spiele- und Multimedia-Programmierung 4
E Textur-Problem Spiele- und Multimedia-Programmierung 2
A "Textur-Achse" drehen. Spiele- und Multimedia-Programmierung 2
G Textur auf Box jede Sekunde erneuern Spiele- und Multimedia-Programmierung 2
S Zylinder mit Textur erzeugt out of memory :( Spiele- und Multimedia-Programmierung 3
G Textur laden auf ein eingelesenes 3D Objekt Spiele- und Multimedia-Programmierung 4
M Problem mit Textur Spiele- und Multimedia-Programmierung 4
J Java3D: Textur kacheln? Spiele- und Multimedia-Programmierung 2
D TextureLoader - Textur von Url laden Spiele- und Multimedia-Programmierung 2
S Bump Mapping (Relief-Textur) in Java3D Spiele- und Multimedia-Programmierung 3
B Wie kann ich bei g.rotate() auch die Koordinaten anpassen? Spiele- und Multimedia-Programmierung 3
shockyflocky Minecraft Koordinaten mit Intellij Spiele- und Multimedia-Programmierung 14
F Textbasiertes Rollenspiel mit Koordinaten Spiele- und Multimedia-Programmierung 6
A Spielfelder erstellen mit Jogl Java durch ein Koordinaten Array Spiele- und Multimedia-Programmierung 1
S LWJGL Kamera Koordinaten invertiert. Spiele- und Multimedia-Programmierung 2
Black_ixx Hintergrund & Koordinaten Probleme Spiele- und Multimedia-Programmierung 2
B j3d Koordinaten bestimmen Spiele- und Multimedia-Programmierung 16
jemandzehage JOGL 3D-Koordinaten des Klicks bestimmen Spiele- und Multimedia-Programmierung 2
Developer_X PolarKoordinaten zu Normal Koordinaten - Formel Spiele- und Multimedia-Programmierung 3
D Koordinaten eines 2D Sprites Spiele- und Multimedia-Programmierung 2
A Minesweeper: Koordinaten auslesen Spiele- und Multimedia-Programmierung 3
data89 Koordinaten in Koordinatensystem zeichnen Spiele- und Multimedia-Programmierung 11
R Koordinaten, Breite, Höhe nach drehen berechnen? Spiele- und Multimedia-Programmierung 3
F Box: Koordinaten, Ausdehnung, Platzierung Spiele- und Multimedia-Programmierung 3
S Koordinaten bestimmen und setzen Spiele- und Multimedia-Programmierung 2
S Texture Koordinaten Spiele- und Multimedia-Programmierung 2
V Koordinaten von Objekten? Spiele- und Multimedia-Programmierung 8

Ähnliche Java Themen


Oben