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

19.08.2011, 21:42

Low-Level-Grafikprogrammierung

Hallo
Ich habe ganz ähnliche Vorstellungen wie der TS hier . Allerdings ist dieses Thema schon sehr alt und es driftete in Richtung OpenGL ab. Eines vorweg: Ich will keinesfalls das Rad neu erfinden. Nur finde ich Interesse daran, den Dingen auf den Grund zu gehen.
Konkret soll es nur ein Dreieck werden, ohne dabei auf DX, OpenGL oder eine sonstige Grafik-Schnittstelle zurückzugreifen. Nach Möglichkeit sogar ohne Hilfe der WinAPI. Außerdem lege ich keinen Wert auf Plattformunabhängigkeit. Es wäre vollkommen ausreichend, wenn es am Ende auf meinem PC läuft.
Gibt es da überhaupt Möglichkeiten? Wenn ja, kennt jemand möglichst kostenlose (es soll nur ein kleiner Exkurs werden) Tutorials zur Einarbeitung?
Danke im Voraus

foreach

Frischling

Beiträge: 87

Beruf: Student

  • Private Nachricht senden

2

19.08.2011, 21:56

In meiner Link-Sammlung befindet sich dieser Link .
Der Verfasser verweist dabei auf diese PDFs .
Des Weiteren kann ich dir dieses Buch zum Einstieg in die Materie empfehlen (es behandelt sowohl 2d als auch 3d).

EDIT: Das wäre allerdings alles auf Software-Basis. Deshalb wäre es gut zu wissen ob du dich für die grundlegenden Algorithmen interessiest, oder ob du dich näher mit den Vorgängen auf der Grafikkarte auseinandersetzen willst.

Dieser Beitrag wurde bereits 1 mal editiert, zuletzt von »foreach« (19.08.2011, 22:05)


dot

Supermoderator

Beiträge: 9 757

Wohnort: Graz

  • Private Nachricht senden

3

19.08.2011, 22:51

Mehr Low-Level als Direct3D oder OpenGL wirds auf nem modernen PC nicht, außer du schreibst einen eigenen Grafiktreiber...

Wenn es dir nur darum geht zu verstehen wie man 3d Dreiecke malt, sind die Links von foreach genau was du suchst.

xardias

Community-Fossil

Beiträge: 2 731

Wohnort: Santa Clara, CA

Beruf: Software Engineer

  • Private Nachricht senden

4

19.08.2011, 23:25

Man könnte ja auch einen "Software"renderer schreiben, welcher CUDA/OpenCL für das Rendering verwendet.
Also quasi ein Zwischending zwischen eigenem Treiber und Softwarerenderer.

Wäre sicher eine interessante Sache da man dann neben dem Rendering selbst auch lernt wie eine GPU arbeitet.

dot

Supermoderator

Beiträge: 9 757

Wohnort: Graz

  • Private Nachricht senden

5

19.08.2011, 23:27

Ja, das ist durchaus eine interessante Sache^^

6

20.08.2011, 09:55

Zitat

Deshalb wäre es gut zu wissen ob du dich für die grundlegenden Algorithmen interessiest, oder ob du dich näher mit den Vorgängen auf der Grafikkarte auseinandersetzen willst.
In jedem Fall will ich mich dem Thema von der praktischen Seite nähern. Es geht also nicht nur darum, zu verstehen wie es geht, sondern es auch anzuwenden. Eigentlich schwebt mir eine Art DX-Klon (ist eigentlich der falsche Begriff, aber er erklärts vielleicht ganz gut) vor. Ich will lediglich ein paar Funktionen nachempfinden, die mir erlauveb ein Dreieck zu zeichnen. Alles andere ist überflüssig. Ich brauch weder eine Swapchain noch Texturen oder ein sonstiges Feature von DX. Eben nur soviel, wie es für ein Dreieck braucht. Dabei aber eben ohne Zuhilfenahme von APIs. Was das Verstehen der Vorgänge auf der Grafikkarte anbelangt bin ich flexibel. Sollte es nötig sein, dass ich mich zum Erreichen meines Ziels damit beschäftige, dann mache ich das auch. Ich weiß bisher nicht, wie tief ich da gehen muss. Am besten wäre es, wenn C als Sprache ausreichend ist. Aber eventuell gibt es noch eine Ebene tiefer, eine Art Assembler für Grafikkarten - da kenne ich mich nicht aus.

