Ergebnis 1 bis 8 von 8

Thema: Was ist ein Vertex Buffer Objekt?

Baum-Darstellung

Vorheriger Beitrag Vorheriger Beitrag   Nächster Beitrag Nächster Beitrag
  1. #2
    Ein Vertex (Plural ist Vertices) ist einfach ausgedrückt ein Eckpunkt und deren Farbe eines Polygons. Ein Rechteck (= Polygon) besteht also z.B. aus vier Vertices.

    Ein Vertex-Array ist also ein Array* von Vertices.
    Der Vertex Buffer ist einfach ausgedrückt ein Zwischenspeicher für Vertex-Arrays innerhalb des Grafikspeichers.
    Angenommen, wir wollen ein Haus zeichnen. Es wäre ja ziemlich unsinnig, dieses Haus mittels Programmcode zu zeichnen, was ja durchaus möglich ist.
    Für ein einfaches Beispiel nehme ich aber ein Dreieck mit folgenden Punkten:

    Code:
            * (1,0)
           /|\
          / | \
         /  |  \
        /   |   \ 
    ---*----|----*---
      (0,-1)    (0,1)
    Code:
    // Innerhalb des Loops
    GeheZu(0, -1)
    
    ZeichneLinie(1, 0)
    ZeichneLinie(0, 1)
    ZeichneLinie(0, -1)
    Das ist jetzt Pseudo-Code und er würde einfacherweise Dreieck zeichnen.
    Per Vertex-Array haben wir die Möglichkeit die Eckpunkte vom Dreieck einmal festzulegen, und können sie dann zeichnen. Beispiel:

    Code:
    // Beim Starten der Anwendung
    dreieck = { {1,0}, {0,1}, {0,-1} }
    SchreibeInDenVertexBuffer(dreieck)
    
    [...]
    
    // Innerhalb des Loops
    ZeichneVBO() // VBO = Vertex Buffer Object
    Um es mal ganz simpel zu halten.
    Das Problem ist ja, dass man jedes Polygon bei jedem Aufruf des Loops** neu berechnen muss. Das kann bei sehr komplexen Polygonen sehr unperformant werden, weil man jedes Mal die Zeichnen-Routine aufruft (oberer Pseudo-Code). Auch führt dies nicht grad zu einem wartbaren Code, wenn da zig tausend Mal die Zeichne()-Funktion aufgerufen wird. Um diese Inperformanz zu minimieren und den Code schlanker zu machen, kann man diese Polygone als Vertex Buffer Object (VBO) im Grafikspeicher hinterlegen, damit diese nicht immer per Zeichnen-Routine und Programmcode berechnet werden müssen (unterer Pseudo-Code).

    Ich hoffe, das war verständlich genug.

    ---

    * Ein Array kannst du dir wie ein Paket vorstellen. In dieses Paket legt man z.B. Bücher rein. Jedes Buch repräsentiert dann die Daten, auf die man dann innerhalb des Pakets zugreifen kann.

    ** Der sog. Loop (= Schleife) ist für Grafikanwendungen essentiell. Innerhalb eines Schleifendurchgangs wird die Eingabe verarbeitet, die Logik berechnet und die Ausgabe generiert. Wenn ein Spiel z.B. mit 60 FPS läuft, durchläuft das Spiel also 60 Mal diese Schleife.

    Geändert von Whiz-zarD (06.04.2014 um 00:56 Uhr)

Berechtigungen

  • Neue Themen erstellen: Nein
  • Themen beantworten: Nein
  • Anhänge hochladen: Nein
  • Beiträge bearbeiten: Nein
  •