Swing Ansichtstranformationsmatrix erstellen

DanteCloudFG

Mitglied
Hallo Leute,
ich bin im Moment dran ein xyz- Koordinatesystem zu zeichnen, in dem 3 Dreiecke entlang der Achsen aufgespannt sind.
Ich kann entlang der X, Y und Z Achsen ohne Problem rotieren.
Nur will ich jetzt noch eine Ansichtstranformation einbauen, die es mir erlaubt, die Szene von anderen Betrachtungswinkeln anzuschauen.
Im moment sieht man nur meine x und y Achsen.
Hier mal mein Zeichenflaechen Code. Falls jemand den vollständigen Code will, kann er mir ja seine Email Adresse geben und ich schick demjenigen alles zu :)
Danke im Vorraus auf eure Antworten ;)

Java:
package Koordinatensystem3D;

import java.awt.BasicStroke;
import java.awt.Color;
import java.awt.Graphics;
import java.awt.Graphics2D;
import java.awt.event.MouseEvent;
import java.awt.event.MouseListener;
import java.awt.event.MouseMotionListener;
import java.util.ArrayList;

import javax.swing.JPanel;

import LED.Matrix;

public class Zeichenflaeche3D extends JPanel implements MouseListener{
	
	Fenster3D parent;
	
	double[][] ansichtstransformation = {{0.71,0.71,0,0},{-0.5,0.5,0.71,0},{0.5,0.5,0.71,0},{0,0,0,1}};
	double[][] viewport = {{1,0,0,0},{0,1,0,0},{0,0,1,0},{0,0,0,1}};
	double[][] faktor = {{1,0,0,0},{0,1,0,0},{0,0,1,0},{0,0,0,1}};
	double[][] alpha = {{1,0,0,0},{0,1,0,0},{0,0,1,0},{0,0,0,1}};
	double[][] beta = {{1,0,0,0},{0,1,0,0},{0,0,1,0},{0,0,0,1}};
	double[][] gamma = {{1,0,0,0},{0,1,0,0},{0,0,1,0},{0,0,0,1}};
	double[][] mxzx = {{1,0,0,0},{0,1,0,0},{0,0,1,0},{0,0,0,1}};
	
	double[][] megaMatrix = {{1,0,0,0},{0,1,0,0},{0,0,1,0},{0,0,0,1}};
	
	double triangleSize = 100;
	
	ArrayList<double[][]> arr = new ArrayList<>();
	
	public Zeichenflaeche3D(Fenster3D parent){
		
		this.parent = parent;
		
		this.addMouseListener(this);
		
		initArrayList();
	}
	
	public void initArrayList(){
		if(arr != null){
			for(int i = 0; i < arr.size(); i++){
				arr.remove(i);
			}
		}
		arr.add(ansichtstransformation);
		
		arr.add(viewport);
		
		arr.add(faktor);
		
		arr.add(alpha);
		
		arr.add(beta);
		
		arr.add(gamma);
		
		arr.add(mxzx);
		
	}
	
	//Paint Methods-----------------------------------//
	@Override
	public void paintComponent(Graphics g){
		super.paintComponent(g);
		setViewport();
		paintKoordinatensystem((Graphics2D) g);
		drawTriangles((Graphics2D) g);
	}
	
