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

BlueCobold

Community-Fossil

Beiträge: 10 738

Beruf: Teamleiter Mobile Applikationen & Senior Software Engineer

  • Private Nachricht senden

11

08.12.2012, 16:29

In seinem Beispiel wird jedes Pixel nur einmal gezeichnet. Aber trotzdem kann für jedes Pixel der Fragmentshader mehrfach gerufen werden, siehe die Antwort von Schrompf.
Teamleiter von Rickety Racquet (ehemals das "Foren-Projekt") und von Marble Theory

Willkommen auf SPPRO, auch dir wird man zu Unity oder zur Unreal-Engine raten, ganz bestimmt.[/Sarkasmus]

stef

Treue Seele

  • »stef« ist der Autor dieses Themas

Beiträge: 246

Wohnort: Kassel

Beruf: Softwareentwickler

  • Private Nachricht senden

12

08.12.2012, 17:24

Also wird der Fragmentshader nach dem Rastereizer aufgerufen und berechnet, aus seinen relativen Daten, für jeden Pixel des Rasters eine Farbe ?
Wenn ich also einen Renderaufruf (glDraw oder so) mit einem Viewport 640x480 durchlaufe wird der Fragmentshader 640*480=307200 mal durchlaufen ?


Wenn meine Vermutung (Zitat) zutrifft, was ist denn dann eigentlich die Aufgabe des vorgelagerten Rasterizers ?
Die größe des Rasters wird mit dem ViewPort festgelegt, die Farbe jedes Rasterpunktes mit dem Fragmentshader.
Oder ist der Fragmentshader der Rasterizer bzw. ein Teil davon ?
"In C++ it's harder to shoot yourself in the foot, but when you do, you blow off your whole leg." — Bjarne Stroustrup.

LInsoDeTeh

Treue Seele

Beiträge: 372

Wohnort: Essen, Deutschland

Beruf: Team Lead Inhouse-Entwicklung

  • Private Nachricht senden

13

08.12.2012, 19:44

Der Rasterizer macht aus deinen drei Vertizes das Dreieck.

Der Vertexshader davor kennt nur die drei Vertizes und wird daher auch nur 3x durchlaufen. Der weiß nichts davon, dass das mal ein Dreieck werden soll. Der Rasterizer interpoliert dann die Fragmente dazwischen, sodass es insgesamt ein Dreieck wird.

Der Pixelshader/Fragmentshader läuft dann für jedes Fragment (d.h. jeder "Pixel in spe"), das zu dem Dreieck gehört einmal durch und gibt die Farbe, z.B. anhand von Texturkoordinaten oder anderen Farbfunktionen, sowie die Z-Tiefe des Fragments zurück. Am Ende wird dann das Fragment, das am weitesten vorne liegt, in einen Pixel umgewandelt, inkl. seiner Farbinformationen.

Dieser Beitrag wurde bereits 2 mal editiert, zuletzt von »LInsoDeTeh« (08.12.2012, 19:53)


stef

Treue Seele

  • »stef« ist der Autor dieses Themas

Beiträge: 246

Wohnort: Kassel

Beruf: Softwareentwickler

  • Private Nachricht senden

14

08.12.2012, 22:49

Ah ja, jetzt ist die Sache rund.
Vielen Dank an alle die was beigetragen haben. :thumbsup:
"In C++ it's harder to shoot yourself in the foot, but when you do, you blow off your whole leg." — Bjarne Stroustrup.

Werbeanzeige