[Java3D] lookAt Mausposition

Maxim6394

Bekanntes Mitglied
Ich versuche die ganze zeit die kameraposition so zu verändern dass sie immer zu einem bestimmten punkt zeigt, das soll später die mausposition sein.
ich versteh nur nicht wie ich das machen soll. ich weis dass man die position des auges braucht, aber ich hab keine funktion gefunden um auf der transformgroup den punkt rauszukriegen. dann brauch ich noch den punkt der fokussiert werden soll. wie soll ich den bekommen wenn ich nur die x und y koordinate der maus hab?
irgendwie muss das wohl mit lookAt gehen, aber wie soll ich das benutzen? weis jemand wie das geht?
 
Zuletzt bearbeitet:

Marco13

Top Contributor
Beschreib' mal genauer, was du meinst. Wenn der Punkt, wo man hinseht, immer die Mausposition ist, ist die Mausposition immer in der Mitte des Bildschirms - da beißt sich die Katze ein bißchen in den Schwanz...

Ein paar Stichworte, zum Stöbern: Mit
Canvas3D (Java 3D 1.4.0)
kann man den Punkt berechnen, den die Maus in ImagePlate-Koordinaten hat.

Mit
Canvas3D (Java 3D 1.4.0)
kann man sich die Transform holen, mit der man den ImagePlate-Punkt dann in Weltkoordinaten transformieren kann.

Mit Transform3D (Java 3D 1.3.2)
kann man sich eine Transform3D basteln, die die Blickrichtung beschreibt.

Mit
ViewingPlatform (Java 3D 1.3.2)
kann man sich die ViewingPlatform holen, der man eine Transform3D geben kann, um die Blickrichtung zu ändern.

Bin aber aus Java3D und dem (recht komplizierten) View-Modell ein bißchen raus - ist einfach schon zu lange her - und es kann auch sein, dass das, was du vorhast, durch irgendeine magische Zeile wie
somewhere.setThisFancyMouseFollowingBehavior(new MagicMouseFollowBehavior());
erreichbar wäre...

Auf 3DJava findet man oft praktische Snippets zu Java3D, aber konkret dazu wüßte ich jetzt nichts.
 

Maxim6394

Bekanntes Mitglied
fürs erste wärs gut wenn ich die kamera mit tasten bewegen könnte, und dabei immer nur ein punkt fokussiert wird.
dann müsste die kamera sich kreisförmig um diesen punkt bewegen, wenn man die ganze zeit den befehl für eine seitwärtsbewegung gibt. das funktioniert nicht so richtig bei mir.

ich hab das so gemacht:
Java:
class myKeyListener extends KeyAdapter
	{
	
		public void keyPressed(KeyEvent e)
		{
				
			switch (e.getKeyChar())
			{
			case 'w':dz=-moveSpeed;
			break;
			
			case 's':dz=moveSpeed;
			break;
			
			case 'a':dx=-moveSpeed;
			break;
			
			case 'd':dx=moveSpeed;
			
			}
			
		}
		public void keyReleased(KeyEvent e)
		{
			
			switch (e.getKeyChar())
			{
			case 'w':dz=0;
			break;
			
			case 's':dz=0;
			break;
			
			case 'a':dx=0;
			break;
			
			case 'd':dx=0;
			
			}
		}
		
		
	}
wenn eine taste gedrückt wurde wird die bewegungsgeschwindigkeit in die entsprechende richtung erhöht und wenn sie losgelassen wurde verringert. das ist zwar nicht wirklich optimal aber das problem ist grad was anderes.
Java:
java.util.TimerTask task=new java.util.TimerTask()
	{
		public void run()
		{
			
			
			Transform3D t3d=new Transform3D();
			t3d.setTranslation(new Vector3d(playerPos.getX()+dx,playerPos.getY()+dy,playerPos.getZ()+dz));
			
			playerPos.setX(playerPos.getX()+dx);
			playerPos.setY(playerPos.getY()+dy);
			playerPos.setZ(playerPos.getZ()+dz);
			

			
			Transform3D look=new Transform3D();
			
			look.lookAt(new Point3d(playerPos.getX(), playerPos.getY(), playerPos.getZ()), new Point3d(0d, 0d, 0d), new Vector3d(0d, 1d, 0d));
			look.invert();
			
			view.setTransform(look);
			
		}
	};

die timertask wird alle 5 ms aufgerufen um die kameraposition zu verändern. wie schon erwähnt sollte bei seitwärsbewegung die kamera sich kreisförmig um den anvisierten punkt bewegen, das tut sie aber nicht, so als würden die achsen der kamera nicht mitrotiert werden wenn lookAt aufgerufen wird. dann bewegt sie sich praktisch nach hinten oder vorne wenn sie sich weiter vom objekt entfernt, obwohl es eine seitwärtsbewegung sein sollte.
 
