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

Aktuelle Zeit: Fr Jul 18, 2025 08:07

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



Ein neues Thema erstellen Auf das Thema antworten  [ 2 Beiträge ] 
Autor Nachricht
 Betreff des Beitrags: Shader & Vertex Buffer
BeitragVerfasst: Fr Okt 28, 2011 14:50 
Offline
DGL Member

Registriert: Do Apr 08, 2004 16:55
Beiträge: 516
Hallo zusammen,

nach langer Inaktivität melde ich mich wieder zurück.
Ich Programmiere zur Zeit mit OpenGL ES 2.0 und MonoTouch und merke das ich leicht aus dem Training bin und ich doch einige Probleme habe.

Ich habe es geschafft die Shader zum laufen zu bekommen und Vertex Buffer. Dannach musste ich leider feststellen, das es mir nicht möglich war Vertex-Normalen hinzuzufügen, wobei der Code recht einfach war.

Das ganze gibt es auch hier. ( Könnt auch die Bounties abholen )


Erstmal den Shader den ich verwende, gepackt in eine Xml-Datei:
Code:
  1. <Shader>
  2.   <Uniforms>
  3.     <Uniform type="mat4" name="modelViewMatrix"/>
  4.   </Uniforms>
  5.  
  6.   <Vertex>
  7.     <Attributes>
  8.       <Attribute type="vec3" name="position" binding="Position"/>
  9.       <Attribute type="vec3" name="normal" binding="Normals"/>
  10.       <!--<Attribute type="vec4" name="color" binding="Color"/>-->
  11.     </Attributes>
  12.  
  13.     <Code><![CDATA[
  14.  
  15. attribute vec3 position;
  16. attribute vec3 normal;          
  17.  
  18. varying vec4 colorVarying;
  19.  
  20. uniform mat4 modelViewMatrix;          
  21.  
  22. void main()
  23. {
  24.   gl_Position = modelViewMatrix * vec4(position.xyz, 1.0);
  25.   float z = gl_Position.z / 100.0;
  26.   colorVarying = vec4(z, z, z, 1.0) ;  
  27. }
  28.  
  29.     ]]></Code>
  30.   </Vertex>
  31.   <Pixel>
  32.     <Code><![CDATA[
  33.  
  34. varying lowp vec4 colorVarying;
  35.  
  36. void main()
  37. {
  38.   gl_FragColor = colorVarying;
  39. }
  40.  
  41.     ]]></Code>
  42.   </Pixel>
  43. </Shader>


Wie ihr sehr macht er nicht viel, er hat eine Vertex Position und eine Normale welche er eigentlich bekommen sollte.
Leider scheitert das ganze schon hier etwas früher. Dazu erstmal etwas Code:
Code:
  1. // Bind attribute locations
  2. for (int i = 0; i < _VertexAttributeList.Length; i++)
  3. {
  4.     ShaderAttribute attribute = _VertexAttributeList[i];
  5.     GL.BindAttribLocation(_Program, i, attribute.Name);
  6. }


An dieser stelle binde ich die attribute-locations welche aus der xml ausgelesen werden.
Das funktioniert solang ich nicht 2 Attribute habe ( Position + Normale ).
Am Shader liegt es nicht, dieser sollte funktionieren, allerdings gibt es eine Warnung welche ich leider nicht auslesen kann da es da einen Bug in MonoTouch gibt.

Soviel zu Bug 1. Der Zweite Bug hat mit den VertexBuffern zu tun.
Hier auch erstmal etwas Code wo die Attribute gebunden werden:
Code:
  1.  
  2. // ...
  3.  
  4. for (int i = 0; i < _Data.Length; i++)
  5. {
  6.     VertexData data = _Data[i];
  7.     GL.VertexAttribPointer(i, data.Size, data.Type, data.Normalized, 12 new IntPtr(0));
  8.     GL.EnableVertexAttribArray(i);
  9.  
  10. }
  11. //...
  12.  



Hier der Code wo das model initialisiert wird:
Code:
  1.  
  2. MemoryStream ms = new MemoryStream();
  3. BinaryWriter wr = new BinaryWriter(ms);
  4.  
  5. // Schreibt die Daten in den MemoryStream
  6. Writer(wr,
  7.   // Vertex / Normal
  8.   -size, size, size, 0, 0, 1,
  9.   size, size, size, 0, 0, 1,
  10.   -size, -size, size, 0, 0, 1,
  11.   size, -size, size, 0, 0, 1);
  12.  
  13. Byte[] data = ms.ToArray();
  14.  
  15. return new Model(device, new ModelPart(
  16.     new VertexBuffer(new ushort[] {
  17.         // Front
  18.        2, 1, 0,
  19.        1, 2, 3
  20.     },
  21.     data,
  22.     // Index, size, type, normalized
  23.     new VertexData(0, 3, All.Float, false),
  24.     new VertexData(1, 3, All.Float, false)),
  25.     device.Resources.LoadShader("Shadeers/Default") as Shader));



So das war alles was ich habe. Leider funktioniert es nicht so wie ich will, während ich vorher wenigstens ne Box gesehen habe, sehe ich seit ich die Normalen eingebaut habe nur noch seltsame vertices und das 2te Attribut kann ich auch nicht binden ( Bug 1).

Viele Grüße
Felix

_________________
Shareholder und Leitender Entwickler bei Pipedream-Games.

Zitat: Siehst du diesen Park da unten? Jeden Tag lernen sich darin Menschen kennen und verlassen einander. Und du hast dein ganzes Leben Zeit darin zu gehen.


Nach oben
 Profil  
Mit Zitat antworten  
 Betreff des Beitrags: Re: Shader & Vertex Buffer
BeitragVerfasst: Sa Okt 29, 2011 13:04 
Offline
DGL Member

Registriert: Do Apr 08, 2004 16:55
Beiträge: 516
Ich habe hier mal nicht editiert aus dem Grund das, falls andere Leute das selbe Problem haben, sie die Antwort hier auch gleich lesen können.

Nach langem rumprobieren hab ich die Lösung auf Antwort 1 gefunden.
Das Attribut "normal" wird nicht benutzt, daher scheint es der compiler weg-zu-optimieren.
Relativ nervig, da dieser Fehler sicher in dem Log stand, den ich dank MonoTouch nicht lesen konnte.


Antwort auf Frage 2:
Der Parameter "Stride" und "Offset" waren falsch. Stride musste angepasst werden auf die Größe des Vertex, Offset auf die position wo das Attribute anfängt.

_________________
Shareholder und Leitender Entwickler bei Pipedream-Games.

Zitat: Siehst du diesen Park da unten? Jeden Tag lernen sich darin Menschen kennen und verlassen einander. Und du hast dein ganzes Leben Zeit darin zu gehen.


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 2 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.008s | 16 Queries | GZIP : On ]