LWJGL: 3D Picking

Rubber

Aktives Mitglied
Hi,
ich such ne Möglichkeit, Picking in 3D zu realisieren.

Leider finde ich kaum eine Anleitung im Netz dazu, mit der ich klar komme.

Soweit ich weis, ist die Methode mit OpenGL (GL_SELECT) veraltet und wird nicht mehr unterstützt.

Da ich ein Objekt zu einem Schnittpunkt mit (erstmal) einer Ebene bewegen möchte, würde es sich anbieten einen Strahl zu berechnen und dann den Schnittpunkt mit der Ebene zu berechnen.

Der Strahl müsste dann ja von der Kamera durch die Maus gehen.
Und da scheiter ich momentan dran.

Ich hab zwar bereits einige Code Beispiele gefunden, steig aber noch nicht ganz durch, was was macht.

Hier mal ein Stück Code und dazu ein Paar fragen:
Java:
	public static Ray getScreenCenterRay() {
		//Der Mittelpunkt des Fensters wird ermittelt
		float winX = Display.getWidth() / 2, winY = Display.getHeight() / 2;
		
		//hier werden dann irgendwelche matritzen ausgelsen und gespeichert. Aber was steht in denen drin? Was machen sie?
		IntBuffer viewport = BufferUtils.createIntBuffer(16);
		GL11.glGetInteger( GL11.GL_VIEWPORT, viewport );

		FloatBuffer modelview = BufferUtils.createFloatBuffer(16);
		GL11.glGetFloat( GL11.GL_MODELVIEW_MATRIX, modelview );
		
		FloatBuffer projection = BufferUtils.createFloatBuffer(16);
		GL11.glGetFloat(GL11.GL_PROJECTION_MATRIX, projection);
		
		FloatBuffer positionNear = BufferUtils.createFloatBuffer(3);
		FloatBuffer positionFar = BufferUtils.createFloatBuffer(3);
		
		//und hier verstehe ich auch noch nicht, was genau vorgeht.
		//wenn ich richtig verstanden habe, wird in der oberen Zeile die 3D Koordinaten
		//für die fenstermitte an der stelle, die am Dichtesten an der Kamera ist berechnet.
		//und in der Zeile dadrunter die koordinaten an der stelle, die am weitesten weg
		//von der Kamera ist.
		//das müsste dann ja mit Maus koordinaten ebenso funktionieren.
		//bringt mich aber nicht weiter(?), weil ich den Vektor aus Kamera und Mausüosition brauche
		//Also müsste ich hier 
		//GLU.gluUnProject(Mouse.getx(), Mouse.getY(), 0, modelview, projection, viewport, positionFar);
		//nehmen, damit ich die Mauskoordinaten an der dichtesten Stelle der Kamera habe?
		//und dann brauch ich noch die koorinaten der Kamera und kann einen Vektor aufstellen.
		//dann gilt PosKamera + Vector * länge als glecihung für den Strahl?
		//Aber wie komm ich an die Kamera position?
		GLU.gluUnProject(winX, winY, 0, modelview, projection, viewport, positionNear);
		GLU.gluUnProject(winX, winY, 1, modelview, projection, viewport, positionFar);
		
		Vector3f nearVec = new Vector3f(positionNear.get(0), positionNear.get(1), positionNear.get(2));
		Vector3f farVec = new Vector3f(positionFar.get(0), positionFar.get(1), positionFar.get(2));
		return new Ray(nearVec, Vector3f.sub(farVec, nearVec, null).normalise(null));

Bleibt also die Frage:
wie an die Koordinaten der Kamera kommen?
Und stimmt meine vermutung zu den Koordinaten der Maus?

Danke für eure Hilfe.
Gruß,
David
 

Hestalon

Mitglied
Hi,

der meiner Meinung nach wichtigste Punkt ist es zu wissen in welchen "Raum"/"Space" wie auch immer man sich befindet.
Beispielsweise befinden sich die Mauskoordinaten im Screenspace. Linke obere Ecke (0,0) rechts unten (1024,768).

projection.jpg


Anhand von dem Bild könnte man es erläutern. Dein Bild auf dem Bildschirm ist die "near clipping lane".
Somit bin ich den Weg gegangen mir einen Vector zu erstellen vom Mittelpunkt der near cliplane zur aktuellen Mausposition (teilen und abziehen der Hälfte der Auflösung).
Anschließen die Größe der near cliplane im Worldspace (3D-Umwelt mit allen Objekten deiner Szene) berechnen (Tangens).

Von der Camera sollten Richtungs-,Up- und Left-Vektor bekannt sein (muss iwo schonmal in die Projektionsmatrix gesteckt worden sein). Denn diese Vektoren müssen skaliert werden.
Richtung: auf near cliplane entfernung
Left: X-Richtung der Maus
Up: Y-Richtung der Maus
Zuletzt werden diese Aufaddiert und du hast den Vektor den du beliebig skalieren kannst.

Bsp: Kamerapos + scale * Vek = TestPos.
___________________________________

Das was ich hier beschrieben habe, eventuell unverständlich, sollte machbar sein.
Es kann natürlich sein, dass das kopierte Beispiel schneller/besser ist, weil es OpenGL selbst macht über die Matrizen, jedoch ist das genau der Punkt, dass du es nicht verstehst.
Dein 2. Kommentar ist das beste Beispiel dafür: "irgendwelche matrizen" => google Rotationsmatrizen Projektionsmatrizen etc
z.b. Projectionmatrix



Aber deine Vermutung selbst stimmt ja, anstatt der Mitte des Bildschirms die Mauskoordinaten übergeben und sollte gehn.
Und die Position der Kamera musst! du zuvor schon angegeben haben.

Gruß
 

Rubber

Aktives Mitglied
Hi,
danke für deinen Beitrag.
So langsam ergibt alles einen Sinn *g

Auch das mit den Matrizen hab ich so langsam verstanden.

Und gerade auch dein schönes Bild und die Ausführungen geben mir ein weiteres verständnis.

Vielen Dank!
 

Hestalon

Mitglied
Hast du es denn hinbekommen ?
Denn das "schöne" bei solchen Dingen, besonders bei Shadern, ist dass man wissen muss was man tut sonst passiert entweder gar nichts, Fehler oder Magic dass es doch geht ;D
 

Rubber

Aktives Mitglied
Hi,
hab heute Nacht was funktionierendes hinbekommen.

Das Tutorial unter OpenGL Picking in 3D hat mir dabei auch gut weiter geholfen.
Und als dann von dir noch der Zusammenhang Projektionsmatrix und Camera-Vektoren kam, hab ich dann acuh raus gefunden, wie ich dort die Vektoren wieder auslesen kann.

Inzwischen dürfte es bei mir also eine Mischung aus "Magic" und wissen sein ;)
Aber es klappt.