Zuletzt bearbeitet:

Maxim6394

Bekanntes Mitglied
ich hab immernoch nicht gepeilt wie ich aus der cursorposition die xyz koordinaten rauskriege. getPixelLocationInImagePlate gibt mir nur 0,0,0, egal welche werte ich für x und y benutze.
 

Marco13

Top Contributor
Irgendwann hatte ich in einem anderen Thread wohl mal das hier zusammengehackt...
Java:
// Based on [url=http://www.java2s.com/Code/Java/3D/HelloJava3Dbrendersasinglerotatedcube.htm]HelloJava3Db renders a single, rotated cube : 3D Basics3DJava[/url]

import java.applet.Applet;
import java.awt.BorderLayout;
import java.awt.Frame;
import java.awt.GraphicsConfiguration;
import java.awt.event.MouseAdapter;
import java.awt.event.MouseEvent;

import javax.media.j3d.BoundingSphere;
import javax.media.j3d.BranchGroup;
import javax.media.j3d.Canvas3D;
import javax.media.j3d.Transform3D;
import javax.media.j3d.TransformGroup;
import javax.vecmath.Point3d;
import javax.vecmath.Vector3f;

import com.sun.j3d.utils.applet.MainFrame;
import com.sun.j3d.utils.behaviors.keyboard.KeyNavigatorBehavior;
import com.sun.j3d.utils.behaviors.mouse.MouseRotate;
import com.sun.j3d.utils.geometry.ColorCube;
import com.sun.j3d.utils.universe.SimpleUniverse;

public class ClickingHelloJava3Db extends Applet {
	public BranchGroup createSceneGraph() {
		// Create the root of the branch graph
		BranchGroup objRoot = new BranchGroup();
		objRoot.setCapability(BranchGroup.ALLOW_CHILDREN_EXTEND);

		Transform3D rotate = new Transform3D();
		Transform3D tempRotate = new Transform3D();

		rotate.rotX(Math.PI / 4.0d);
		tempRotate.rotY(Math.PI / 5.0d);
		rotate.mul(tempRotate);

		TransformGroup objRotate = new TransformGroup(rotate);

		objRoot.addChild(objRotate);
		objRotate.addChild(new ColorCube(0.4));

		return objRoot;
	}

	public ClickingHelloJava3Db() {
		setLayout(new BorderLayout());
		GraphicsConfiguration config = SimpleUniverse
				.getPreferredConfiguration();
		Canvas3D canvas3D = new Canvas3D(config);
		add("Center", canvas3D);

		BranchGroup scene = createSceneGraph();
		SimpleUniverse simpleU = new SimpleUniverse(canvas3D);
		simpleU.getViewingPlatform().setNominalViewingTransform();

		TransformGroup viewTransformGroup =
			simpleU.getViewingPlatform().getViewPlatformTransform();

		KeyNavigatorBehavior keyInteractor =
			new KeyNavigatorBehavior(viewTransformGroup);

		BoundingSphere movingBounds = new BoundingSphere(
				new Point3d(0.0, 0.0, 0.0), 100.0);
		keyInteractor.setSchedulingBounds(movingBounds);
		scene.addChild(keyInteractor);

		MouseRotate behavior = new MouseRotate();
		behavior.setTransformGroup(viewTransformGroup);
		scene.addChild(behavior);
		behavior.setSchedulingBounds(movingBounds);
		
		simpleU.addBranchGraph(scene);
		
		initPickingTest(scene, canvas3D);
	}
	
	private void initPickingTest(final BranchGroup scene, final Canvas3D canvas)
	{
		canvas.addMouseListener(new MouseAdapter() {
			
			@Override
			public void mouseReleased(MouseEvent e) {
				System.out.println("Screen "+e.getPoint());

				Point3d point = new Point3d();
				canvas.getPixelLocationInImagePlate(e.getX(), e.getY(),point);
				
				System.out.println("Image plate "+point);
				
				Transform3D transform = new Transform3D();
				canvas.getImagePlateToVworld(transform);
				transform.transform(point);
				
				System.out.println("World "+point);
				
				TransformGroup tg = new TransformGroup();
				Transform3D t = new Transform3D();
				Vector3f translation = new Vector3f(
					(float)point.x, (float)point.y, (float)point.z);
				t.setTranslation(translation);
				tg.setTransform(t);
				tg.addChild(new ColorCube(0.1));
				BranchGroup bg = new BranchGroup();
				bg.addChild(tg);
				scene.addChild(bg);
			}
		});
	}
	
	
	
