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

Aktuelle Zeit: Di Mai 14, 2024 00:41

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



Ein neues Thema erstellen Auf das Thema antworten  [ 1 Beitrag ] 
Autor Nachricht
 Betreff des Beitrags: Custom Vertex Attributes
BeitragVerfasst: Sa Aug 25, 2007 16:33 
Offline
DGL Member

Registriert: Di Mär 13, 2007 02:40
Beiträge: 17
hi

Ich weiß nicht genau, ob das hier ins OpenGL Forum gehört oder ins Shader Forum. Bitter einfach verschieben, wenn es falsch ist.

Zu meinem Problem:
Ich versuche gerade, die custom Vertex Attributes zu implementieren und sie in einem GLSL Vertex Shader zu verwenden. Dazu habe ich einen Shader geschrieben, der wie folgt aussieht:
Code:
  1.  
  2. attribute vec3 customAttrib;
  3. attribute vec3 customAttrib2;
  4. attribute vec3 customAttrib3;
  5.  
  6. void main(void)
  7. {
  8.     gl_Position   = gl_ModelViewProjectionMatrix * gl_Vertex;
  9.     //gl_FrontColor = gl_Color;
  10.     gl_FrontColor = vec4( customAttrib.x, customAttrib.y, customAttrib.z, 0 );
  11. }
  12.  


Die attribt-daten sende ich als array zur Karte mittels folgendem Code:
Code:
  1.  
  2. glEnableVertexAttribArray( index );
  3. glVertexAttribPointer( index, elemSize, false, 0, dataBuffer );
  4.  

(Falls die Syntax etwas abweicht, bitte nicht wundern. Ich verwende Java.)

Wenn dann das GLSL Shader Programm gebunden wird (nachdem es kompiliert wurde), verwende ich folgenden Code nach dem Binden der Uniform Variablen, um dem Shader mitzuteilen, welche Attribute, auf welchen Index gemappt werden sollen:
Code:
  1.  
  2. glBindAttribLocation( shaderProgram.getGlHandle(), index, "customAttrib" );
  3.  


Wenn ich index 1 verwende, klappt alles prima. Allerdings nicht, wenn ich irgendeinen anderen Index verwende. Wenn ich ein zweites attribut binde, wird dieses immer nur mit Index 2 funktionieren. Merkwürdigerweise ist es sogar egal, ob ich glBindAttribLocation() verwende oder nicht.

Ich habe auch schon versucht, mittels:
Code:
  1.  
  2. glGetAttribLocation( shaderProgram.getGlHandle(), "customAttrib" );
  3.  

den Index auszulesen. Mir erschließt sich allerdings nicht, warum man überhaupt diesen Index auslesen kann. Woher sollte OpenGL das schließlich wissen? Wenn ich immer den ausgelesenen Index verwende, habe ich doch keine Garantie, dass die richtigen Attribute auf den richtigen Index gemappt werden.

Könnte das ein Fehler im Linux OpenGL NVidia Treiber sein? Oder mache ich noch irgendwas grundsätzlich falsch? Ist es wichtig, in welcher Reihenfolge ich Coordinaten, Normalen, Farben, Texture-Coords und eben Custom Vertex Attribte an die Karte sende (bzw. das VBO binde)?

Ich habe auch mal was davon gelesen, dass bei NVidia gewisse Indices für die Standard Attribute reserviert sind. Kann es auch damit zu tun haben?

Es ist auch völlig egal, welche der drei customAttrib[,1,2] Variablen ich im Shader verwende. Das Resultat ist immer das gleiche.

Ich bin mal wieder etwas verzweifelt. Ich hoffe, Ihr könnt mir helfen.

Vielen Dank schonmal.

Marvin[/code]


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


Wer ist online?

Mitglieder in diesem Forum: 0 Mitglieder und 26 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:  
  Powered by phpBB® Forum Software © phpBB Group
Deutsche Übersetzung durch phpBB.de
[ Time : 0.030s | 17 Queries | GZIP : On ]