Hey, ich versuche nun sein einiger Zeit einen texturierten Quad zu zeichnen, als Vorlage verwende ich diesen Code:
open.gl/content/code/c3_basic.txt
Ich wusste nicht wie genau man
nach C# übersetzt, da es sich allerdings nur um einen Offset im BufferObj handelt habe ich das wie folgt gemacht:
Mein übersetzter Code sieht wie folgt aus:
Es läuft auch alles ohne Probleme durch, jedoch seh ich bis auf die ClearColor nichts von der Textur.. Hier noch mal der Fragment und VertexShader:
Kann jemand von euch einen Fehler erkennen oder mir sagen wie ich es anders/besser machen sollte?
open.gl/content/code/c3_basic.txt
Ich wusste nicht wie genau man
nach C# übersetzt, da es sich allerdings nur um einen Offset im BufferObj handelt habe ich das wie folgt gemacht:
Mein übersetzter Code sieht wie folgt aus:
C#-Quellcode
- var vertices = new float[]
- {
- // Position Color Texcoords
- -0.5f, 0.5f, 1.0f, 0.0f, 0.0f, 0.0f, 0.0f, // Top-left
- 0.5f, 0.5f, 0.0f, 1.0f, 0.0f, 1.0f, 0.0f, // Top-right
- 0.5f, -0.5f, 0.0f, 0.0f, 1.0f, 1.0f, 1.0f, // Bottom-right
- -0.5f, -0.5f, 1.0f, 1.0f, 1.0f, 0.0f, 1.0f // Bottom-left
- };
- var vao = new uint[1];
- OpenGLInterops.GenVertexArrays(1, vao);
- OpenGLInterops.BindVertexArray(vao[0]);
- var vbo = new uint[1];
- OpenGLInterops.GenBuffers(1, vbo);
- OpenGLInterops.BindBuffer(OpenGLInterops.GL_ARRAY_BUFFER, vbo[0]);
- OpenGLInterops.BufferData(OpenGLInterops.GL_ARRAY_BUFFER, vertices, OpenGLInterops.GL_STATIC_DRAW);
- var ebo = new uint[1];
- OpenGLInterops.GenBuffers(1, ebo);
- var elements = new ushort[]
- {
- 0, 1, 2,
- 2, 3, 0
- };
- _colorShader.Bind();
- tex.Bind(0);
- OpenGLInterops.BindBuffer(OpenGLInterops.GL_ELEMENT_ARRAY_BUFFER, ebo[0]);
- OpenGLInterops.BufferData(OpenGLInterops.GL_ELEMENT_ARRAY_BUFFER, elements, OpenGLInterops.GL_STATIC_DRAW);
- int posAttrib = OpenGLInterops.GetAttribLocation(_colorShader.ShaderProgramObject, "position");
- OpenGLInterops.EnableVertexAttribArray((uint)posAttrib);
- OpenGLInterops.VertexAttribPointer((uint)posAttrib, 2, OpenGLInterops.GL_FLOAT, false, 7 * sizeof(float), IntPtr.Zero);
- int colAttrib = OpenGLInterops.GetAttribLocation(_colorShader.ShaderProgramObject, "color");
- OpenGLInterops.EnableVertexAttribArray((uint)colAttrib);
- OpenGLInterops.VertexAttribPointer((uint)colAttrib, 3, OpenGLInterops.GL_FLOAT, false, 7 * sizeof(float),new IntPtr((2 * sizeof(float))));
- int texAttrib = OpenGLInterops.GetAttribLocation(_colorShader.ShaderProgramObject, "texcoord");
- OpenGLInterops.EnableVertexAttribArray((uint)texAttrib);
- OpenGLInterops.VertexAttribPointer((uint)texAttrib, 2, OpenGLInterops.GL_FLOAT, false, 7 * sizeof(float), new IntPtr((5 * sizeof(float))));
- OpenGLInterops.glDrawElements(OpenGLInterops.GL_TRIANGLES, 6, OpenGLInterops.GL_UNSIGNED_INT, IntPtr.Zero);
- tex.Unbind();
- _colorShader.Unbind();
- OpenGLInterops.DeleteBuffers(1, ebo);
- OpenGLInterops.DeleteBuffers(1, vbo);
- OpenGLInterops.DeleteVertexArrays(1, vao);
Es läuft auch alles ohne Probleme durch, jedoch seh ich bis auf die ClearColor nichts von der Textur.. Hier noch mal der Fragment und VertexShader:
Kann jemand von euch einen Fehler erkennen oder mir sagen wie ich es anders/besser machen sollte?