	public static void main(String[] args) {
		Frame frame = new MainFrame(new ClickingHelloJava3Db(), 512, 512);
	}

}

Falls das nicht hilft kann ich für den Rest bei Gelegenheit nochmal schauen...
 

Maxim6394

Bekanntes Mitglied
ich glaub ich hab jetzt die lösung. hab den java ziemlich ausgetrickst. ich hab zwar keine möglichkeit gefunden um die koordinaten im fenster in 3d koordinaten zu übersetzen, aber ich hab rausgefunden wie man die genauen koordinaten einer pickray intersection kriegt. also hab ich ne riesen sphere um die kamera gemacht, die nicht sichtbar ist. bei nem mausklick wird dann die position der intersection ermittelt und mit lookat dann fokussiert.
Java:
public void mouseClicked(MouseEvent e)
		{
			
	
			PickCanvas MyPick=new PickCanvas(canvas3D,sceneBG);
			PickResult result;
			
			MyPick.setMode(PickTool.GEOMETRY);
			MyPick.setShapeLocation(e);
			
			result=MyPick.pickClosest();
			lookPoint=result.getIntersection(0).getPointCoordinates();
			
			
		}

dann in der 5ms schleife:
Java:
			look.lookAt(new Point3d(playerPos.getX(), playerPos.getY(), playerPos.getZ()),
					
					new Point3d(lookPoint.getX(), lookPoint.getY(), lookPoint.getZ()),
					
					new Vector3d(0d, 1d, 0d));
			look.invert();

somit wird immer perfekt die verdammte position anvisiert wo man hingeklickt hat. das wirft aber bestimmt noch andere probleme auf für später, mal sehen.
 

Maxim6394

Bekanntes Mitglied
es besteht jetzt immernoch das problem dass die kamera sich in die falsche richtung bewegt wenn ich x oder z verändere, nachdem mit lookAt die perspektive verändert wurde. gibt es keine möglichkeit die achsen zu resetten oder so? also wenn man eine transformgroup rotiert, sollten die achsen auch mitrotieren.
 

Maxim6394

Bekanntes Mitglied
ich glaub der ansatz ist falsch. ich würde es lieber so machen dass ich die viewplatform transformgroup rotiere, je nachdem wie die maus in x und y richtung bewegt wurde. ich weis aber nicht wirklich wie ich das anstellen soll.
 

Maxim6394

Bekanntes Mitglied
also ich hab mir überlegt nen timer laufen zu lassen der jedes mal die mausposition checkt, um rauszufinden wie weit die maus in dem zeitintervall bewegt wurde. daraus kann man dann die rotation der view transformgroup festlegen, das funktioniert für eine achse ganz gut, aber bei x und y zusammen klappt das nicht.
Java:
import java.applet.Applet;
import java.awt.*;
import java.awt.event.*;
import com.sun.j3d.utils.applet.MainFrame;
import com.sun.j3d.utils.universe.*;

import javax.media.j3d.*;
import javax.vecmath.*;
import com.sun.j3d.utils.geometry.Sphere;
import java.awt.image.*;
import com.sun.j3d.loaders.objectfile.ObjectFile;
import com.sun.j3d.loaders.ParsingErrorException;
import com.sun.j3d.loaders.IncorrectFormatException;
import com.sun.j3d.utils.picking.*;
import java.applet.Applet;
import javax.media.j3d.*;
import javax.vecmath.*;
import java.io.*;
import javax.swing.*;
import com.sun.j3d.utils.geometry.*;
import java.util.*;
import com.sun.j3d.utils.behaviors.vp.*;
import ncsa.j3d.loaders.*;
import com.sun.j3d.loaders.*;

import COM.sun.labs.javacc.*;
import COM.sun.labs.javaccgui.*;
import COM.sun.labs.jjdoc.*;
import COM.sun.labs.jjtree.*;
import com.sun.j3d.utils.image.*;
import javax.media.j3d.*;
import java.awt.*;
import com.sun.j3d.utils.behaviors.mouse.*;
import com.sun.j3d.utils.behaviors.keyboard.*;

public class Scene02 extends JFrame {
	
	int BOUNDSIZE=50;
	BoundingSphere bounds=new BoundingSphere();
	TransformGroup view;
	Canvas3D canvas3D;
	SimpleUniverse su;
	BranchGroup sceneBG=new BranchGroup();

	Point2d mousePos=new Point2d(MouseInfo.getPointerInfo().getLocation().getX(),MouseInfo.getPointerInfo().getLocation().getY());
	
