Files |  Tutorials |  Articles |  Links |  Home |  Team |  Forum |  Wiki |  Impressum

Aktuelle Zeit: Do Apr 25, 2024 15:35

Foren-Übersicht » Programmierung » OpenGL
Unbeantwortete Themen | Aktive Themen



Ein neues Thema erstellen Auf das Thema antworten  [ 2 Beiträge ] 
Autor Nachricht
 Betreff des Beitrags: VBO GPU-seitig manuell auslesen
BeitragVerfasst: Di Jun 25, 2013 17:33 
Offline
DGL Member

Registriert: Mi Aug 09, 2006 15:47
Beiträge: 44
Wohnort: St. Wendel
Programmiersprache: Delphi, C#, Java, C
Hallo,

im Rahmen eines Projekts benutze ich ein VBO zur GPU-seitigen Speicherung von Vertices. Jeder Vertex beschreibt dabei den Schwerpunkt eines Objekts.
Mit DrawArrays kann ich mir die Schwerpunkte als Punkte rendern lassen, soweit sogut.

Nun sind es aber physikalisch gesehen Schwerpunkte, welche ich zur Visualisierung aber als Quads/Spheres rendern möchte. Hierbei soll der Vertex des Punkts den Mittelpunkt des Quads bilden. Wie realisiere ich sowas effizient (d.h. explizit nicht mit glMapBuffer, es soll alles GPU-seitig bleiben)?

Genauer, DrawArrays bräuchte für Quads natürlich (?) pro Quad 4 Vertices. Ich würde das daher gerne so ("manuell") machen (Pseudocode):
Code:
  1.  
  2. for i = 0 to VertexAnzahl do
  3.   vertex = getVertexFromVBO(i)
  4.   glBegin(GL_QUADS)
  5.     glVertex3f(vertex.x-0.5,vertex.y-0.5,0)
  6.     glVertex3f(vertex.x-0.5,vertex.y+0.5,0)
  7.     glVertex3f(vertex.x+0.5,vertex.y+0.5,0)
  8.     glVertex3f(vertex.x+0.5,vertex.y-0.5,0)
  9.   glEnd()
  10.  


Wobei ich mir jetzt auch nicht sicher bin, da die Variable vertex ja quasi im Hauptspeicher liegt und ich dann doch soweit bin wie vorher oder?

Hat jemand ne Idee? Wie gesagt, Knackpunkt ist möglichst wie bei DrawArrays nicht über den Hauptspeicher zu gehen sondern im VRAM zu bleiben.

Vielen Dank und schöne Grüße,
Flips


Nach oben
 Profil  
Mit Zitat antworten  
 Betreff des Beitrags: Re: VBO GPU-seitig manuell auslesen
BeitragVerfasst: Di Jun 25, 2013 17:55 
Offline
DGL Member
Benutzeravatar

Registriert: Do Dez 29, 2005 12:28
Beiträge: 2249
Wohnort: Düsseldorf
Programmiersprache: C++, C#, Java
Ich sehe da vier Möglichkeiten:
1. PointSprites: Du renderst als GL_POINTS und setzt die PointSize auf die gewünschte Größe (ggf. im Vertexshader, müsste aber auch ohne Shader gehen)
2. Geometryshader: Du renderst als GL_POINTS, lässt den Geometryshader aber draus ein Geometrie machen, z.B. ein Quad oder ein Tetraeder. Eigenet sich aber nur für sehr begrenzte Geometriemengen, eine Kugel ist vermutlich zu viel.
3. Instancing: Du bindest deinen Vertexbuffer als Texturbufferobject (TBO). Damit kannst du drauf im Vertexshader wie auf ein Array (ähnlich wie 1D-Textur) zugreifen. Du renderst deine Kugel via Instancing, im Vertexshader greifst du mittels gl_InstanceID auf den TBO zu und schiebst die Vertices in Position. Für mehr Details siehe: http://wiki.delphigl.com/index.php/shader_Instancing
4. Tesselationshader: Potentiell könnte es auch damit gehen, aber habe ich noch nicht gearbeitet da mir die Hardware (und Zeit) dafür fehlt.

_________________
Yeah! :mrgreen:


Nach oben
 Profil  
Mit Zitat antworten  
Beiträge der letzten Zeit anzeigen:  Sortiere nach  
Ein neues Thema erstellen Auf das Thema antworten  [ 2 Beiträge ] 
Foren-Übersicht » Programmierung » OpenGL


Wer ist online?

Mitglieder in diesem Forum: 0 Mitglieder und 106 Gäste


Du darfst keine neuen Themen in diesem Forum erstellen.
Du darfst keine Antworten zu Themen in diesem Forum erstellen.
Du darfst deine Beiträge in diesem Forum nicht ändern.
Du darfst deine Beiträge in diesem Forum nicht löschen.
Du darfst keine Dateianhänge in diesem Forum erstellen.

Suche nach:
Gehe zu:  
cron
  Powered by phpBB® Forum Software © phpBB Group
Deutsche Übersetzung durch phpBB.de
[ Time : 7.220s | 17 Queries | GZIP : On ]