	public void paintKoordinatensystem(Graphics2D g2d){
		//PixelCoordinates
		double[] CoordXEnd = {-this.getWidth()/2,0,0,1};
		double[] CoordXBegin = {this.getWidth()/2,0,0,1};
		
		double[] CoordYEnd = {0,-this.getHeight()/2,0,1};
		double[] CoordYBegin = {0,this.getHeight()/2,0,1};
		
		double[] CoordZEnd = {0,0,0,1};
		double[] CoordZBegin = {0,0,0,1};
		
		//Calculate new Origin (Viewport Matrix) e.g by scaling Window Size
		double[] newCoordXEnd =   Matrix.matMult(viewport, CoordXEnd);
		double[] newCoordXBegin = Matrix.matMult(viewport, CoordXBegin);
		
		double[] newCoordYEnd = Matrix.matMult(viewport, CoordYEnd);
		double[] newCoordYBegin =  Matrix.matMult(viewport, CoordYBegin);
		         
		double[] newCoordZEnd = Matrix.matMult(viewport, CoordZEnd);
		double[] newCoordZBegin = Matrix.matMult(viewport, CoordZBegin);
		
		//Drawing Coordinate System with new Origin
		g2d.setStroke(new BasicStroke(0.4f));
		
		g2d.setColor(Color.BLACK);
		g2d.drawLine((int)newCoordXEnd[0],(int)newCoordXEnd[1], (int)newCoordXBegin[0], (int)newCoordXBegin[1]);
		g2d.setColor(Color.RED);
		g2d.drawLine((int)newCoordYEnd[0],(int)newCoordYEnd[1], (int)newCoordYBegin[0], (int)newCoordYBegin[1]);
		g2d.setColor(Color.BLUE);
		g2d.drawLine((int)newCoordZEnd[0],(int)newCoordZEnd[1], (int)newCoordZBegin[0], (int)newCoordZBegin[1]);
	}
	
	public void drawTriangles(Graphics2D g2d){
		
		double[][] vertices = {{triangleSize,0,0,0},
							   {0,triangleSize,0,0},
							   {0,0,triangleSize,0},
							   {1,1,1,1}};
		
		vertices = Matrix.matMult(alpha, vertices);
		vertices = Matrix.matMult(beta, vertices);
		vertices = Matrix.matMult(gamma, vertices);

		double[] vertice1 = {vertices[0][0], vertices[1][0], vertices[2][0], vertices[3][0]};
		double[] vertice2 = {vertices[0][1], vertices[1][1], vertices[2][1], vertices[3][1]};
		double[] vertice3 = {vertices[0][2], vertices[1][2], vertices[2][2], vertices[3][2]};
		double[] vertice4 = {vertices[0][3], vertices[1][3], vertices[2][3], vertices[3][3]};
		
		double[] triangle1Vertex1 = vertice1;
		double[] triangle1Vertex2 = vertice2;
		double[] triangle1Vertex3 = vertice4;
		                        
		double[] triangle2Vertex1 = vertice1;
		double[] triangle2Vertex2 = vertice3;
		double[] triangle2Vertex3 = vertice4;
		                          
		double[] triangle3Vertex1 = vertice3;
		double[] triangle3Vertex2 = vertice2;
		double[] triangle3Vertex3 = vertice4;
				
		//Calculate new Origin (Viewport Matrix) e.g by scaling Window Size
		double[] newTriangle1Vertex1 = Matrix.matMult(viewport, triangle1Vertex1);
		double[] newTriangle1Vertex2 = Matrix.matMult(viewport, triangle1Vertex2);
		double[] newTriangle1Vertex3 = Matrix.matMult(viewport, triangle1Vertex3);
		                                                                        
		double[] newTriangle2Vertex1 = Matrix.matMult(viewport, triangle2Vertex1);
		double[] newTriangle2Vertex2 = Matrix.matMult(viewport, triangle2Vertex2);  
		double[] newTriangle2Vertex3 = Matrix.matMult(viewport, triangle2Vertex3); 
		                                                                        
		double[] newTriangle3Vertex1 = Matrix.matMult(viewport, triangle3Vertex1);
		double[] newTriangle3Vertex2 = Matrix.matMult(viewport, triangle3Vertex2);  
		double[] newTriangle3Vertex3 = Matrix.matMult(viewport, triangle3Vertex3);
		
		g2d.setStroke(new BasicStroke(3.0f));
		g2d.setColor(Color.BLUE);
		drawTriangle(g2d, newTriangle1Vertex1, newTriangle1Vertex2, newTriangle1Vertex3);
		g2d.setColor(Color.RED);
		drawTriangle(g2d, newTriangle2Vertex1, newTriangle2Vertex2, newTriangle2Vertex3);
		g2d.setColor(Color.GREEN);
		drawTriangle(g2d, newTriangle3Vertex1, newTriangle3Vertex2, newTriangle3Vertex3);
	}
	
