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

Aktuelle Zeit: Mi Apr 24, 2024 05:42

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



Ein neues Thema erstellen Auf das Thema antworten  [ 6 Beiträge ] 
Autor Nachricht
BeitragVerfasst: Mo Jun 17, 2013 13:49 
Offline
DGL Member

Registriert: Mi Apr 04, 2012 15:21
Beiträge: 12
Programmiersprache: C++
Hallo liebe Comm,
mir ist nicht ganz klar was es mit den Funktionen

glVertexAttribPointer() und glEnableVertexAttribArray()/glDisableVertexAttribArray()

auf sich hat.
Ich würde mich über eine ausführliche Erklärung freuen, denn das, was im Wiki steht ist sehr kompakt gehalten. Ein übertragbares Beispiel wäre das Beste! :)

Danke im Voraus

_________________
Konfuzius sagt: "其實你懶得翻譯?"


Nach oben
 Profil  
Mit Zitat antworten  
BeitragVerfasst: Mo Jun 17, 2013 14:32 
Offline
DGL Member
Benutzeravatar

Registriert: Do Okt 16, 2008 13:18
Beiträge: 252
--2 mal gepostet --

_________________
You even trying ...

Website: http://rise-of-light.de/


Zuletzt geändert von mori am Mo Jun 17, 2013 14:38, insgesamt 1-mal geändert.

Nach oben
 Profil  
Mit Zitat antworten  
BeitragVerfasst: Mo Jun 17, 2013 14:37 
Offline
DGL Member
Benutzeravatar

Registriert: Do Okt 16, 2008 13:18
Beiträge: 252
Diese Funktionen "verbinden" Datenbuffer (Vertices/Farben/...) mit dem Shader. Die Funktionen übernehemen eine ähnliche Aufgabe wie die glUniform-Funktionen welche, im Gegensatz zu glVertexAttribPointer, nur feste Werte anstatt "Buffer" an den Shader binden. Du kannst wie bei glUniform mit glGetUniformLocation die Position von Shader Variablen abfragen an welche du Daten binden möchtest, zusätzlich muss dem Shader bekannt sein, wie viele Dimensionen vorliegen (zB. 2D/3D-Koordinaten?), welcher Datentyp vorliegt, ob die Daten normalisiert werden sollen und in welchem Abstand die einzelnen Daten im Buffer verteilt sind.
Code:
  1. glVertexAttribPointer(
  2.     shaderMap.vertices,
  3.     data.vertices.count,
  4.     data.vertices.dtype,
  5.     data.vertices.normalized,
  6.     data.vertices.stride,
  7.     pointer(data.vertices.offset)
  8. );
  9. glEnableVertexAttribArray(shaderMap.vertices);

Diese Art Daten im Shader zu binden, hat den Vorteil, dass du Daten im Buffer getrennt ansprechen und an den Shader übergeben kannst ohne durch vorgegebene Build-In Variablen eingeschränkt zu werden.

_________________
You even trying ...

Website: http://rise-of-light.de/


Nach oben
 Profil  
Mit Zitat antworten  
BeitragVerfasst: Mo Jun 17, 2013 16:12 
Offline
DGL Member

Registriert: Mi Apr 04, 2012 15:21
Beiträge: 12
Programmiersprache: C++
Also ich versuche das nochmal kurz in eigenen Worten zusammenzufassen:

Mit glEnableVertexAttribArray() sage ich opengl, welche parameter (die position) ich ansprechen möchte und mit glVertexAttribPointer() sage ich opengl, was ich an die parameter (position gebe ich auch hier als erstes argument an) übergeben möchte. Zum Schluss sage ich mit glDisableVertexAttribArray(), das ich mit den Parametern nicht mehr weiterarbeite.

Ist das richtig so?

_________________
Konfuzius sagt: "其實你懶得翻譯?"


Nach oben
 Profil  
Mit Zitat antworten  
BeitragVerfasst: Di Jun 18, 2013 11:53 
Offline
DGL Member
Benutzeravatar

Registriert: Do Okt 16, 2008 13:18
Beiträge: 252
Du hast es relativ gut zusammengefasst.
kralo9 hat geschrieben:
Zum Schluss sage ich mit glDisableVertexAttribArray(), das ich mit den Parametern nicht mehr weiterarbeite.
Hier weis ich nicht ob Ich richtig verstanden habe was du meinst. Diese Funktion deaktiviert die angegebene Stelle, so dass dem Shader dort keine Daten übergeben werden. Dein Programm kann die, an diese Position gebundenen, Daten aber weiterhin mit glVertexAttribPointer verändern. Nur werden diese bis zur Aktivierung mit glEnableVertexAttribArray nicht an den Shader weiter gegeben.

_________________
You even trying ...

Website: http://rise-of-light.de/


Nach oben
 Profil  
Mit Zitat antworten  
BeitragVerfasst: Di Jun 18, 2013 13:02 
Offline
DGL Member

Registriert: Mi Apr 04, 2012 15:21
Beiträge: 12
Programmiersprache: C++
So habe ich das mit dem disable gemeint. Dem Shader sagen, dass ich ihm nichts mehr gebe, an diesen Parameter.
Dazu noch: mit glBindBuffer() sage ich nach dem enable, dass ich diesen Buffer übergeben möchte, oder?

Ist es dann eigentlich so, dass ich im Shader gl_Vertex nicht mehr verwenden kann? Weil ich übergebe die Vertices ja auch manuell mit dem Buffer. Ich habe das probiert und als Ergebnis kam nichts raus, also kein Bild. Kurz: Muss ich immer manuell die Vertices übergeben?


Gruß

_________________
Konfuzius sagt: "其實你懶得翻譯?"


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


Wer ist online?

Mitglieder in diesem Forum: Google [Bot] und 44 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 : 0.202s | 18 Queries | GZIP : On ]