Java FX 3D kamera drehen oder lieber die Gruppe drehen

MrTroble

Bekanntes Mitglied
Hallo leute heute
dreht :lol: es sich um
einen Code den ich geschrieben habe um
meine welt zu drehen bzw damit man sich in der Welt umschauen kann

[JAVA]
scene.setOnMouseMoved(new EventHandler<MouseEvent>() {
@Override public void handle(MouseEvent me) {
mouseOldX = mousePosX;
mouseOldY = mousePosY;
mousePosX = me.getSceneX();
mousePosY = me.getSceneY();
mouseDeltaX = (mousePosX - mouseOldX);
mouseDeltaY = (mousePosY - mouseOldY);


cameraXform.ry.setAngle(cameraXform.ry.getAngle() -
mouseDeltaX*ROTATION_SPEED); //
cameraXform.rx.setAngle(cameraXform.rx.getAngle() +
mouseDeltaY*ROTATION_SPEED); // -

Logger.Debug(cameraXform.ry + " " + cameraXform.rx, false);
if(cameraXform.rx.getAngle() > 450.0){
cameraXform.rx.setAngle(450.0);
}
if(cameraXform.rx.getAngle() < 362.0){
cameraXform.rx.setAngle(362.0);
}
}
});
}
[/code]

gute Idee oder nich
das solten eigentlich zylinder sein mit 0.2 abstand

btnb.jpg
 
Der Herr troble mal wieder 😀
Es macht wohl Sinn eher die Kamera zu drehen, denn dafür ist die ja schließlich auch gemacht ?!
Dass des Zylinder sein sollen hätte ich nicht erkannt, da passt doch was nicht, sieht auf jeden Fall total krank aus.
Was kameraXForm ist kann ich hier zwar nicht rauslesen, aber auf jeden Fall die Kamera drehen würde ich sagen.

mfg Major
 
Jo ich mal wieder. Ich hab noch 1000 ungeklärte Fragen auf Lager.
Ich hab auch an die Kamera gedacht, aber manchmal erkennt man die Zylinde.
Dafür muss die Kamera schon perfekt stehen.
Ich hab noch einen Vorschlag ...
Java:
camera.setRotationAxis(new Point3D(camera.getRotationAxis().getX() - mouseDeltaX*ROTATION_SPEED, camera.getRotationAxis().getY() + mouseDeltaX*ROTATION_SPEED, 0));
Aber wenn ich die Maus bewege, passiert gar nichts;🙂confused:
 
Zuletzt bearbeitet von einem Moderator:
Öhm, sollte normalerweise klar sein dass nix passiert.
Neu bei JavaFX, was ?

Das ganze funktioniert so:
Die Kamera selbst kann nur eine Rotation speichern, so ist das eben, dabei setzt man eine Achse, das ist was du gemacht hast, und dann setzt man die Rotation, das würde dann so gehen:

Java:
		camera.setRotate(10);

setRotationAxis besagt nur um welche Achse du es drehen willst.
Dafür verwendet man außerdem für gewöhnlich Rotate, sieht dann so aus:

Java:
		camera.setRotationAxis(Rotate.X_AXIS);
		//Und dann die Rotation in Grad hinterher
		camera.setRotate(10);

Du solltest dir insgesamt mal die Transforms von Nodes anschauen, dann wirst du da auf jeden Fall einfachere Varianten finden, Stichwort Rotate

mfg Major
 
ja aber ich will es ja in x und y drehen

und das ist mir eigentlich bekannt aber ich dachte - weil Point3D
 
Zuletzt bearbeitet:
Wie gesagt, schau dir Rotates an.
Wenn du willst können wir uns auch mal für nen Stundchen zusammensetzen und ich erklär dir das ganze mal...

mfg Major
 
was heißt denn eiert ?
Ne genauere Beschreibung wäre hilfreich.
Ich gebe dir mal meinen Code, damit kannst du auch mehreren Objekten die gleiche Rotation geben.

Java:
package units;

import javafx.scene.Node;
import javafx.scene.transform.Rotate;

public class Rotation {

	private Rotate xRotation = new Rotate(0, Rotate.X_AXIS);
	private Rotate yRotation = new Rotate(0, Rotate.Y_AXIS);
	private Rotate zRotation = new Rotate(0, Rotate.Z_AXIS);
	
	public Rotation(Node node){
		build(0, 0, 0);
		addToNode(node);
	}
	
	public Rotation(double xAngle, double yAngle, double zAngle, Node node){
		build(xAngle, yAngle, zAngle);
		addToNode(node);
	}
	
	public Rotation(){
		build(0, 0, 0);
	}
	
	public Rotation(double xAngle, double yAngle, double zAngle){
		build(xAngle, yAngle, zAngle);
	}
	
	public void build(double xAngle, double yAngle, double zAngle){
		setXRotation(xAngle);
		setYRotation(yAngle);
		setZRotation(zAngle);
	}
	
	@Override
	public String toString() {
		return("(" + getXRotation() + " | " + getYRotation() + " | " + getZRotation() + ")");
	}
	
	public void addToNode(Node node){
		node.getTransforms().addAll(xRotation, yRotation, zRotation);
	}
	
	//Setters
	public void setXRotation(double angle){
		xRotation.setAngle(angle);
	}
	
	public void setYRotation(double angle){
		yRotation.setAngle(angle);
	}
	
	public void setZRotation(double angle){
		zRotation.setAngle(angle);
	}
	
	public void setRotation(double xAngle, double yAngle, double zAngle){
		xRotation.setAngle(xAngle);
		yRotation.setAngle(yAngle);
		zRotation.setAngle(zAngle);
	}
	
	public void translateRotation(double xAngle, double yAngle, double zAngle){
		xRotation.setAngle(getXRotation() + xAngle); 
		yRotation.setAngle(getYRotation() + yAngle); 
		zRotation.setAngle(getZRotation() + zAngle); 
	}
		
	public void setPivot(Location location){
		xRotation.setPivotX(location.getPixelPosX());
		yRotation.setPivotX(location.getPixelPosX());
		zRotation.setPivotX(location.getPixelPosX());
		xRotation.setPivotY(location.getPixelPosY());
		yRotation.setPivotY(location.getPixelPosY());
		zRotation.setPivotY(location.getPixelPosY());
		xRotation.setPivotZ(location.getPixelPosZ());
		yRotation.setPivotZ(location.getPixelPosZ());
		zRotation.setPivotZ(location.getPixelPosZ());
	}
	
	//Getters
	public double getXRotation(){
		return xRotation.getAngle();
	}
	
	public double getYRotation(){
		return yRotation.getAngle();
	}
	
	public double getZRotation(){
		return zRotation.getAngle();
	}
	
}
 

Zurück
Oben