	java.util.Timer timer=new java.util.Timer();
	java.util.TimerTask task=new java.util.TimerTask()
	{
		public void run()
		{			
			int x=(int)MouseInfo.getPointerInfo().getLocation().getX();
			int y=(int)MouseInfo.getPointerInfo().getLocation().getY();
			
			
			System.out.println(x-mousePos.getX());
			System.out.println(y-mousePos.getY());
			
			Transform3D rotY=new Transform3D();
			Transform3D rotX=new Transform3D();
			
			Transform3D tmp=new Transform3D();	view.getTransform(tmp);
			
			double diffX=-((x-mousePos.getX())/10);
			double diffY=-((y-mousePos.getY())/10);
			
			rotY.rotY(Math.toRadians(diffX));
			rotX.rotX(Math.toRadians(diffY));
			
			tmp.mul(rotY);
			view.setTransform(tmp);
			
			view.getTransform(tmp);
			tmp.mul(rotX);
			view.setTransform(tmp);
			
			
			mousePos.setX(x); mousePos.setY(y);
			
		}
	};
		
		
	public Scene02()
	{
		bounds.setRadius(BOUNDSIZE);
		setVisible(true);
		setSize(500,500);
		setDefaultCloseOperation(EXIT_ON_CLOSE);
			GraphicsConfiguration config=SimpleUniverse.getPreferredConfiguration();
		 canvas3D=new Canvas3D(config);
			add("Center",canvas3D);
			
			su=new SimpleUniverse(canvas3D);

			ViewingPlatform vp=su.getViewingPlatform();
			vp.setNominalViewingTransform();
			
			 view=vp.getViewPlatformTransform();
			Transform3D t3d=new Transform3D();	
			view.getTransform(t3d);		
			

			
				TransformGroup vpTrans = su.getViewingPlatform(  ).getViewPlatformTransform(  );
	

		
			Transform3D t3d2=new Transform3D();
			t3d2.setTranslation(new Vector3d(0,0,10));
			view.setTransform(t3d2);
			
			
			
			TransformGroup cubeTG=new TransformGroup();
			cubeTG.setCapability(TransformGroup.ALLOW_TRANSFORM_WRITE);	
			cubeTG.addChild(new ColorCube(0.4f));	
			sceneBG.addChild(cubeTG);
	
			
			
			su.addBranchGraph(sceneBG);
		
		
			
			timer.scheduleAtFixedRate(task, 0, 50);
	}


	
	public static void main(String[] args)
	{
		new Scene02();
	}

	
}
 

Maxim6394

Bekanntes Mitglied
also ich hab mir überlegt nen timer laufen zu lassen der jedes mal die mausposition checkt, um rauszufinden wie weit die maus in dem zeitintervall bewegt wurde. daraus kann man dann die rotation der view transformgroup festlegen, das funktioniert für eine achse ganz gut, aber bei x und y zusammen klappt das nicht.
Java:
import java.applet.Applet;
import java.awt.*;
import java.awt.event.*;
import com.sun.j3d.utils.applet.MainFrame;
import com.sun.j3d.utils.universe.*;

import javax.media.j3d.*;
import javax.vecmath.*;
import com.sun.j3d.utils.geometry.Sphere;
import java.awt.image.*;
import com.sun.j3d.loaders.objectfile.ObjectFile;
import com.sun.j3d.loaders.ParsingErrorException;
import com.sun.j3d.loaders.IncorrectFormatException;
import com.sun.j3d.utils.picking.*;
import java.applet.Applet;
import javax.media.j3d.*;
import javax.vecmath.*;
import java.io.*;
import javax.swing.*;
import com.sun.j3d.utils.geometry.*;
import java.util.*;
import com.sun.j3d.utils.behaviors.vp.*;
import ncsa.j3d.loaders.*;
import com.sun.j3d.loaders.*;

import COM.sun.labs.javacc.*;
import COM.sun.labs.javaccgui.*;
import COM.sun.labs.jjdoc.*;
import COM.sun.labs.jjtree.*;
import com.sun.j3d.utils.image.*;
import javax.media.j3d.*;
import java.awt.*;
import com.sun.j3d.utils.behaviors.mouse.*;
import com.sun.j3d.utils.behaviors.keyboard.*;

public class Scene02 extends JFrame {
	
	int BOUNDSIZE=50;
	BoundingSphere bounds=new BoundingSphere();
	TransformGroup view;
	Canvas3D canvas3D;
	SimpleUniverse su;
	BranchGroup sceneBG=new BranchGroup();

	Point2d mousePos=new Point2d(MouseInfo.getPointerInfo().getLocation().getX(),MouseInfo.getPointerInfo().getLocation().getY());
	