Zitat

außer du schreibst einen eigenen Grafiktreiber...

Das musst du mir erklären. DX und OpenGL liefern schließlich auch keine Treiber mit und laufen mit der unterschiedlichsten Hardware. Bereitgestellt werden die Treiber ja vom Betriebssystem.

dot

Supermoderator

Beiträge: 9 757

Wohnort: Graz

  • Private Nachricht senden

7

20.08.2011, 10:04

Direct3D spricht direkt den Grafiktreiber über entsprechende Schnittstellen an und was OpenGl anbelangt sind wesentliche Teile davon überhaupt direkt im Grafiktreiber implementiert. Was genau bezweckst du mit diesem Vorhaben, wenn es dir nicht darum geht zu lernen wie so eine Grafikkarte arbeitet? Ohne Zuhilfenahme irgendeiner API läuft einfach nix. Der absolut einzige Weg unter Windows (und jedem anderen modernen OS), um ohne Zuhilfenahme einer API mit der Grafikkarte zu reden, wäre, einen Treiber dafür zu schreiben. Und selbst dieser Treiber wird entsprechende APIs verwenden müssen um mit dem System zu reden. Abgesehen davon brauchst du dann einen Treiber für jede Grafikkarte die du unterstützten willst. Und selbst für einen einzelnen Treiber wäre das schon ein unglaublicher Aufwand. Wenn du eine NVIDIA Karte hast gibts außerdem noch ein Problem: Es gibt keine offenen Dokumente darüber wie die Grafikkarte anzusteuern ist. Von ATI gibt es solche Manuals, kannst dir ja hier mal anschauen was so auf dich zukommt. Wenn du wirklich ganz ohne APIs auskommen willst bleibt dir nur eines übrig: Dein eigenes Betriebssystem schreiben.

Dieser Beitrag wurde bereits 5 mal editiert, zuletzt von »dot« (20.08.2011, 10:22)


8

20.08.2011, 10:22

Zu lernen wie ein Bild auf den Bildschirm kommt.
Klar gibt es da auch andere Wege. Nur habe ich schon mit DX Dreiecke gezeichnet und so fällt es mir sicher leichter, dieses Szenario nachzuempfinden, als beispielsweise einen Button zu zeichnen, ohne HTML und einen fertigen Renderer zu verwenden.
Weiterhin gehe ich einmal fest davon aus, dass ich trotzdem was über die Vorgänge auf einer Grafikkarte lerne. Wie bereits gesagt habe ich von dem Thema kaum bis gar keine Erfahrung. Als ich mit C begann, lernte ich auch was über die Arbeitsweise von RAM und CPU ohne jemals Assemblerquelltext gesehen zu haben.

Zurück zum Thema: Wenn Direct3D den Treiber anspricht, müsste ich das doch auch können. Hier ist halt die Frage, ob das auch direkt geht, oder ob ich diese Schnittstellen irgendwie nachempfinden muss.

dot

Supermoderator

Beiträge: 9 757

Wohnort: Graz

  • Private Nachricht senden

9

20.08.2011, 10:39

Die Schnittstelle des Treibers ist praktisch gleichwertig mit der von Direct3D selbst. Viele Direct3D Funktionen mappen 1:1 auf Treibercalls. Ich würde dir raten einfach weiterhin mit Direct3D zu arbeiten. Genau wie du mit der Verwendung von C was über die Funktionsweise deines Computers gelernt hast, wirst du auch mit der Verwendung von Direct3D was über die Funktionsweise deiner Grafikkarte lernen...

10

20.08.2011, 13:38

Wenn du lernen willst, wie 3D Grafik generiert wird, schreib einen Software Renderer. Im Prinzip würde es ja reichen, irgendwie ein Bild zu generieren, ob man das jetzt als Bilddatei speichert und hinterher ansieht oder Live auf den Bildschirm bringt ist ja fürs erste egal.
Für das Verständnis ist das optimal, man kann alle Algorithmen selber schreiben und schön bequem gucken, was passiert. Nur wenn es halt später auch schön aussehen soll, brauchst du Hardwarebeschleunigung, und da wird wenig an OpenGL oder DX vorbei gehen.
Lieber dumm fragen, als dumm bleiben!

Werbeanzeige