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

Aktuelle Zeit: Do Apr 25, 2024 16:57

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



Ein neues Thema erstellen Auf das Thema antworten  [ 4 Beiträge ] 
Autor Nachricht
BeitragVerfasst: Mi Apr 17, 2013 18:32 
Offline
DGL Member

Registriert: Sa Apr 14, 2012 14:28
Beiträge: 52
Programmiersprache: c++
Ja, ich mal wieder... ich hoffe es nervt nicht...

da ich ja grade nochmal von den Basics an alles durchgehe um OpenGL 3.3+ zu erlernen habe ich mich mit folgender Seite auseinander gesetzt:

http://arcsynthesis.org/gltut/index.html

Jetzt ist es mir aber nun in kurzer Folge zweimal passiert, dass die Beispiele trotz Copy&Paste nicht richtig funktionieren. Das erste Mal war das simple Rendern eines Dreiecks.

http://arcsynthesis.org/gltut/Basics/Tu ... splay.html

Ich habe es dann mit Hilfe der Swiftless Seite hinbekommen und nebenbei heraus gefunden woran es lag: Angeblich soll OGL ab einer bestimmten Version (ich verwende 4.3) das Rendern einzelner VBO ohne VAO nicht mehr unterstützen. Nachdem ich dann noch ein VAO in den Quelltext einband lief es auf einmal. Mußte allerdings noch die Zeile

Code:
  1. glBindBuffer(GL_ARRAY_BUFFER, 0);
  2.  

auskommentieren, da er mir sonst eine NullReference Exception ausspuckt.

Heute habe ich dann das zweite Tut ausprobiert. Ein Dreick mit Farbübergängen:

http://arcsynthesis.org/gltut/Basics/Tu ... butes.html

und wieder funktionierte es nicht richtig wie auf der Seite beschrieben, das Dreieck blieb rot. Auch hier konnte die Swiftless Seite Abhilfe schaffen. McKesson schreibt alle Daten in ein VBO während swiftless mit 2 VBOs arbeitet. Jetzt bleiben ein paar Fragen offen:

Kann ich einfach nicht mehr Vertex Koordinaten und Farbwerte in ein VBO packen oder hat Mr McKesson einfach nen Fehler in seinem Code? Irgendwie vergeht einem doch stark die Lust mit diesem Buch zu arbeiten wenn jedes Tut in der präsentierten Form nicht funktioniert. Sollte ich auf anders Lehrmaterial ausweichen oder habe ich mich zu blöd angestellt?

MfG DerTroll


Nach oben
 Profil  
Mit Zitat antworten  
BeitragVerfasst: Mi Apr 17, 2013 21:02 
Offline
Compliance Officer
Benutzeravatar

Registriert: So Aug 08, 2010 08:37
Beiträge: 460
Programmiersprache: C / C++ / Lua
Du kannst die Farbdaten in einem VBO speichern, du kannst sie in getrennten VBO's speichern, wichtig ist nur, dass du OpenGL genau mitteilst wo sie denn gespeichert sind.

Also musst du:

1. das richtige VBO gebunden haben

mittels

Code:
  1.  
  2. glBindBuffer(GL_VERTEX_ARRAY, VBOID);
  3.  


wenn du ein VBO mittels

Code:
  1.  
  2. glGenBuffers(GL_VERTEX_BUFFER,1);
  3.  


erstellst, wird die eine ID übergeben. Diese musst du speichern und dann bei glBindBuffer angeben.

2. musst du OpenGL genau sagen wo im VBO die Daten liegen. Dazu gibt es die Parameter stride und offset.

Code:
  1.  
  2. glColorPointer(size: TGLint; _type: TGLenum; stride: TGLsizei; const _pointer: PGLvoid);
  3.  


offset ist der Anfang der Farbdaten. Also wenn dies der Inhalt deines VBO's wäre:

Vertex1, Vertex2, Vertex3, Farbe1, Farbe2, Farbe3

wäre der Offset 3*SizeOf(Vertex), weil vor den Farben 3 Vertices kommen.

stride ist der Abstand der einzelnen Farbdaten. Betrachten wir folgendes Beispiel:

Vertex1, Farbe1, Vertex2, Farbe2, Vertex3, Farbe3

Hierbei wäre der stride 1*SizeOf(Vertex), da immer ein Vertex zwischen den einzelnen Farbdaten ist.

_________________
offizieller DGL Compliance Beauftragter
Never run a changing system! (oder so)


Nach oben
 Profil  
Mit Zitat antworten  
BeitragVerfasst: Mi Apr 17, 2013 22:35 
Offline
DGL Member

Registriert: Sa Apr 14, 2012 14:28
Beiträge: 52
Programmiersprache: c++
Zitat:
...oder habe ich mich zu blöd angestellt?


ja, habe ich. Nach ner Pause nochmal über den Code drüber geschaut und den Fehler gefunden.

Code:
  1. glBindBuffer(GL_ARRAY_BUFFER, vertexBufferObject);
  2.     glEnableVertexAttribArray(0);
  3.     glEnableVertexAttribArray(1);
  4.     glVertexAttribPointer(0, 4, GL_FLOAT, GL_FALSE, 0, 0);
  5.     glVertexAttribPointer(1, 4, GL_FLOAT, GL_FALSE, 0, (void*)48);
  6.    
  7.     glDrawArrays(GL_TRIANGLES, 0, 3);
  8.    
  9.     glDisableVertexAttribArray(0);
  10.     glDisableVertexAttribArray(1);
  11.  


ich hatte das glDrawArrays(GL_TRIANGLES, 0, 3); zwecks Trennung zwischen Initialisierung und Ausführung an ne andere Stelle Verschoben. Durch das glDisableVertexAttribArray, was ich natürlich nicht auskommentiert hatte, wurden dann die Kanäle dicht gemacht und die Farbe nicht mehr übermittelt. Also bleibt nur die Sache dass ab glaube OpenGL 4.0 VAOs eingesetzt werden müssen, was im Buch noch nicht so ist, da es mit 3.3 arbeitet.

Zu dem glcolorpointer:
ist das in OpenGL 3+ noch drinnen? Das ist ja eine Funktion der 1.1er Version. Davon mal abgesehen sage ich OpenGL auch an keiner Stelle, in welcher location die Farbwerte im Shader abgegriffen werden können.

MfG Der Troll


Nach oben
 Profil  
Mit Zitat antworten  
BeitragVerfasst: Do Apr 18, 2013 22:53 
Offline
DGL Member
Benutzeravatar

Registriert: So Sep 26, 2010 12:54
Beiträge: 238
Wohnort: wieder in Berlin
Programmiersprache: Englisch
:(

das arcsynthesis tutorial arbeitet stets mit der neuesten version von opengl, also nix "nur opengl3"

Du könntest für deine Fragen dazu auch noch die Registry auf Khronos bzw OpenGL.org befragen. Ob welche Funktion noch in OpenGL Version XYZ enthalten ist/sind.


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


Wer ist online?

Mitglieder in diesem Forum: 0 Mitglieder und 111 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.131s | 17 Queries | GZIP : On ]