PDA

View Full Version : [PROBLEM] - Objekt erscheint nicht im Fenster


grassi3000
15-11-2004, 22:18
Also ich habe folgendes Problem:
Wenn ich ein objekt (zb bee) adde, dann befindet es sich nicht im aktuellen Fenster. Wenn ich mich allerdings im Fenster mit der Maus nach oben Bewege, so ist es dann ganz normal (ich denke auch in normaler Größe) vorhanden.

Weiß einer, wie ich dieses Problem lösen kann, dass die objekte gleich im ViewPort erscheinen?

mfg
g3k

Matthias
15-11-2004, 22:24
Also ich habe folgendes Problem:
Wenn ich ein objekt (zb bee) adde, dann befindet es sich nicht im aktuellen Fenster. Wenn ich mich allerdings im Fenster mit der Maus nach oben Bewege, so ist es dann ganz normal (ich denke auch in normaler Größe) vorhanden.

Weiß einer, wie ich dieses Problem lösen kann, dass die objekte gleich im ViewPort erscheinen?

mfg
g3k

Bringst du die Koordinaten in getDeviceCoordinates auf die richtigen Werte? Die y-Achse musst du z.B. umdrehen (im Canvas geht die Achse nach unten, im View- oder auch Weltkoordinatensystem nach unten). Lass dir die Werte mal ausgeben.

8-Bit
15-11-2004, 23:03
Ich möcht mich gleich mit einer frage anhängen: wie mach ich das, dass die kamera immer den Mittelpunkt des Modells anvisiert?

grassi3000
15-11-2004, 23:04
Also die y Achse invertiere ich am Schluss der ganzen berechnungen in der von dir genannten Methode ...
Ich weiß echt nimma, was da falsch sein kann ... hab schon alles durchgedacht ...

cypher
15-11-2004, 23:22
Also die y Achse invertiere ich am Schluss der ganzen berechnungen in der von dir genannten Methode ...
Ich weiß echt nimma, was da falsch sein kann ... hab schon alles durchgedacht ...


nochmal zur wiederholung:
- die y-Achse in Java zeigt nach UNTEN (Ursprung ist also links oben)
- die y-Achse in unserem Koordinatensystem (wie auch in OpenGL) zeigt nach OBEN (Ursprung also links unten)

d.h. ihr müsst die y-Achse invertieren (was du ja auch korrekt gemacht hast). Danach mußt du aber auch noch den Ursprung nach links unten verschieben, weil wenn du den Ursprung links oben hast und deine y-Achse auch nach oben zeigt, dann liegen natürlich alle pos. Koordinaten ausserhalb des Bildschirms.

Ein Bsp: Du hast eine linie von (10,10) zu (50,50). Jetzt invertierst du die y-koordinate und bekommst dann eine linie von (10,-10) zu (50,-50). die linie liegt jetzt natürlich ausserhalb des bildschirms, weil dein ursprung immer noch links oben ist. Jetzt mußt du den ursprung noch nach links unten verschieben - bei z.B. 300x300 canvas size heißt das die y-koordinate +300 nehmen, jetzt kommst du auf Bildschirmkoordinaten von (10,290) zu (50,250).

Zumindest denke ich mal, dass das dein fehler ist ...

grassi3000
15-11-2004, 23:33
Mhm .... also muss ich die variablen in CG1Canvas (height und width) auch auf - setzen, oder wie?

oder einfach die y += getHeight(); am ende von getDeviceCoordinates machen? (vereinfacht geschrieben)

shebang
16-11-2004, 11:48
ich würd eher sagen y += getHeight()/2; weil der urprung ja in der mitte des canvas sein soll und nicht rechts unten

8-Bit
16-11-2004, 22:20
meine 2d modelle werden bei mir, wenn ich doOnlyWorldcoord anwähle nicht im bildmittelpunkt dargestellt, sondern ausserhalb des clipping fensters, ich muss immer erst rauszommen, damit es ins bild kommt... soll ich getDeviceCoordinates auch bei 2d files aufrufen?

Shodan
16-11-2004, 22:26
Ich tus auf jeden Fall (klingt irgendwie logisch, find ich, dass man das virtuelle Objekt auf den Canvas bringt.)
Allerdings sind die meisten 2D Objekte dann trotzdem ausserhalb des Fensters, da man ja den Bereich von -1 / +1 ins Fenster bringt.

white russian
16-11-2004, 22:31
In der Angabe steht eindeutig drinnen, dass bei 'doOnlyWorldTrans' die Methode getDeviceCoordinates nicht aufgerufen werden darf.

8-Bit
16-11-2004, 22:38
In der Angabe steht eindeutig drinnen, dass bei 'doOnlyWorldTrans' die Methode getDeviceCoordinates nicht aufgerufen werden darf.

ok, sorry, das hab ich jetzt echt übersehn...

Shodan
17-11-2004, 12:28
oops. me too. ;-)

cypher
17-11-2004, 22:24
ich würd eher sagen y += getHeight()/2; weil der urprung ja in der mitte des canvas sein soll und nicht rechts unten

mea culpa, natürlich muss bei der projektion der ursprung in die bildschirmmitte. Also wie schon richtig bemerkt, muss y natürlich nur um getHeight()/2 erhöht werden, damit 0 genau in die Mitte kommt.

Shodan
18-11-2004, 00:16
naja, die skalierung darf man aber nicht vergessen...