# J3D Neuling: Crosshair erzeugen und anzeigen!



## Dud (15. Aug 2006)

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 (15. Aug 2006)

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 (15. Aug 2006)

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 (15. Aug 2006)

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:

```
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


----------



## Dud (17. Aug 2006)

Huhu!

Das war der Bringer schlechthin 
Es hat tatsache funktioniert!

Danke dir vielmals


----------



## Illuvatar (17. Aug 2006)

Wenn der Parameter true ist, blockiert die Methode, bis wirklich gezeichnet wurde


----------

