# Box: Koordinaten, Ausdehnung, Platzierung



## Florianer (12. Nov 2007)

Hi,

also, das mag jetzt vielleicht richtig komisch klingen, aber ich hab grad ein riesen Verständnisproblem, was wohl die einfachste der Grundprimitiven angeht.

Bei all den Annahmen und Aussagen, berichtigt mich bitte sofort, wenn eine (und sei sie noch so unscheinbar) net stimmt:
Weltkoordinatensystem: Rechtshändig, also x läuft nach rechts weg, y nach oben und z kommt auf mich zu. 
Lokales Koordinatensystem einer Box: Rechtshändig, Ursprung liegt in der Mitte der Box, d.h. genau im Zentrum, was eine halbe Kantenlänge für jede der 3 Achsen bedeutet.
Ausmaße der Box: 
	
	
	
	





```
Box box = new Box( weight, height, depth, Box.GENERATE_NORMALS, null);
```



> Box
> 
> public Box(float xdim,
> float ydim,
> ...



Die Box bekommt die doppelte Breite, da sich der Wert der Breite einmal auf die positive und einmal auf die negative Achse auswirkt.


So, da kann doch irgendwas net so ganz stimmen. Ich habe mir eine Box erstellt, die 8, 3.5f, 8 Einheiten groß ist. Zumindest bilde ich mir ein, dass sie so groß sein soll. Tatsächlich macht es aber den Anschein, dass diese Box nun von ihrem lokalen Ursprung einmach 8 Einheiten nach +x und dann nochmal 8 Einheiten nach -x gewachsen ist. y/z analog. Muss ich jetzt meine Werte erst mal halbieren, um eine Box gegebener Größe richtig erstellen zu können?! 

Außerdem: Macht es Sinn, dass der Ursprung im Zentrum liegt? Macht das jeder so? Meine Vorstellung wäre eigentlich gewesen, aber ich könnte sie auch anpassen, wenn mir jeder sagt, dass ich hiermit falsch liege, dass einer der 8 Punkte der Box auf 0|0|0 liegt. Von diesem Startpunkt aus, wächst die Box sozusagen um 8, 3.5f, 8. Somit sollte also der (z läuft auf mich ja zu) hintere, untere, linke Punkt P0 auf (0|0|0) liegen, der vordere, untere, linke Punkt P1 auf (0|0|8), der vordere, untere, rechte Punkt P2 auf (8|0|8) und der hintere, untere, rechte Punkt P3 auf (8|0|0) liegen. Der hintere, obere, linke Punkt P4 auf (0|3.5|0) und die weiteren Punkte entsprechend ihrer unteren Partner auf den gleichen x/z Koordinaten, einfach um y verschoben liegen. 

So hat man doch auch in der Schule einen gegebenen Würfel in den R³ gelegt, oder etwa nicht? Bei ner Sphere würde ich sogar so weit gehen und behaupten, ich erzeuge mir eine BoundingBox mit den Ausmaßen von r der Kugel und platziere die Kugel dann so mittig in die BoundingBox, die BB wiederum hat auch wieder den P0 auf (0|0|0). Ich habe die bisher 25 Seiten Java 3D Topics alle angeschaut und bei wohl mindestens 20 auch rein geschaut... aber das hat noch keiner gebracht. Hab ich nun was grundlegendes falsch gemacht, ist das noch niemandem aufgefallen oder weiß jeder, dass das halt im Zentrum liegt und weiß, dass das so richtig oder gegeben ist und fertig? 

Ich hab versucht, einen Fehler in meinem Code zu finden, aber denke, dass der noch relativ einfach ist und da hab ich auch keinen Fallstrick erkennen können. Ich hab mir dann, um sicher zu gehn, ein Raster erzeugt, dass 3D durch meine Szene läuft. Und da ist es genauso... da immer 2 der 3 Achsen fast 0 sind, schneiden die Linien da, wo ich vermuten würde. Die letzte Achse jedoch dimensioniert die Länge der Gitterlinie... gebe ich eine Länge von 10 an, bekomm ich aber 20... 

Ich mach jetzt einen Memory-Reset meines Hirns und nehm die gegebenen Antworten als richtig auf  ???:L 
OK, ganz so net... aber mich würden hierzu brennend andere Meinungen interessieren und wie ihr die Welt seht!


----------



## Illuvatar (12. Nov 2007)

Das ist mir noch nie aufgefallen... aber auch aus der API kriege ich das Gefühl, dass deine Beobachtung stimmt, nämlich dass eine Box (8, ..., ...) tatsächlich 16 Einheiten breit ist.



> By default, it lies within the bounding box, [-1,-1,-1] and [1,1,1].





> public Box()
> Constructs a default box of 1.0 in all dimensions.


----------



## Marco13 (12. Nov 2007)

Hm - was daran nun so niederschmetternd ist!? (Ich weiß nicht, ob die angegebenen lägen immer in BEIDE richtungen genommen werden, aber) was ist den so schlimm am bschriebenen Verhalten? Dass z.B. eine Einheitsbox nicht mit
new Box(1,1,1) 
erzeugt wird, sondern indem man eine 
new Box(0.5, 0.5f, 0.5)
um (0.5, 0.5f, 0.5) verschiebt ist doch nur ein Detail !?...


----------



## Florianer (14. Nov 2007)

naja, so schlimm daran ist, dass wenn ich kein Gitter rein gelegt hätte, ich immer noch denken würde, dass ich für ne einfache Addition zu doof wäre, da ich irgendwie so verschoben hatte, dass auf einmal die Objekte in einander und nicht neben einander waren. Außerdem ist es übel, wenn man ein Objekt erzeugt und davon ausgeht, dass die übergebenen Kantenlängen Kantenlängen (z. B.) in Meter sind und man sich irgendwann wunder muss, dass Zeichnung/Plan und Modellierung nicht übereinstimmen... 

Klar, ich hab jetzt Größe beim Erstellen und Translation angepasst... nur, dass es nötig ist, versteh ich nicht! Die Umsetzung der API, was (bis jetzt erst einmal) die Box angeht, widerstrebt so gar meinen bisherigen Vorstellungen - mehr wohl nicht. Meine Erwartungshaltung war halt eine andere und ich wollte wissen, ob ich mit meiner Beobachtung recht habe oder irgendwo nen blöden Fehler gemacht hab, dass z. B. die Kantenlänge verdoppelt wird... 

aber keine Angst, ich hab noch ne Menge anderer Fragen - die werden vllt mit fortschreitender Zeit auch schwieriger, wenn ich mehr Ahnung von Java 3D habe


----------

