Du bist nicht angemeldet.

Stilllegung des Forums
Das Forum wurde am 05.06.2023 nach über 20 Jahren stillgelegt (weitere Informationen und ein kleiner Rückblick).
Registrierungen, Anmeldungen und Postings sind nicht mehr möglich. Öffentliche Inhalte sind weiterhin zugänglich.
Das Team von spieleprogrammierer.de bedankt sich bei der Community für die vielen schönen Jahre.
Wenn du eine deutschsprachige Spieleentwickler-Community suchst, schau doch mal im Discord und auf ZFX vorbei!

Werbeanzeige

1

08.02.2007, 18:31

Worauf beziehen sich die Koordinaten werte in opengl?

Moin,

ich habe ein wenig mit opengl herumgespielt allerdings verstehe ich nicht worauf sich die koordinaten beziehen...

Wie viele pixel sind 1.0 im koordinatensystem von opengl? Wenn ich das richtig verstehe bezieht sich das ganze ja immer relativ auf die größe des bildschirms damit es auf allen bildschirmen die gleichen proportionen besitzt. Allerdings erkenne ich nicht nach welchem maß das ganze definiert ist. Wenn ich ein dreick der breite und höhe 1.0 in die mitte zeichne ist es auf z ebene 0.1 so groß das ich die kannten nicht mehr sehe. Selbst wenn ich davon ausgehe das so ein dreieck auf z ebene 1.0 exakt den bildschirm ausfüllt fehlen dort die ecken! Worauf bezieht sich also die einheit des koordinaten system? Ich habe ziemlich lange gegoogelt aber nichts darüber gefunden.

Gruß, Prophet

dot

Supermoderator

Beiträge: 9 757

Wohnort: Graz

  • Private Nachricht senden

2

08.02.2007, 18:41

es ist eigentlich ganz einfach: das koordinatensystem hat keine einheit.
du kannst einfach sagen, dass 1 = 1m ist. dann musst du halt alles so aufbauen, dass das in den relationen stimmt (also z.b. ein männchen dann 1.8 hoch is und ein auto 2.0 breit etc.).

3

08.02.2007, 18:47

Das heißt wenn ich mir ein bezugssystem schaffen will muss is dazu glScale verwenden?

Aber wenn ich jetzt wirklich alles relativ auf dem bildschirm beziehen möchte wie finde ich den dann heraus wie ich skalieren muss damit die einheiten stimmen? Zum beispiel wenn ich möchte das auf z = 1.0 eine breite von 1.0 genau der bildschirmbreite entspricht?

EDIT: Sind die abstände von 0.0 bis 1.0 auf der x und y achse in relation zum bildschirm betrachtet gleich lang? Wenn man einen bildschirm betrachtet hat er ja querformat.

dot

Supermoderator

Beiträge: 9 757

Wohnort: Graz

  • Private Nachricht senden

4

08.02.2007, 18:50

Zitat

Das heißt wenn ich mir ein bezugssystem schaffen will muss is dazu glScale verwenden?


wofür denn?
es geht rein um die porportionen in der szene. mach alles 2.54 mal so groß und geh mit der kamera 2.54 mal so weit weg und du bekommst ein identisches bild oO

was genau willst du erreichen? wenn du pixel genau malen willst, dann verwende keine perspektivische projektion, sondern etwas dafür geeignetes (z.b. eine orthogonale projektion...), oder auch gleich transformierte vertices (falls es sowas in gibt in ogl).

5

08.02.2007, 18:58

Wenn ich nun ein objekt zeichnen will das aus dem bildschirm rand heraustritt und dann über den bildschirm wandert. Dann muss ich wissen ab wo der bildschirm endet. und wo er beginnt also welches maß auf den bildschirm zutrifft. Andererseite möchte ich das das objekt nicht in abhängigkeit der bildschirmgröße länger benötigt die andere seite zu erreichen. Das heißt ich muss wissen in wie viele einheiten der bildschirm unterteilt ist und wie ich diese einheiten anpasse.

Zitat

