Verständnisproblem mit Computergrafik (Einheiten)



  • Hallo,

    ich versuche mich gerade ein bißchen in die Computergrafik einzuarbeiten. Das Buch welches ich lese beschreibt wie man ein Dreieck auf dem Bildschirm ausgibt, bei der Definition der Vertizes ist mir unklar welche Einheit diese besitzen. Laut google kann es jede Einheit sein die man will aber woher weiß der Computer wo er die entsprechenden Vertices zeichen soll?

    Auch wenn ich das Dreieck um eine Einheit verschiebe woher weiß der Computer dann was die eins ist?

    Viele Grüße
    🙂



  • Mit 3D-Computergrafik kenn ich mich zwar nicht aus, aber... alles ist relativ und es kommt daher auf die Perspektive an. D.h. du könntest wahrscheinlich deine ganze Spielwelt innerhalb der Koordinatengrenzen 0 and 1 unterbringen und du musst eben nur nah genug "ranzoomen" damit deine Vertices nah genug erscheinen.



  • Der Computer projeziert die mit Hilfe einer/ mehreren Matrizen auf den Bildschirm. f'`8k

    Autocogito

    Gruß, TGGC (Was Gamestar sagt...)



  • Und in dieses Matrizen ist festgelegt welche Einheit benutzt wird?



  • Histidin schrieb:

    Und in dieses Matrizen ist festgelegt welche Einheit benutzt wird?

    Matrizen sind dazu da um einer Grafikschnittstelle mitzuteilen, wann ein Objekt translatiert, rotiert oder skaliert werden soll.



  • Histidin schrieb:

    Und in dieses Matrizen ist festgelegt welche Einheit benutzt wird?

    Ja, und du kannst die Einheit sogar selbst benennen: z.B. "Histidinmeter". Und wenn ein Histidinmeter z.B. genau 4,242 Pixel entspricht musst du deiner Transformationspipeline entsprechend die Information vermitteln, die deine Histidinmeter in Pixel umrechnen.



  • Oft sind die Einheiten realtiv zur Grösse des Bildschirmes, respektive des Fensters in welchem das Programm läuft.
    Das heisst, wenn du ein Vireck zeichnest, dass genau die Höhe 1 und die Breite 1 hat, dann deckt das (Projektion miteinbeziehen!) genau den Bildschirm ab. (Wenn es auch genau in der Mitte gezeichnet wird)



  • drakon hat das schon recht gut zusammengefasst.

    Die Grafikkarte interessiert sich nicht für Einheiten. Sie schaut sich einfach einen rechteckigen Block der Seitenlänge eins um den Nullpunkt herum an. Dabei ist die Vorderseite des Blocks so definiert, dass er exakt die Bildfläche des Bildschirms abdeckt.

    Alles was innerhalb dieses Blocks ist, rendert die Grafikkarte. Die Grafikkarte kennt also keinerlei Einheiten, sondern definiert den Punkt (1,0,0) zum Beispiel als untere rechte Bildschirmecke und den Punkt (0,0,0) als untere linke(ist in der Realität etwas anders. Da geht der Block von (-0.5,0,0) bis (0.5,0,0)

    Nun ist das natürlich für uns Menschen doof, weil wir gerne mit Einheiten rechnen. Die müssen wir dann also selbst definieren. das funktioniert dann so, dass du dir überlegst: "Okay, wie weit ist meine Bildebene von meinem Kamerazentrum weg (zum Beispiel 5 cm) und welchen Öffnungswinkel hat die Kamera." Damit kannst du dann etwas rumrechnen und erhälst dann die Breite der Bildebene. Sagen wir mal 10cm. Dann weißt du, dass in deiner Welt der Abstand zwischen (0,0,0) und (1,0,0) exakt 10cm entspricht. Nun definierst du dir den z-Wert irgendwie, zum Beispiel dass 5m einer Entfernung von 1 entsprechen.

    Diese ganzen Definitionen kanns du dann alle in eine Projektionsmatrix packen und fertig.



  • Histidin schrieb:

    Und in dieses Matrizen ist festgelegt welche Einheit benutzt wird?

    Ja, denn das rechnet die Koordinaten die du angibst in eine Pixelangabe um, an der dieser Punkt dann auf dem Bildschirm liegt.

    Wovon jetzt hier immer gesprochen wird, das sind "Normalized Device Coordinates". In welchem Bereich die liegen sollen kann im Prinzip jeder selbst festlegen, der so eine Pipeline definiert, sind sind nur eine Zwischenstation im Bezug auf deine Frage. f'`8k

    Gruß, TGGC (Was Gamestar sagt...)



  • Vielen Dank für dei vielen Antworten. Ich glaube allmählich verstehe ich es ein bißchen obwohl es wie ich finde schon ziemlich abstrakte Konzepte sind.


Anmelden zum Antworten