Hey, spiele seit heute etwas mit 3D herum, und es gibt zig Tutorials für diesen Zweck, und ich hab mir auch ein denk ich
sehr gutes geschnappt. Es tut sich auch was, aber ich kann's nicht richtig kontrollieren, weil ich nicht alles komplett
verstehe. Ich sag einfach mal, was ich tue, und was ich mir dabei denke:
1) ich erstelle einen 3*3*3 Würfel, wobei ich für die 27 Blöcke jeweils acht 3d-punkte habe, wobei -inf < z <= 0.
D.h. die oberste Ebene des Würfels liegt bei z = 0. Dass z in den negativen Bereich geht, liegt daran dass mein
Tutorial sagt, es ist leichter so. Der Beobachter hockt an Stelle (0,0,0) und kuckt in den negativen z-Achsen Bereich, wo
eben die Objekte liegen.
2) Umwandeln tu ich die 3d-punkte dann so:
wobei "d" ein float-wert ist, der die Distanz zwischen dem Beobachter (nochmal: 0,0,0) und der View-Ebene ist, auf die diese Punkte projiziert werden. Hier kommt der der mir etwas ungreifbare Teil:
Ich setze die Distanz anfangs auf folgenden Wert:
wobei xDim bei mir jetzt die Breite meines Fensters ist, und "angle" hab ich so gesetzt:
Im Tutorial steht, man nimmt halt für den Blickwinkel so Werte wie 60,75,90, und ich soll doch einfach mal 75 nehmen.
Ich verstehe das nicht ganz, 75 Grad zu was? Wenn mein Fenster zB 200*200 px gross ist, dann kommt bei distance
der Wert 130 heraus. Ich kann damit nix anfangen, wieso 130? Wie hängt das mit dem Winkel zusammen?
Und wo sag ich denn eigentlich, dass ich jetz von Position (0,0,0) auf das alles schaue? Weil das tu ich nirgends,
das Ding ist mein Würfel wird gezeichnet, aber z.T. "hinter" mir, ich seh nur die tiefere Hälfte. Ich hab ein wenig
mit z herumgespielt und es sind die verwirrendsten Dinge herausgekommen.
Also...das Mapping von 3d zu 2d an sich versteh ich schon, aber ich verstehe nicht wie ich genau festlege, wo
der Beobachter ist, und was überhaupt der Blickwinkel genau aussagt, und wie daraus genau diese distance zu Stande kommt.
Danke!
sehr gutes geschnappt. Es tut sich auch was, aber ich kann's nicht richtig kontrollieren, weil ich nicht alles komplett
verstehe. Ich sag einfach mal, was ich tue, und was ich mir dabei denke:
1) ich erstelle einen 3*3*3 Würfel, wobei ich für die 27 Blöcke jeweils acht 3d-punkte habe, wobei -inf < z <= 0.
D.h. die oberste Ebene des Würfels liegt bei z = 0. Dass z in den negativen Bereich geht, liegt daran dass mein
Tutorial sagt, es ist leichter so. Der Beobachter hockt an Stelle (0,0,0) und kuckt in den negativen z-Achsen Bereich, wo
eben die Objekte liegen.
2) Umwandeln tu ich die 3d-punkte dann so:
Code:
return new Point((int) (d * x / -z), (int) (d * y / -z));
wobei "d" ein float-wert ist, der die Distanz zwischen dem Beobachter (nochmal: 0,0,0) und der View-Ebene ist, auf die diese Punkte projiziert werden. Hier kommt der der mir etwas ungreifbare Teil:
Ich setze die Distanz anfangs auf folgenden Wert:
Code:
distance = (xDim / 2) / (float) Math.tan(angle / 2);
wobei xDim bei mir jetzt die Breite meines Fensters ist, und "angle" hab ich so gesetzt:
Code:
angle = (float) Math.toRadians(75);
Im Tutorial steht, man nimmt halt für den Blickwinkel so Werte wie 60,75,90, und ich soll doch einfach mal 75 nehmen.
Ich verstehe das nicht ganz, 75 Grad zu was? Wenn mein Fenster zB 200*200 px gross ist, dann kommt bei distance
der Wert 130 heraus. Ich kann damit nix anfangen, wieso 130? Wie hängt das mit dem Winkel zusammen?
Und wo sag ich denn eigentlich, dass ich jetz von Position (0,0,0) auf das alles schaue? Weil das tu ich nirgends,
das Ding ist mein Würfel wird gezeichnet, aber z.T. "hinter" mir, ich seh nur die tiefere Hälfte. Ich hab ein wenig
mit z herumgespielt und es sind die verwirrendsten Dinge herausgekommen.
Also...das Mapping von 3d zu 2d an sich versteh ich schon, aber ich verstehe nicht wie ich genau festlege, wo
der Beobachter ist, und was überhaupt der Blickwinkel genau aussagt, und wie daraus genau diese distance zu Stande kommt.
Danke!