was genau willst du erreichen? wenn du pixel genau malen willst, dann verwende keine perspektivische projektion, sondern etwas dafür geeignetes (z.b. eine orthogonale projektion...), oder auch gleich transformierte vertices (falls es sowas in gibt in ogl).

Im moment ist das ganze zwar noch zweidimensional. Ich will ja nicht unbedingt pixel genau zeichnen ich muss halt nur wissen wie ich mir selbst eine einheit schaffe bei der ich genau weiß wo auf dem bildschirm sich das object befindet.

dot

Supermoderator

Beiträge: 9 757

Wohnort: Graz

  • Private Nachricht senden

6

08.02.2007, 19:02

Zitat von »"Prophet"«

Wenn ich nun ein objekt zeichnen will das aus dem bildschirm rand heraustritt und dann über den bildschirm wandert. Dann muss ich wissen ab wo der bildschirm endet. und wo er beginnt also welches maß auf den bildschirm zutrifft. Andererseite möchte ich das das objekt nicht in abhängigkeit der bildschirmgröße länger benötigt die andere seite zu erreichen. Das heißt ich muss wissen in wie viele einheiten der bildschirm unterteilt ist und wie ich diese einheiten anpasse.


du brauchst nichts anzupassen. wenn dein objekt sich mit 1 einheit pro sekunde von einem punkt zu einem anderen bewegt braucht es immer gleich lang.
1 ist immer gleich lang, egal auf welchem bildschrim, mit welcher auflösung, grafikkarte, welchem drucker oder welcher webcam ;)
deine punkte werden durch die transformationsmatritzen gejagt und befinden sich dann im sog clip space. da geht jede achse von -1..1. bis da ist alles totel unabhängig von der auflösung.
erst diese -1..1 koordinaten werden dann in pixelkoordinaten umgerechnet, wobei z.b. für die x koordinate -1 zu 0 und 1 zu BackBufferWidth wird.
der punkt 0,0 befindet sich dann also immer in der mitte des bildschirmes. egal ob der 320x200 oder 2048x2048 ist...

matthias

Alter Hase

Beiträge: 449

Wohnort: wipperfürth

  • Private Nachricht senden

7

08.02.2007, 19:08

sieh dir mal glFrustum() an.
"In those days spirits were brave, the stakes were high, men were REAL men, women were REAL women, and small furry creatures from Alpha Centauri were REAL small furry creatures from Aplha Centauri."

8

08.02.2007, 19:40

Ok, danke.

Zitat

sieh dir mal glFrustum() an.


Das Problem ist ja das wir in der schule zwar bereit vektorrechnung gemacht haben, allerdings nie matrizen machen werden. Das heißt ich kann mir darunter weder was vorstellen, noch damit rechnen, noch irgendeine matrix von opengl ändern. Was die reference zu den einzelnen funktionen sagt ist immer sehr auf mathematischen niveau. Es wird soweit ich es verstehe nie beschrieben was die funktion nun wirklich macht. Das heißt ich verstehe keinen einzigen rechenschritt der in der beschreibung von glFrustum gemacht wird.

Gibt es irgendein tutorial was das ganze gut erklärt?

matthias

Alter Hase

Beiträge: 449

Wohnort: wipperfürth

  • Private Nachricht senden

9

08.02.2007, 19:46

also berechnen brauchst du da nichts, du musst nur ein paar Werte übergeben:

(Link)
"In those days spirits were brave, the stakes were high, men were REAL men, women were REAL women, and small furry creatures from Alpha Centauri were REAL small furry creatures from Aplha Centauri."

10

08.02.2007, 20:00

Also wenn ich das bild richtig verstehe kann ich durch den entsprechenden near wert dafür sorgen das objekt an z = 0.0 sichtbar wird oder? Und far gibt an wie tief das bild sein kann? Das heißt wenn ich far = near setzte habe ich ein zweidimensionales bild kein dreidimensionales mehr? Was kann ich durch die angaben für die vier kanten festlegen? top und bottom sind doch genauso wie right und left immer gleich oder?

Werbeanzeige