Sie sind nicht angemeldet.

MAX

Senior Schreiberling

  • »MAX« ist männlich
  • »MAX« ist der Autor dieses Themas

Beiträge: 822

Registrierungsdatum: 11.12.2001

Wohnort: Hannover

1

03.06.2003, 21:08

GDVI Vert.Kurs Aufgabe 3

Hallo!!!
Ich bin gerade mit der Aufgabe 3.1 beschäftigt und in meinen Kopf will überhaupt nicht reingehen, wie ich die Weltkoordinaten in Sichtkoordinaten überführen soll.
Ich habe alles soweit darüber im Skript gelesen. Man braucht also die Matrix Tview, die wiederum Matrizen T und B und die wiederum die Vektoren U,V,N und C benötigen. Daher meine Frage. Wie soll ich diese Vektoren wählen um dann korrekte Darstellung zu bekommen? Bisher habe ich die Vektoren so gewählt:
U = (1, 0, 0)
V = (0, 1, 0)
N = U x V oder N = (0, 0, 1)
C = (- get_width() / 2, - get_height() / 2, -1000)

Aus U, V und N habe ich die Matrix B gebildet und mit C habe ich die Matrix T erzeugt. Alles so wie im Skript steht. Dann wollte ich zumindestens cube Darstellen, aber die Koordinaten wurden auf solche Vektoren abgebildet, wie z.B.: (25.5, 25, ...); (25, 25, ...); (25, 25.5, ...), die Dtritte Koordinate ist jetzt unwichtig.
Was mache ich falsch??? Irgendwelche Tipps???
mfg
MAX

dfex

Junior Schreiberling

  • »dfex« ist männlich

Beiträge: 248

Registrierungsdatum: 11.12.2001

2

03.06.2003, 23:33

Hi!

Kurze Anmerkung: Dein C ist nicht so geschickt gewählt. Es könnte durchaus sein, das du an der Scene vorbeiguckst (Zumindest bei der Kuh). Sinnvoller wäre, wenn du anstatt get_width/2 und get_height/2, die Hälfte der Länge bzw. Höhe der Boundingbox benutzt. So weisst du halt, dass du wirklich auf die Scene guckst.

Aber ansonsten sieht es nicht schlecht aus. Deine transformierten Koordinaten ergeben doch im 2D einen Würfel.
Vielleicht sagst du nochmal kurz, was du jetzt noch machen willst? Falls es da schon steht, hab ich gerade ein Brett vorm Kopf ;)


cu, mb

MAX

Senior Schreiberling

  • »MAX« ist männlich
  • »MAX« ist der Autor dieses Themas

Beiträge: 822

Registrierungsdatum: 11.12.2001

Wohnort: Hannover

3

04.06.2003, 19:22

Ok!
Das mit dem C Vektor leuchtet mir ein. Das Problem bleibt aber bei mir bestehen, insofern, dass einige Koordinaten negativ abgebildet werden und aus diesem Grund nicht angezeigt werden können.
Also, was ich mache ist folgendes:
Bilde den Vector C, so wie oben steht und letzte Koordinate setze auf bbox.getMin()[2]. Bilde daraus die Translationsmatrix, wie im Skript steht. Dann bilde ich aus den Vektoren U, V, N die inverse Matrix zu B. Dann transformiere ich sie und erhalte somit die Matrix B. Dann berechne ich die Matrix Tview. Dann multipliziere ich jeden Vektor mit dieser Matrix und erhalte somit die Sichtkoordinaten. Dann mache ich Parallelprojektion, in dem ich x, y Koordinaten mit get_width() und get_hight() multipliziere, runde und auf int kaste. Dann wird der Punkt gezeichnet.
Ja aber einige Koordinaten sind negativ. Was nun? Wo liegt der Fehler?
mfg
MAX

dfex

Junior Schreiberling

  • »dfex« ist männlich

Beiträge: 248

Registrierungsdatum: 11.12.2001

4

04.06.2003, 20:45

Das Problem ist, dass die Janus Modelle tatsächlich negative Punkte besitzen. Denn z.B. die Kuh liegt um den "echten" Nullpunkt (kannst du sehen, in dem du dir mal die BBox anguckst).
Allerdings hat das Canvas Koordinatensystem nur positive Werte. Du kannst also nur x,y>0 zeichnen. Dazu verschiebst du am besten (zu Anzeigezwecken) die Boundingbox so, dass sie im positiven Bereich liegt. Dann kannst du die 2D koordinaten einfach zeichnen. An welcher Stelle du die BBox verschiebst, ist dabei dir überlassen. Es besteht die Möglichkeit nach dem Einlesen _alle_ Punkte zu verschieben, oder während des drawCallback() jeden einzelnen.
Ich habe mich für die Version bein drawCallback entschieden, weil ich noch nicht genau weiss, wie das später mit dem GLCanvas läuft.

MAX

Senior Schreiberling

  • »MAX« ist männlich
  • »MAX« ist der Autor dieses Themas

Beiträge: 822

Registrierungsdatum: 11.12.2001

Wohnort: Hannover

5

15.06.2003, 22:58

Ok, neue Frage: Aufgabe 3.3

Zentrieren mit der Bounding Box!
Ich habe wieder ein kleines Problem mit dieser Aufgabe und zwar:
Ich kann die Szene nicht zentrieren. Ich tue folgendes
konstX = (get_width() - (bboxVecMax[0] - bboxVecMin[0])) / 2;
konstY = (get_height() - (bboxVecMax[1] - bboxVecMin[1])) / 2;
Dann beim Zeichnen der Punkte addiere ich diese Konstanten einfach drauf. Die Szene verschiebt sich, aber nicht richtig. Was mache ich dabei falsch?
mfg
MAX

dfex

Junior Schreiberling

  • »dfex« ist männlich

Beiträge: 248

Registrierungsdatum: 11.12.2001

6

15.06.2003, 23:14

So wie ich das gerade sehe, versuchst du die Scene im 2D zu zentrieren. Allerdings beruht das Zentrieren der Scene auf der geschickten Neuwahl von C.
Du musst einfach C so wählen, dass du auf die komplette Scene blicken kannst.

Dieser Beitrag wurde bereits 1 mal editiert, zuletzt von »dfex« (15.06.2003, 23:15)


MAX

Senior Schreiberling

  • »MAX« ist männlich
  • »MAX« ist der Autor dieses Themas

Beiträge: 822

Registrierungsdatum: 11.12.2001

Wohnort: Hannover

7

15.06.2003, 23:37

hmm

Ich habe keine Ahnung, was du meinst! Vielleicht könntest du an einem beispiel erklären!
mfg
MAX