	public void drawTriangle(Graphics2D g2d, double[] vertex1, double[] vertex2, double[] vertex3){
		g2d.drawLine((int)vertex1[0], (int)vertex1[1], (int)vertex2[0], (int)vertex2[1]);
		g2d.drawLine((int)vertex2[0], (int)vertex2[1], (int)vertex3[0], (int)vertex3[1]);
		g2d.drawLine((int)vertex3[0], (int)vertex3[1], (int)vertex1[0], (int)vertex1[1]);
	}
	//--------------------------------------------------//
	
	//Getters and Setters------------------------------//
	
	public void setViewport(){
		double[][] viewport2 = {{1,0,0,this.getWidth()/2},{0,-1,0,this.getHeight()/2},{0,0,0,0},{0,0,0,1}};
		viewport = viewport2;
		arr.set(1, viewport);
		parent.mp.initLabels();
	}

	public double getTriangleSize() {
		return triangleSize;
	}

	public void setTriangleSize(int triangleSize) {
		this.triangleSize = triangleSize;
	}
	//--------------------------------------------------//
	
	//MouseListener Methods-----------------------------//
	@Override
	public void mouseClicked(MouseEvent arg0) {
		// TODO Auto-generated method stub
		
	}

	@Override
	public void mouseEntered(MouseEvent arg0) {
		// TODO Auto-generated method stub
		
	}

	@Override
	public void mouseExited(MouseEvent arg0) {
		// TODO Auto-generated method stub
		
	}

	@Override
	public void mousePressed(MouseEvent e) {
		// TODO Auto-generated method stub
		System.out.println(e.getX() + " " + e.getY());
	}

	@Override
	public void mouseReleased(MouseEvent arg0) {
		// TODO Auto-generated method stub
		
	}

	//--------------------------------------------------//
}
 
Ähnliche Java Themen
  Titel Forum Antworten Datum