	java.util.Timer timer=new java.util.Timer();
	java.util.TimerTask task=new java.util.TimerTask()
	{
		public void run()
		{			
			int x=(int)MouseInfo.getPointerInfo().getLocation().getX();
			int y=(int)MouseInfo.getPointerInfo().getLocation().getY();
			
			
			System.out.println(x-mousePos.getX());
			System.out.println(y-mousePos.getY());
			
			Transform3D rotY=new Transform3D();
			Transform3D rotX=new Transform3D();
			
			Transform3D tmp=new Transform3D();	view.getTransform(tmp);
			
			double diffX=-((x-mousePos.getX())/10);
			double diffY=-((y-mousePos.getY())/10);
			
			rotY.rotY(Math.toRadians(diffX));
			rotX.rotX(Math.toRadians(diffY));
			
			tmp.mul(rotY);
			view.setTransform(tmp);
			
			view.getTransform(tmp);
			tmp.mul(rotX);
			view.setTransform(tmp);
			
			
			mousePos.setX(x); mousePos.setY(y);
			
		}
	};
		
		
	public Scene02()
	{
		bounds.setRadius(BOUNDSIZE);
		setVisible(true);
		setSize(500,500);
		setDefaultCloseOperation(EXIT_ON_CLOSE);
			GraphicsConfiguration config=SimpleUniverse.getPreferredConfiguration();
		 canvas3D=new Canvas3D(config);
			add("Center",canvas3D);
			
			su=new SimpleUniverse(canvas3D);

			ViewingPlatform vp=su.getViewingPlatform();
			vp.setNominalViewingTransform();
			
			 view=vp.getViewPlatformTransform();
			Transform3D t3d=new Transform3D();	
			view.getTransform(t3d);		
			

			
				TransformGroup vpTrans = su.getViewingPlatform(  ).getViewPlatformTransform(  );
	

		
			Transform3D t3d2=new Transform3D();
			t3d2.setTranslation(new Vector3d(0,0,10));
			view.setTransform(t3d2);
			
			
			
			TransformGroup cubeTG=new TransformGroup();
			cubeTG.setCapability(TransformGroup.ALLOW_TRANSFORM_WRITE);	
			cubeTG.addChild(new ColorCube(0.4f));	
			sceneBG.addChild(cubeTG);
	
			
			
			su.addBranchGraph(sceneBG);
		
		
			
			timer.scheduleAtFixedRate(task, 0, 50);
	}


	
	public static void main(String[] args)
	{
		new Scene02();
	}

	
}

übrigens kommts mir so vor als würde der rotationsursprung nicht mit verschoben werden wenn ich Transform3D.translate() benutze um das ding zu bewegen. dadurch entsteht dann wieder eine falsche rotation.
 

Marco13

Top Contributor
OK, ich gebe dir jetzt noch eine Möglichkeit, klar und verständlich zu formulieren, was du eigentlich vorhast, wenn jetzt wieder nur sowas kommt wie "Ich will die Kameraposition Kugelfömig mit einem Timer um eine Tranformgroup im Kreis mit der Maus Kreisfömig drehen so dass die Kamera dem Punkt folgt" kann sich jemand anderes darum kümmern.
 

Maxim6394

Bekanntes Mitglied
also, mein ziel ist, dass ich eine first-person mäßige sicht habe, wo man sich mit der maus umsehen und mit beliebigen tasten in verschiedene richtungen bewegen kann. so wie in jedem first person gaim. hab mir das nicht so schwer vorgestellt, aber ich kriegs trotzdem kaum hin.

zum beispiel die problematik dass der rotationsursprung an derselben stelle bleibt während man die position der viewingplatform verändert, oder umgekehrt, dass wenn man die viewingplatform rotiert, und und dann zum beispiel auf der z achse bewegt, es nicht nach vorne sondern in irgendeine andere richtung geht.
 

Marco13

Top Contributor
Ja, wer hätte gedacht, dass es schwer ist, einen First-Person-Shooter zu schreiben :joke:

Das "technisch frickeligste" an dem, was du beschrieben hast, ist, dass man die Maus mit einem Robot immer wieder in die Bildschirmmitte setzen muss - denn wenn man die Maus lange nach rechts bewegt, soll er sich ja immer weiter drehen, und nicht irgendwann die Maus rechts aus dem Bildschirm rauskommen.

