J3D Neuling: Crosshair erzeugen und anzeigen!

Status
Nicht offen für weitere Antworten.

Dud

Mitglied
Hallo Liebe Community!

Ich bin relativ neu in Java (und Java3D). Habe seit über einem Jahr im Zuge meiner Ausbildung mit C++ gearbeitet, und
schreibe grade an einer 3D Visualisierung in Java!

Java3D ist schon toll, dass muss ich zugeben! Hätte ich mir wesentlich schwieriger Vorgestellt, aber habe schon sowas wie einen "Raum" mit ein paar Würfeln erzeugt, zusätzlich ein Behavior eingebaut. Kann jetzt also mit den Cursortasten rein/rauszoomen (bzw Laufen) und mit der Kamera nach oben, unten und zur Seite schwenken! Macht riesen Spaß! :)

Nun bräuchte ich aber Eure Hilfe bei einer Sache, die mir überhaupt nicht in den Kopf gehen will: Ein Crosshair! Dieses Crosshair soll sich in der Bildmitte befinden und wie das halt bei einem Crosshair üblich ist, mit der Kamera "mitgehen" (wie bei einem Ego-Shooter quasi).
Bevor ich dafür ein Image benutze, habe ich mir gedacht, dass ich einfach eine kleine, flache Box zeichne. Ich bekomm es aber überhaupt nicht gebacken, dass diese Box mit der Kamera mitgeht.
Ich hoffe ich hab mich jetzt irgendwie halbwegs klar ausgedrückt, bin wie gesagt noch relaitv neu!
Habe sowohl die Suchfunktion als auch google bemüht, aber selbst google ist bei dem Thema nicht sehr ergiebig (ab seite 8 abgebrochen). Würd mich über ein paar kleine Denkanstöße sehr freuen!

Vielen Dank schonmal im Vorraus!

MFG,
Dud
 

muckelzwerg

Bekanntes Mitglied
Solche Dinge sollte man grundsätzlich mit Overlays machen.
Ich hab nur wenig Erfahrung mit Java3D, kann Dir deshalb keinen konkreten Ansatz bieten.
Du solltest alle solche Avatareigenschaften (Healthpoints, Inventory, etc.) einfach über die Szene drüberlegen.
Zum einen weil es fast nie Sinn macht, solche Elemen in die Szenenberechnung mit einzubeziehen,
zum anderen, weil sich ein Overlaysystem besser managen lässt.
Du musst die verschiedenen Elemente zusammensetzen und dann über die Szene drübermalen.
Ich schätze mal in J3D wirst Du dafür in ein Bild rendern, und dass dann auf die Szene auflegen.

-- -- muckelzwerg
 

Dud

Mitglied
Huhu und danke für deine Antwort!

Ja das macht natürlich Sinn, soetwas über die Szene zu malen!
Hm da fehlt mir ja jetzt nur noch die Technisch Umsetzung! Ich weiss einfach noch nicht genau, wo im Code ich da ansetzen muss, und welche Klasse ich dafür benutzen soll.
 

Jacer

Neues Mitglied
Hi Dud,

ich hab ein ähnliches Problem, allerdings mit meiner Benutzeroberfläche ;)

Das Problem:
2D-Komponenten über ein 3D-Bild malen

Die Lösung:
Ganz weit hinten im Forum hats Illuvatar rausgefunden, und es funktioniert tatsächlich auch.
1. Schritt: Leite Dir eine eigene Klasse von Canvas3D ab, die Du statt dem Canvas3D benutzt.
2. Schritt: Überschreibe die Methode "postRender()" und hol Dir da das J3DGraphics2D-Objekt. Mit dem Objekt kannst Du dann malen, aber vorsicht! das kann nicht soviel wie das normale Graphics2D-Objekt (siehe Java3D docs).
Das Ganze sieht dann so aus:
Code:
import java.awt.*;
import javax.media.j3d.Canvas3D;
import javax.media.j3d.J3DGraphics2D;

public class MyCanvas3D extends Canvas3D {

	public MyCanvas3D(GraphicsConfiguration arg0) {
		super(arg0);
	}

	public void postRender() {
		super.postRender();
		J3DGraphics2D g2 = super.getGraphics2D();
		
		// hier dann nach Herzenslust malen
                // abschließend noch flush(boolean) rufen, sonst passiert nix
                // ob true oder false, weiß ich nicht, funktioniert mit beidem
		g2.flush(false);	
	}
}

Gruss,
Jacer
 
Status
Nicht offen für weitere Antworten.

Ähnliche Java Themen

Neue Themen


Oben