M eigene GUI Bibliothek erstellen. AWT, Swing, JavaFX & SWT 10
M Mandelbrot mit BigDecimal erstellen und in der UI zeichnen, funktionierte nicht. AWT, Swing, JavaFX & SWT 1
I Hilfe bei dem Erstellen einer SQL Abfrage aus gewählten JComboBoxen AWT, Swing, JavaFX & SWT 5
C Swing ImageIcon erstellen, skalieren und verwenden AWT, Swing, JavaFX & SWT 3
T src ordner erstellen AWT, Swing, JavaFX & SWT 6
M Javafx versuch Bibliothek zu erstellen AWT, Swing, JavaFX & SWT 0
melaniemueller Confirmation Dialog erstellen AWT, Swing, JavaFX & SWT 18
izoards Outlook Mail erstellen - Signatur wird nicht angezeigt. AWT, Swing, JavaFX & SWT 3
E Putzplan erstellen AWT, Swing, JavaFX & SWT 15
news2swen automatisches erstellen eines Languagefiles AWT, Swing, JavaFX & SWT 1
W Clear Canvas und anschließendes neues Erstellen von Objekten auf Canvas aus ArrayList AWT, Swing, JavaFX & SWT 4
P Swing Programm hängt sich bei Buttondruck auf? (GUI für "Chatbot" erstellen) AWT, Swing, JavaFX & SWT 15
D runnable Jar mit Javafx erstellen(Eclipse) AWT, Swing, JavaFX & SWT 10
N Kontextmenü (Popup-Fenster) erstellen AWT, Swing, JavaFX & SWT 3
L JavaFX PropertyView mit dynamischer EditCell erstellen? AWT, Swing, JavaFX & SWT 8
C Falschfarbenbild (lineare Grauwertspreizung)aus Grauwert-Bild erstellen AWT, Swing, JavaFX & SWT 15
H Beim JFrame erstellen ein anderes schließen AWT, Swing, JavaFX & SWT 0
Z Random Butten erstellen ohne Container AWT, Swing, JavaFX & SWT 15
F Verzeichnis über GUI erstellen AWT, Swing, JavaFX & SWT 2
J Exception beim JFrame erstellen AWT, Swing, JavaFX & SWT 6
S Labels in Panel erstellen AWT, Swing, JavaFX & SWT 1
B JavaFX RadioButtons erstellen AWT, Swing, JavaFX & SWT 7
N Ausführbare Datei aus JavaFX Projekt erstellen AWT, Swing, JavaFX & SWT 22
A Objekt von einem Window erstellen? AWT, Swing, JavaFX & SWT 8
K Buttons dynamisch erstellen (NetBeans) AWT, Swing, JavaFX & SWT 10
ralfb1105 JavaFX TreeView dynamisch aus Datenbank Tabelle erstellen AWT, Swing, JavaFX & SWT 22
ralfb1105 JavaFX Dynamisch TableView Spalten erstellen AWT, Swing, JavaFX & SWT 4
O Basics - Anwendung erstellen mit mehreren Szenen AWT, Swing, JavaFX & SWT 1
dereki2000 LookAndFeel Individuelles LAF erstellen AWT, Swing, JavaFX & SWT 9
C SWT Breadcrumb Zeile mit entsprechenden Hyperlinks erstellen AWT, Swing, JavaFX & SWT 0
D Swing Anwendung ohne JPanel erstellen AWT, Swing, JavaFX & SWT 1
L Chat erstellen AWT, Swing, JavaFX & SWT 13
N "Automatisches" erstellen von jButtons AWT, Swing, JavaFX & SWT 1
K Aus 2 Arrays xy - Graph erstellen AWT, Swing, JavaFX & SWT 9
K Swing outerPanel und innerPanel erstellen AWT, Swing, JavaFX & SWT 4
N Eclipse - GUI - MacBook - Buttonsichtbarkeit beim Anlegen/Erstellen AWT, Swing, JavaFX & SWT 14
Timo_neu_in_java Buttons Erstellen AWT, Swing, JavaFX & SWT 6
P JList erstellen AWT, Swing, JavaFX & SWT 4
H Musik wird nach dem erstellen der .jar Datei nicht mehr abgespielt AWT, Swing, JavaFX & SWT 1
J Statistik erstellen AWT, Swing, JavaFX & SWT 3
H GUI erstellen um JUnit Tests auszuführen AWT, Swing, JavaFX & SWT 29
H JavaFX via .fxml einen abgeleiteten Button erstellen... AWT, Swing, JavaFX & SWT 4
D Swing JComboBox (DefaultComboBoxModel) überschreibt Eintrag beim erstellen AWT, Swing, JavaFX & SWT 0
Prafy Sich ändernde Farbverläufe erstellen AWT, Swing, JavaFX & SWT 4
Thallius Swing Mehrere tausend "Panels" erstellen AWT, Swing, JavaFX & SWT 3
O Swing JList beim Klicken in der GUI erstellen AWT, Swing, JavaFX & SWT 6
M JavaFX GUI-Elemente erstellen, nachdem die GUI geladen hat AWT, Swing, JavaFX & SWT 4
U dynamisches JTree erstellen AWT, Swing, JavaFX & SWT 2
A Mit dem Scene Builder eine Collage erstellen (Bilder beziehen aus Flickr) AWT, Swing, JavaFX & SWT 1
D JavaFX build.fxbuild error beim Erstellen einer exe AWT, Swing, JavaFX & SWT 2
T JavaFX Flexible Layouts dynamisch erstellen / Design-Inspirationen AWT, Swing, JavaFX & SWT 8
J JavaFX JavaFX exe erstellen AWT, Swing, JavaFX & SWT 5
E JavaFX JavaFX - MenuItem erstellen aus dem Inhalt einer HashMap AWT, Swing, JavaFX & SWT 1
G Programm GUI erstellen AWT, Swing, JavaFX & SWT 5
N Swing JTree Problem beim erstellen der Knoten AWT, Swing, JavaFX & SWT 0
G Anonyme Instanz von JXImageView erstellen und mit Bild initialisieren AWT, Swing, JavaFX & SWT 7
M "(Buch-)Seiten" erstellen AWT, Swing, JavaFX & SWT 2
R AWT AWT Textfeld durch Klick auf Button erstellen? AWT, Swing, JavaFX & SWT 3
H Swing Probleme beim erstellen eines neuen Objektes durch einen Button AWT, Swing, JavaFX & SWT 10
Z Diagramm mit jfreechart quadratisch erstellen AWT, Swing, JavaFX & SWT 1
F JButtons erstellen lassen mit unterschiedlichen Funktionen AWT, Swing, JavaFX & SWT 3
T JPanel dynamisch erstellen AWT, Swing, JavaFX & SWT 4
J Logikfehler im erstellen eines GUI AWT, Swing, JavaFX & SWT 3
A Swing Frames richtig erstellen AWT, Swing, JavaFX & SWT 3
T Wizard mit NEXT Button erstellen AWT, Swing, JavaFX & SWT 11
D gerichteten Graph erstellen AWT, Swing, JavaFX & SWT 2
M JavaFX MSI oder EXE aus JavaFX Projekt erstellen? AWT, Swing, JavaFX & SWT 2
R Kästchen mit Zufallsfarben erstellen AWT, Swing, JavaFX & SWT 2
A Fehler bei erstellen eines JTextFields AWT, Swing, JavaFX & SWT 2
A Fenster erstellen AWT, Swing, JavaFX & SWT 2
G Label erstellen AWT, Swing, JavaFX & SWT 6
G Blöcke erstellen AWT, Swing, JavaFX & SWT 4
K Swing Terminplaner erstellen AWT, Swing, JavaFX & SWT 7
G JavaFX Neues Fenster erstellen AWT, Swing, JavaFX & SWT 3
M Wie kann ich eine an Apple Automator angelehnte GUI erstellen? AWT, Swing, JavaFX & SWT 1
T An/aus Button erstellen AWT, Swing, JavaFX & SWT 5
A Swing Transparenten JPanel erstellen AWT, Swing, JavaFX & SWT 5
D Jahreskalender erstellen AWT, Swing, JavaFX & SWT 2
R Int aus JSpinner auslesen und Tabelle erstellen AWT, Swing, JavaFX & SWT 3
W JTable erstellen und Spalten sortieren AWT, Swing, JavaFX & SWT 2
B Erstellen eigener Combobox ("CellFactory") AWT, Swing, JavaFX & SWT 4
K Swing SwingGUI - Erstellen für Anfänger AWT, Swing, JavaFX & SWT 15
B Eigenen Look&Feel erstellen?! AWT, Swing, JavaFX & SWT 2
S Swing Kopie eines JPanels inkl. aller objekte darin erstellen AWT, Swing, JavaFX & SWT 5
R SWT Eigene Events erstellen und werfen AWT, Swing, JavaFX & SWT 59
K JSpinner in passender Breite erstellen oder automatisch anpassen AWT, Swing, JavaFX & SWT 2
B 2D-Grafik Dynamisches Erstellen von Images und deren Animation AWT, Swing, JavaFX & SWT 4
C Border in JPanel erstellen AWT, Swing, JavaFX & SWT 4
P JTabbedPane per Menuitem erstellen AWT, Swing, JavaFX & SWT 20
B Swing invokeLater nötig beim GUI erstellen? AWT, Swing, JavaFX & SWT 10
V Swing Wochenplaner in Swing erstellen! Aber wie? AWT, Swing, JavaFX & SWT 13
J Frame mit Button erstellen - Warum ist es nötig, Frame über Unterklasse zu erstellen? (Reg Listener) AWT, Swing, JavaFX & SWT 2
P Neue Datei erstellen in JPanel AWT, Swing, JavaFX & SWT 5
V Guis erstellen mit FXML und javaFX gemischt AWT, Swing, JavaFX & SWT 5
B Swing JMenuButtons mit Funktionen aus Array erstellen AWT, Swing, JavaFX & SWT 4
B Bild direkt im Quelltext erstellen AWT, Swing, JavaFX & SWT 14
B Applet Aus Applet signiertes jar mit externen libs erstellen AWT, Swing, JavaFX & SWT 9
I Swing GUI "ordentlich" mit Guice erstellen AWT, Swing, JavaFX & SWT 2
B Java scatterplot mit Sticks effizient erstellen! AWT, Swing, JavaFX & SWT 2
R Java Desktop Anwendung erstellen. Womit? AWT, Swing, JavaFX & SWT 3

Ähnliche Java Themen


Oben