Ein bißchen was in Richtung 3D-Steuering steht in http://www.java-forum.org/spiele-multimedia-programmierung/122050-java-3d-steuerung-kskb.html - genaugenommen ist das schon eine First-Person-Steuerung, wenn man die Kamera nicht hinter die Person verschiebt ;) Aber dort bestand das gleiche Problem wie hier: Jemand versucht ziemlich planlos irgendwas hinzuschreiben, und was rauskommt ist unübsersichtlicher, chaotischer Code (COM.sun.labs.javacc? :autsch: ), den kaum jemand nachvollziehen kann, und der verblüffenderweise nicht das macht, was der Ersteller will. Darum ist der dort verlinkte Code NICHT als "Vorlage" zu sehen, aber zeigt zumindest ein paar Ansätze und Kommentare meinerseits, in bezug auf die Ausführungsreihenfolge von Rotation und Bewegung, aber auch allgemeinere (weiter unten) in bezug auf die Strukturen. Wenn's nicht weiterhilft: KSKB mit (aufgeräumtem, nachvollziehbarem) letztem Stand, dann schau' ich So/Mo nochmal...
 

truesoul

Top Contributor
Ich muss mal eines los werden. Großes Lob für Marco13, das du so tapfer durchhälst hier im Thread, ganz große Klasse. Ich hätte schon das Handtuch geworfen : D

also, mein ziel ist, dass ich eine first-person mäßige sicht habe, wo man sich mit der maus umsehen und mit beliebigen tasten in verschiedene richtungen bewegen kann. so wie in jedem first person gaim. hab mir das nicht so schwer vorgestellt, aber ich kriegs trotzdem kaum hin.
Ich hatte mal sowas selber programmiert nur ist das doch ein bissl her und ich müsste mich dran setzen um das zu rekonstruieren :D.
Leider habe ich kaum Zeit dafür, aber evtl. habe ich das ich am Wochenende vll. dafür die Zeit, ABER der letzte Post von Marco sieht vielversprechend aus :D

Und Maxim6394, es ist viel einfach dir zu helfen, wenn du ein KSKB erstellst und wir (wir == Marco) anhand dessen helfen.
 

Marco13

Top Contributor
Beruhigend, dass auch "Außenstehende" erkennen, dass das... je nach Fragestellung und so... sehr ... "mühsam" sein kann. Bei den letzten Posts hatte ICH jetzt schon fast ein schlechtes Gewissen, weil ich so wenig "produktives" geantwortet habe, aber ... im Zweifelsfall würde ich auf etliche Java3D-bezogenen Threads verweisen, wo tendenziell nur wenige Leute hilfreiche Antworten schreiben, ich dann aber ggf. schon auch mal mehr Zeit investiert habe...
 

Maxim6394

Bekanntes Mitglied
ich komm langsam voran mit der sache. das mit dem umsehen funktioniert jetzt. ich überprüfe dabei einfach wie weit die maus bewegt wurde und rotiere entsprechend die viewplatform.
ich muss zum rotieren das ding immer auf 0,0,0 platzieren und danach wieder zurück, weil es sich nicht um sich selbst rotiert sondern immer um den nullpunkt. für die bewegung benutz ich einfach nen richtungsvektor, wo ich auch die rotation mit einbeziehe, dadurch wird auch endlich in die richtige richtung bewegt.

bei der rotation besteht noch das problem dass ich nur bis zum rand kann mit der maus, danach geht das nicht mehr. gibt es eine möglichkeit um zu checken ob die maus bewegt wurde, auch wenn sie auf dem bildschirm sich nicht bewegt hat? naja wenn ich mit robot die position immer wieder resette dann gehts natürlich auch, bin mir nur nicht sicher ob das optimal ist.

außerdem flackert das ganze ziemlich, vieleicht weil ich 2 mal setTransform in einer timertask auf dasselbe objekt anwende. das muss ich aber so machen damit das ding um den eigenen ursprung rotiert wird. gibts da ne lösung?

ein kleines problem dass ich schon von anfang an hatte ist, dass die ganze fläche immer weiß ist, bis ich die fenstergröße verändere. woran liegt das?
 
Zuletzt bearbeitet:
Ähnliche Java Themen
  Titel Forum Antworten Datum