*freu*
 
Ähnliche Java Themen
  Titel Forum Antworten Datum
C LWJGL Color Picking Textures deaktivieren Spiele- und Multimedia-Programmierung 0
J LWJGL 3D Picking Identifizierung Spiele- und Multimedia-Programmierung 11
coolian lwjgl glfw window zeigt nur grau an Spiele- und Multimedia-Programmierung 0
coolian slick lwjgl text darstellen mit UnicodeFont funktoniert nicht? Spiele- und Multimedia-Programmierung 11
F OpenGL (LWJGL) Shader Programmierung GLSL Spiele- und Multimedia-Programmierung 2
Meeresgott LWJGL 3 Problem mit einer Texture Spiele- und Multimedia-Programmierung 4
V LWJGL GUI Spiele- und Multimedia-Programmierung 1
V GUI in LWJGL 2 erstellen Spiele- und Multimedia-Programmierung 6
C GLSL Shaderprogrammierung in LWJGL 3 Spiele- und Multimedia-Programmierung 12
G Low Poly 3D LWJGL Shader Problem Spiele- und Multimedia-Programmierung 4
B LWJGL OpenGL SIGSEGV auf Linux (Verzweiflung :/) Spiele- und Multimedia-Programmierung 8
G LWJGL .obj .mtl loader Spiele- und Multimedia-Programmierung 3
G 2D animationen LWJGL Spiele- und Multimedia-Programmierung 0
pcfreak9000 "Allgemeine" Performance verbessern (LWJGL 2) Spiele- und Multimedia-Programmierung 2
G LWJGL Rendert nicht Spiele- und Multimedia-Programmierung 3
G lwjgl verwendung Spiele- und Multimedia-Programmierung 6
R [LWJGL] Skeletal Animation Spiele- und Multimedia-Programmierung 5
E LWJGL glGenVertexArrays() erzeugt doppelte IDs Spiele- und Multimedia-Programmierung 3
G Java 2D Spiel mit LWJGL verbinden Spiele- und Multimedia-Programmierung 1
Streeber Problem mit Transparenz/TextDrawing in LWJGL/Slick2d (OpenGL) Spiele- und Multimedia-Programmierung 1
K No Lwjgl Spiele- und Multimedia-Programmierung 2
T LWJGL 2.9.2: Seltsamer Effekt beim Rendern (VertexShader Problem?) Spiele- und Multimedia-Programmierung 3
T LWJGL: Terrain-Texturen / 2D-Array in Shader? Spiele- und Multimedia-Programmierung 2
S 2D-Render Probleme LWJGL 2 (Java) Spiele- und Multimedia-Programmierung 1
P java lwjgl Game Spiele- und Multimedia-Programmierung 0
T [LWJGL] Textur / File wieder freigeben Spiele- und Multimedia-Programmierung 4
F [LWJGL] Skeletal Animation 3D Spiele- und Multimedia-Programmierung 1
C Generelle Hilfe zur lwjgl Spiele- und Multimedia-Programmierung 0
D LWJGL gluLookAt "Umschauen" Problem Spiele- und Multimedia-Programmierung 0
D Problem mit Würfelanimierung in LWJGL Spiele- und Multimedia-Programmierung 7
RalleYTN LWJGL Vignette Spiele- und Multimedia-Programmierung 2
E LWJGL Switchen zwischen gluOrtho und gluPerspective Spiele- und Multimedia-Programmierung 0
RalleYTN LWJGL Rotation Spiele- und Multimedia-Programmierung 1
K FBO Framebuffer object [LWJGL] 2D tutorial gesucht Spiele- und Multimedia-Programmierung 2
K [LWJGL] 2D Tunneler Hintergrund Spiele- und Multimedia-Programmierung 7
S LWJGL 3d-spieleentwicklung Spiele- und Multimedia-Programmierung 3
H LWJGL-Renderfail Spiele- und Multimedia-Programmierung 1
Seikuassi LWJGL - Texturen flackern Spiele- und Multimedia-Programmierung 2
Androbin LWJGL - Kollisions-Bug (Fallen) Spiele- und Multimedia-Programmierung 14
K Schiessen in 2D (LWJGL) Spiele- und Multimedia-Programmierung 2
S LWJGL Kamera Problem - Alles verzerrt Spiele- und Multimedia-Programmierung 4
U Kann nur ein Objekt mit LWJGL rendern Spiele- und Multimedia-Programmierung 2
X LWJGL | Parent.isDisplayable() must be true | wie kann man das zu true machen? Spiele- und Multimedia-Programmierung 0
X [LWJGL] Binden von Texturen per PNG File und Texture Sheet Spiele- und Multimedia-Programmierung 1
X LWJGL - Anklick baren Button erstellen aber wie? Spiele- und Multimedia-Programmierung 6
U Quadrate anklicken LWJGL Spiele- und Multimedia-Programmierung 3
B LWJGL / OPENGL Kriege Depth-Test nicht hin :( Spiele- und Multimedia-Programmierung 0
B LWJGL Manche Seiten werden transparent angezeigt Spiele- und Multimedia-Programmierung 2
T LWJGL VBO's funktionieren nicht, geben aber auch keinen Fehler Spiele- und Multimedia-Programmierung 0
U Komische fragmente bei LWJGL Spiele- und Multimedia-Programmierung 6
B LWJGL StackOverFlow Problem nach 30sekunden. (Pong) Spiele- und Multimedia-Programmierung 2
Q LWJGL - Alpha-Probleme Spiele- und Multimedia-Programmierung 2
S [LWJGL] Zweimal selbe Textur trotz unterschiedlicher IDs Spiele- und Multimedia-Programmierung 3
O LWJGL AWTGLCanvas Tiefe auf 1 beschränkt Spiele- und Multimedia-Programmierung 5
Seikuassi LWJGL-Problem Spiele- und Multimedia-Programmierung 2
S [LWJGL] schwarzer Bildschrim beim rendern von .obj Model Spiele- und Multimedia-Programmierung 2
S [lwjgl] Renderbug bei mehreren Objekten Spiele- und Multimedia-Programmierung 2
R LWJGL: OpenGL Fehler - weitere Informationen auslesen möglich? Spiele- und Multimedia-Programmierung 2
S LWJGL Kamera Koordinaten invertiert. Spiele- und Multimedia-Programmierung 2
M LWJGL Text rendern Spiele- und Multimedia-Programmierung 3
B LWJGL Mauskoordinaten Spiele- und Multimedia-Programmierung 1
J LWJGL Update Schleife (Snake) Spiele- und Multimedia-Programmierung 6
B LWJGL Display.update() ist langsam Spiele- und Multimedia-Programmierung 5
R LWJGL: Performance glBegin, drawList, ... Spiele- und Multimedia-Programmierung 16
R LWJGL: Object Loader -> .obj, .c4d, ... laden Spiele- und Multimedia-Programmierung 3
R LWJGL: Textur -> unsichtbare Stellen, wie erzeugen? Spiele- und Multimedia-Programmierung 4
A LwJGL - Animation Stockt Spiele- und Multimedia-Programmierung 5
R [lwjgl] Cursor -> versetzt Zeichnen / Bild ist umgedreht Spiele- und Multimedia-Programmierung 2
F LWJGL: Textur ändern mit GL11.readPixels Spiele- und Multimedia-Programmierung 5
F LWJGL: Licht und GL_LINES funktioniert nicht Spiele- und Multimedia-Programmierung 6
A [LWJGL] BMP Textur wird nicht richtig dargestellt Spiele- und Multimedia-Programmierung 8
S LWJGL Rechteck wird nicht gezeichnet Spiele- und Multimedia-Programmierung 6
F LWJGL: Is undefined? Spiele- und Multimedia-Programmierung 7
F LWJGL Kamerabug Spiele- und Multimedia-Programmierung 2
F LWJGL Problem mit Erstellen eines Objekts und der Kamera Spiele- und Multimedia-Programmierung 5
F LWJGL Dreidimensionaler Würfel Spiele- und Multimedia-Programmierung 15
P LWJGL oder OpenGL (C++) Spiele- und Multimedia-Programmierung 7
P "Tiefe" in Objekten - LWJGL Spiele- und Multimedia-Programmierung 12
T LWJGL 3D Objekt Collision: Wie? Spiele- und Multimedia-Programmierung 11
S LWJGL Kamera Frage Spiele- und Multimedia-Programmierung 2
V Komischer Fehler in LWJGL Spiele- und Multimedia-Programmierung 18
Z lwjgl oder jogl nutzen Spiele- und Multimedia-Programmierung 9
Y LWJGL Hintergrund Spiele- und Multimedia-Programmierung 7
Creylon [LWJGL] Textur wird falsch angezeigt Spiele- und Multimedia-Programmierung 12
Creylon [LWJGL] Spiel Exportieren Spiele- und Multimedia-Programmierung 2
Creylon [LWJGL] 2D Sprite Rotieren/Drehen Spiele- und Multimedia-Programmierung 6
CookieSoft LWJGL Ubuntu 12.04 Fehler Spiele- und Multimedia-Programmierung 7
E [LWJGL] Karusell, mehrere Objekte drehen sich um einen Mittelpunkt Spiele- und Multimedia-Programmierung 31
F lwjgl - Skysphere Spiele- und Multimedia-Programmierung 3
CookieSoft Slick und LWJGL Texture lag Spiele- und Multimedia-Programmierung 13
U OpenGl 1.1 (LWJGL GL11.*) und weiter? Spiele- und Multimedia-Programmierung 7
0 Grafikfehler LWJGL Spiele- und Multimedia-Programmierung 2
A LWJGL 3D Objekte Kollision Spiele- und Multimedia-Programmierung 3
Luk10 (LWJGL) Aufwendiges Animieren von Texturen Spiele- und Multimedia-Programmierung 16
S (LWJGL) VertexBufferObjects Spiele- und Multimedia-Programmierung 20
T LWJGL Grafik meines Projektes läuft nicht korrekt auf meinem iMac Spiele- und Multimedia-Programmierung 19
B LWJGL/OpenGL rendert manche Objekte nicht Spiele- und Multimedia-Programmierung 6
H LWJGL: Fragen zum Verständnis Spiele- und Multimedia-Programmierung 7
T LWJGL Gui erstellen Spiele- und Multimedia-Programmierung 7
Kenan89 lwjgl Exception Spiele- und Multimedia-Programmierung 3

Ähnliche Java Themen

Neue Themen


Oben