Hallo Commnity, ich bin neu hier im Forum. Ich habe mit OpenGL bzw. SharpGL begonnen. Nun würde ich gerne eine Textur zeichen. Leider fehlt mir der Ansatz.
Grüße Andy
SharpGL Textur Zeichnen
- Schrompf
- Moderator
- Beiträge: 5159
- Registriert: 25.02.2009, 23:44
- Benutzertext: Lernt nur selten dazu
- Echter Name: Thomas
- Wohnort: Dresden
- Kontaktdaten:
Re: SharpGL Textur Zeichnen
(Frei geraten, ich kenne nur DirectX)
Erstelle ein Vertex Buffer Object mit vier Vertices. In jedem Vertex gibst Du nun zusätzlich zur Position noch zwei floats Texturkoordinaten an. Texturkoordinaten geben den Punkt auf der Textur an, den der Vertex erreicht. Bei OpenGL ist dann jeweils der erste Float die X-Koordinate, der geht auf der Texturgrafik links bei 0.0f los und geht bis zum rechten Rand mit 1.0f. Der zweite float ist y, der beginnt am unteren Rand mit 0.0f und geht bis zum oberen Rand mit 1.0f. Du gibst also einem Vertex die Texturkoordinate links oben, dem nächsten rechts oben usw.
Dann baust Du aus diesen vier Vertices ganz normal zwei Dreiecke und zeichnest die. Dein Fragment Shader muss dann natürlich erweitert werden, so dass er die Texturkoordinaten vom Vertex Shader bekommt und mit diesen Texturkoordinaten aus einer Textur samplet.
Erstelle ein Vertex Buffer Object mit vier Vertices. In jedem Vertex gibst Du nun zusätzlich zur Position noch zwei floats Texturkoordinaten an. Texturkoordinaten geben den Punkt auf der Textur an, den der Vertex erreicht. Bei OpenGL ist dann jeweils der erste Float die X-Koordinate, der geht auf der Texturgrafik links bei 0.0f los und geht bis zum rechten Rand mit 1.0f. Der zweite float ist y, der beginnt am unteren Rand mit 0.0f und geht bis zum oberen Rand mit 1.0f. Du gibst also einem Vertex die Texturkoordinate links oben, dem nächsten rechts oben usw.
Dann baust Du aus diesen vier Vertices ganz normal zwei Dreiecke und zeichnest die. Dein Fragment Shader muss dann natürlich erweitert werden, so dass er die Texturkoordinaten vom Vertex Shader bekommt und mit diesen Texturkoordinaten aus einer Textur samplet.
Früher mal Dreamworlds. Früher mal Open Asset Import Library. Heutzutage nur noch so rumwursteln.
Re: SharpGL Textur Zeichnen
Danke für deine Antwort. ich habe es Teilweise hin bekommen. Das Ganze geht mit SharpGL eigendlich sehr einfach:
1. Texture Klasse erstellen
2. Texture Laden
3. Texture2D Aktivieren
4. Texture Binden
5. Texturkoordinaten für ein Vertex festlegen
Leider habe ich als Ergebnis nur die Farbe der Textur Bekommen, ich denke aber, das liegt daran das ich ein Fehler bei den TextCoord gemacht habe, oder da die Textur ziemlich groß ist.
1. Texture Klasse erstellen
Code: Alles auswählen
SharpGL.SceneGraph.Assets.Texture text = new SharpGL.SceneGraph.Assets.Texture();
Code: Alles auswählen
text.Create(gl, Properties.Resources.Grass0059_5_S);
Code: Alles auswählen
gl.Enable(OpenGL.GL_TEXTURE_2D);
Code: Alles auswählen
text.Bind(gl);
Code: Alles auswählen
gl.Begin(OpenGL.GL_POLYGON);
gl.TexCoord(0.0f, 1.0f);
gl.Vertex(-2.0f, 0.0f, 0f);
gl.TexCoord(0.0f, 1.0f);
gl.Vertex(2.0f, 0.0f, 0.0f);
gl.TexCoord(0.0f, 1.0f);
gl.Vertex(0.0f, 2.5f, 0.0f);
gl.End();
Leider habe ich als Ergebnis nur die Farbe der Textur Bekommen, ich denke aber, das liegt daran das ich ein Fehler bei den TextCoord gemacht habe, oder da die Textur ziemlich groß ist.
Re: SharpGL Textur Zeichnen
...du übergibst auch 3x die gleiche Texturkoordinate. ;-)