N Java3d in Eclipse einbinden Spiele- und Multimedia-Programmierung 4
Neumi5694 Java3D Viewer Beschriftung Spiele- und Multimedia-Programmierung 1
C Java3D Transformieren von obj. Datein Spiele- und Multimedia-Programmierung 0
M Cylinder anhand eines Vektors ausrichten (Java3d) Spiele- und Multimedia-Programmierung 0
Ruvok Java3D Tutorial gesucht Spiele- und Multimedia-Programmierung 5
U Hilfe bei Implementierung eines PointSounds in Java3D Spiele- und Multimedia-Programmierung 1
R Java3d ViewingPlatform erst Verschieben und dann RotationsInterpolator Spiele- und Multimedia-Programmierung 0
D Java3D - Blickfeld Spiele- und Multimedia-Programmierung 1
P Java3D Box Dimensionen und Positionierung Spiele- und Multimedia-Programmierung 1
E Java3D Objekt skalieren per JSlider/JButton Spiele- und Multimedia-Programmierung 10
S Java3D: Primitives zu einem Objekt kombinieren Spiele- und Multimedia-Programmierung 7
J Java3D - Textur laden geht nicht Spiele- und Multimedia-Programmierung 9
J Java3D - Farben vermischen sich Spiele- und Multimedia-Programmierung 7
T Java3D Rendering Problem Spiele- und Multimedia-Programmierung 7
S Java3D oder JMonkey? Spiele- und Multimedia-Programmierung 17
H Java3D - Textur aufs innere einer Sphere mappen Spiele- und Multimedia-Programmierung 9
C java 3d ohne Java3d Spiele- und Multimedia-Programmierung 28
Maxim6394 [Java3D] Probleme bei Kollision Spiele- und Multimedia-Programmierung 7
Maxim6394 [Java3D] Probleme mit KeyFrame Animationen Spiele- und Multimedia-Programmierung 9
K Java3D als Applet ohne Installation von Java3d Spiele- und Multimedia-Programmierung 6
D Java3D Installation: package javax.media.j3d not found Spiele- und Multimedia-Programmierung 5
C Java3D Texture Mapping Spiele- und Multimedia-Programmierung 2
W Java3D: Kanten die hinter einem Objekt liegen werden gezeigt Spiele- und Multimedia-Programmierung 2
W Java3D: Farbe von Objekten stimmt nicht mit übergebenem RGB-Wert überein Spiele- und Multimedia-Programmierung 9
M Eigene Renderengine ohne Java3D,etc. Spiele- und Multimedia-Programmierung 19
C Java3D Sound spielt nur einen Sound ab. Spiele- und Multimedia-Programmierung 8
A JAVA3D TransformGroup <--> Group Problem Spiele- und Multimedia-Programmierung 3
M [Java3D] Animation von mehreren Objekten Spiele- und Multimedia-Programmierung 7
W Java3D: Eckkoordinaten einer Box herausfinden Spiele- und Multimedia-Programmierung 18
T Java3D: Objekte platzieren und entfernen? Spiele- und Multimedia-Programmierung 7
T Java3D: Nur die Kanten des Würfels rendern? Spiele- und Multimedia-Programmierung 4
W Java3D setBounds(BoundingBox) Spiele- und Multimedia-Programmierung 6
T [gelöst] Java3D: Unerwünschte Rotation um die 3.Achse vermeiden? Spiele- und Multimedia-Programmierung 3
Bastie JAVA3D - WRL Transform Spiele- und Multimedia-Programmierung 9
G Eclipse Problem mit Java3d Spiele- und Multimedia-Programmierung 3
T Java3D - Lichtquelle einbauen Spiele- und Multimedia-Programmierung 7
jemandzehage java3d parallel und perspective view Spiele- und Multimedia-Programmierung 5
H Cinema 4D in Java3D importieren Spiele- und Multimedia-Programmierung 2
1 [Java3D] komplexes Projekt? Spiele- und Multimedia-Programmierung 10
P .obj-Datei in Java3D laden: ParsingErrorException Spiele- und Multimedia-Programmierung 7
C Java3D Lichtquelle beim Beobachter Spiele- und Multimedia-Programmierung 2
C Java3D Interaktion während Animation Spiele- und Multimedia-Programmierung 3
aze Java3D: Flächen teilen Spiele- und Multimedia-Programmierung 15
P Java3D Textur verzerrt Spiele- und Multimedia-Programmierung 3
aze Java3D: Gegenstände aufeinander zubewegen ohne Kollision Spiele- und Multimedia-Programmierung 4
D [JAVA3D] Es werden 2 Fenster erzeugt und auf dem falschen gezeichnet Spiele- und Multimedia-Programmierung 3
aze Java3D: leere Räume füllen Spiele- und Multimedia-Programmierung 2
aze Java3d:Helligkeit von Shape3D ändern Spiele- und Multimedia-Programmierung 2
S Einschätzung zu Java3D-Einstieg Spiele- und Multimedia-Programmierung 3
F Programm mit Java3D unter Linux laufen lassen Spiele- und Multimedia-Programmierung 3
I Vergleich von Java3D und OpenGL Spiele- und Multimedia-Programmierung 17
W Waterslide mit Java3D Spiele- und Multimedia-Programmierung 11
M Java3D Picking - falsche Objekte werden gepickt Spiele- und Multimedia-Programmierung 3
M [Java3D] Rotieren der Scene NICHT des POV Spiele- und Multimedia-Programmierung 4
F Jogl oder Java3D ? Spiele- und Multimedia-Programmierung 20
K Java3D Abfängerfrage Spiele- und Multimedia-Programmierung 3
aze Java3D:Farbige Flächen verschwinden lassen(Transparenz- oder Colorinterpolator?)) Spiele- und Multimedia-Programmierung 5
C Java3D PositionInterpolator Spiele- und Multimedia-Programmierung 3
G [Java3D] Probleme bei Animation Spiele- und Multimedia-Programmierung 4
E [JAVA3D] Kamerasteuerung Spiele- und Multimedia-Programmierung 3
E [JAVA3D] Schattenstrich durch die Szene Spiele- und Multimedia-Programmierung 4
M Grundsätzliche Java3D Fragen Spiele- und Multimedia-Programmierung 2
C Java3D SceneGraohPath Spiele- und Multimedia-Programmierung 2
C Java3D Rotation um einen Punkt (y-achse) Spiele- und Multimedia-Programmierung 2
G Java3D plattformunabhängig bundeln Spiele- und Multimedia-Programmierung 3
TheKing Java3D-Shooter View Spiele- und Multimedia-Programmierung 2
A Java3D tutorial? Spiele- und Multimedia-Programmierung 3
R Java3D Kollisionserkennung und Schwerkraft Spiele- und Multimedia-Programmierung 17
M Java3D Objekte entfernen und hinzufügen Spiele- und Multimedia-Programmierung 10
J Java3d Schnelle Geschosse Spiele- und Multimedia-Programmierung 12
D Kann ich mit Java3D 2D Daten als 3D surfaceplot plotten? Spiele- und Multimedia-Programmierung 5
J Java3d setTextureTransform verändert J3DGraphics2D Spiele- und Multimedia-Programmierung 4
J Hilfe: Rotation X und Y Achse (Java3d) Spiele- und Multimedia-Programmierung 12
K Java3D: LineStripArray Spiele- und Multimedia-Programmierung 2
P Java3D - Zylinder genau wie Vektor ausrichten Spiele- und Multimedia-Programmierung 5
Developer_X Java3D Mensch Ärgere Dich nicht. Spiele- und Multimedia-Programmierung 10
C JAVA3D Rotation um einen bestimmten Punkt Spiele- und Multimedia-Programmierung 20
Developer_X Java3D-Ungeeignet für 3D Spiele wegen Heap Space=? Spiele- und Multimedia-Programmierung 23
Developer_X Java3D Canvas post Renderer und? Spiele- und Multimedia-Programmierung 5
A Java3D Sichtweite Spiele- und Multimedia-Programmierung 2
"Er" Kamera rotation in Java3D Spiele- und Multimedia-Programmierung 2
A Java3D: Behavior scheduling bounds Spiele- und Multimedia-Programmierung 3
Developer_X THE BALL (needs Java3D) Spiele- und Multimedia-Programmierung 34
Developer_X Java3D Game_(die erste) Spiele- und Multimedia-Programmierung 2
Developer_X Java3D und while schleifen Spiele- und Multimedia-Programmierung 4
Developer_X Collisionserkennung in Java3D Spiele- und Multimedia-Programmierung 3
Developer_X Java3D Node -> Obj Data Spiele- und Multimedia-Programmierung 2
Developer_X Figuren werden nicht angezeigt (Java3D) Spiele- und Multimedia-Programmierung 5
S PDFRenderer und Java3D Spiele- und Multimedia-Programmierung 2
Developer_X Java3D- der Mausklick auf Nodes Spiele- und Multimedia-Programmierung 3
Developer_X Java3D Point Sound Spiele- und Multimedia-Programmierung 71
Developer_X Lines in Java3D Spiele- und Multimedia-Programmierung 4
V Java3D: HUD erstellen Spiele- und Multimedia-Programmierung 2
V Java3D: scheinende Sonne Spiele- und Multimedia-Programmierung 4
V Java3D: Ringe für Saturn erstellen Spiele- und Multimedia-Programmierung 8
V Java3D: automatisches Bewegen der Kamera Spiele- und Multimedia-Programmierung 19
V Java3D: mehrere ViewingPlaforms in Sonnensystem Spiele- und Multimedia-Programmierung 8
Developer_X Thread in Java3D Spiele- und Multimedia-Programmierung 8
B Java3D .obj dateien Spiele- und Multimedia-Programmierung 2
Developer_X Java3D's next TopModel Spiele- und Multimedia-Programmierung 16

Ähnliche Java Themen

Neue Themen


Oben