![]() |
OpenGL 2D - Texturen laden
Ich versuche mit einem Tutorial (
![]() Es klappt allerdings nicht, ich sehe nur einen schwarzen Hintergrund und weiß nicht was ich falsch mache :| Mein Quellcode:
Delphi-Quellcode:
Ich weiß nicht wie ich die Textur auf das Quad beziehe aufjedenfall klappt es nicht...
var
Form1: TForm1; DC: HDC; RC: HGLRC; implementation {$R *.dfm} procedure TForm1.FormCreate(Sender: TObject); var BeanTex: glUInt; begin InitOpenGL; DC := GetDC(Handle); RC := CreateRenderingContext(DC, [opDoubleBuffered], 32, 24, 0, 0, 0, 0); ActivateRenderingContext(DC, RC); glEnable(GL_ALPHA_TEST); glAlphaFunc(GL_GREATER, 0.1); glEnable(GL_TEXTURE_2D); glMatrixMode(GL_PROJECTION); glViewport(0,0,ClientWidth,ClientHeight); glOrtho(0,640,0,480,0,128); glLoadIdentity; Application.OnIdle := Render; LoadTexture('Textures\Bean.tga', BeanTex, False); glBindTexture(GL_TEXTURE_2D, BeanTex); end; procedure TForm1.Render(Sender: TObject; var Done: Boolean); begin glMatrixMode(GL_MODELVIEW); glLoadIdentity; glEnable(GL_CULL_FACE); glCullFace(GL_BACK); glBegin(GL_QUADS); glTexCoord2f(0,0); glVertex3f(-1, -1, 0); glTexCoord2f(1,0); glVertex3f(1, 1, 0); glTexCoord2f(1,1); glVertex3f(1, 1, 0); glTexCoord2f(0,1); glVertex3f(-1, -1, 0); glEnd; SwapBuffers(DC); Done := False; end; Destroxi |
AW: OpenGL 2D - Texturen laden
Ich weiss es nicht genau, aber Du bindest die Textur im Create mit einer lokalen Variable. Versuch doch mal die Textur vor dem glBegin zu binden und die Variable irgenwie global zu setzen.
Ein Tipp ist ![]() |
AW: OpenGL 2D - Texturen laden
Kuck dir mal deine Vertexkoordinaten genauer an.
Du zeichnest kein Quad, sondern eine Linie. Weiters musst du beim Zeichnen, sofern Culling aktiv ist (Backface-Culling in deinem Fall) im richtigen Uhrzeigersinn zeichnen! Ach was mir gerade beim Schreiben auffällt: glOrtho(0,640,0,480,0,128); Du willst also in 2D zeichnen, warum verwendest du dann glVertex3f? Edit: @Vorgänger OpenGL ist imho eine riesen Statemachine, dh. wenn er ihr mitteilt, dass die Texture mit der ID "BeanTex" (Zahl) ab "jetzt" verwendet werden soll, so macht es nichts aus, wo er die Variable hat, sofern er sie nie wieder gebraucht. Schlechter Programmierstil - die Texturen müssen wieder freigegeben werden, daher in eine globale Variable speichern und per entsprechendem OpenGL Befehl freigeben! (Was ich damit sagen wollte, ist, dass es nicht daran liegt) |
AW: OpenGL 2D - Texturen laden
Zitat:
|
AW: OpenGL 2D - Texturen laden
Mhhh...
Habe es jetzt so:
Delphi-Quellcode:
Aber ich sehe nur weiß?
var
Form1: TForm1; DC: HDC; RC: HGLRC; BeanTex: glUInt; implementation {$R *.dfm} procedure TForm1.FormCreate(Sender: TObject); begin InitOpenGL; DC := GetDC(Handle); RC := CreateRenderingContext(DC, [opDoubleBuffered], 32, 24, 0, 0, 0, 0); ActivateRenderingContext(DC, RC); Application.OnIdle := Render; end; procedure TForm1.Render(Sender: TObject; var Done: Boolean); begin glEnable(GL_TEXTURE_2D); glBindTexture(GL_TEXTURE_2D, BeanTex); glEnable(GL_ALPHA_TEST); glAlphaFunc(GL_GREATER, 0.1); glEnable(GL_CULL_FACE); glCullFace(GL_GREEN); glBegin(GL_QUADS); glTexCoord2f(0,0); glVertex2f(0,0); glTexCoord2f(1,0); glVertex2f(1,0); glTexCoord2f(1,1); glVertex2f(1,1); glTexCoord2f(0,1); glVertex2f(0,1); glEnd; SwapBuffers(DC); Done := False; end; Warum? |
AW: OpenGL 2D - Texturen laden
Jetzt hast du das Erstellen der Textur herausgenommen; die Frage ist, warum? Willst du nicht eine Textur anzeigen?
|
AW: OpenGL 2D - Texturen laden
Achja klar^^
Ich packs ma wd rein... €: Jetzt gehts *juhu* ;) |
AW: OpenGL 2D - Texturen laden
Ist die Frage beantwortet ?
Wenn nicht: es gibt eine Menge Fehlerquellen, wenn man etwas in OpenGL darstellen möchte, aber es nicht klappt. Was mir immer wieder passiert ist, dass ich vergesse die Alpha Werte richtig zu setzen und sie die ganze Zeit auf 0 stehen. Logischerweise sieht man dann nix. Aber ich glaub bei dir wird die Textur viel zu klein gezeichnet. Zitat:
Nachtrag: bei den 4 glVertex3f()-Aufrufen solltest du 4 Eckpunkte der Zeichnung angeben, du hast da aber nur 2 (-1, -1, 0) und (1, 1, 0). MfG |
Alle Zeitangaben in WEZ +1. Es ist jetzt 08:57 Uhr. |
Powered by vBulletin® Copyright ©2000 - 2025, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024-2025 by Thomas Breitkreuz