Hab es soweit übernommen. Und wir nähern uns dem Ziel ein Stückchen. Also ein weißes Viereck wird angezeigt, was aber leider nicht die Textur enthält. Dieses folgt jedoch präziese der Maus. Und so langsam verstehe ich auch den Zusammenhang der Parameter. Die Zeichenfläche mit glortho auf die größen von clientwidth und -height zu setzen scheint mir sehr sinnvoll, weil ich dann so ähnlich arbeiten kann, wie ich es früher bei timage.canvas getan habe .
Die letzte Zeile (SwapBuffers(DC); ) hast du weggelassen. Ich weiß nicht, ob das absichtlich war. Wenn ich sie weglasse, wird garnichts ausgegeben.
Mir schien es außerdem sinnvoller, glBindTexture in der Renderprocedure aufzurufen, da ich möglicherweise später mal mehrere Texturen in das Projekt einbauen möchte .
ich hab die zeile nicht weggelassen, ich rufe sie nur am ende des onIdle Handlers auf dort steht sie in einer ecke wo ich nicht immer rumbastle und stört mich somit nicht ständig
das du nur ein weißes viereck siehst könnte daher kommen das du eventuell glEnable(GL_Texture_2D); vergessen hast?
Jetzt klappt es. Die Textur war gedreht, mit veränderten Texturkoordinaten funktioniert es aber:
Code:
glTexCoord2f(0,0); glVertex3f(mx - half_width, my - half_height, -1); glTexCoord2f(0,1); glVertex3f(mx - half_width, my + half_height, -1); glTexCoord2f(1,1); glVertex3f(mx + half_width, my + half_height, -1); glTexCoord2f(1,0); glVertex3f(mx + half_width, my - half_height, -1);
Mein nächstes Problem: Der Alpha-Kanal der Textur scheint nur 1 bit zu haben. Jeder Pixel ist entwer in der Farbe der Textur oder in der der Hintergrundfarbe, was das Bild sehr eckig wirken lässt.
Registriert: Di Okt 13, 2009 17:25 Beiträge: 365
Programmiersprache: C++
marian hat geschrieben:
Mein nächstes Problem: Der Alpha-Kanal der Textur scheint nur 1 bit zu haben. Jeder Pixel ist entwer in der Farbe der Textur oder in der der Hintergrundfarbe, was das Bild sehr eckig wirken lässt.
Das liegt daran, dass du Alpha-Testing verwendest und nicht Alpha-Blending. Siehe dazu Tutorial Lektion 7.
Zuletzt geändert von mrtrain am Mi Aug 31, 2011 20:28, insgesamt 1-mal geändert.
Ich habe noch zwei weitere Fragen: Wie kann man ein Quad um den Mittelpunkt drehen? Der Code in dem Tutorial klappt nicht (es wird danach nichts mehr angezeigt). Ich bin mir nicht sicher, aber ich glaube, ich muss es nach dem gedrehten Quad irgendwie wieder zurrücksetzen um die nächsten Quads zu zeichnen. Leider gab es in dem Tutorial keine Angaben dazu.
Wie kann ich ein Quad mit Textur transparent darstellen? Ich möchte ein Quad mit Textur (und Alpha-Kanal) ausblenden lassen und dafür möchte ich es transparent darstellen.
Registriert: Do Sep 25, 2003 15:56 Beiträge: 7810 Wohnort: Sachsen - ERZ / C
Programmiersprache: Java (, Pascal)
Zu aller erst verschiebst du den Ursprung ins Zentrum des Quads. dann kannst du per rotate den neuen Winkel setzen und dann zeichnest du das quad.
Wenn du nichts siehst, kann das daran liegen, dass du zu nah an der Szene bist. Verschieb alles etwas weiter weg, und versuch es noch einmal. Schau auch mal das Tutorial_Matrix2 an.
_________________ Blog: kevin-fleischer.de und fbaingermany.com
Registriert: Di Okt 13, 2009 17:25 Beiträge: 365
Programmiersprache: C++
marian hat geschrieben:
Wie kann ich ein Quad mit Textur transparent darstellen? Ich möchte ein Quad mit Textur (und Alpha-Kanal) ausblenden lassen und dafür möchte ich es transparent darstellen.
Mit glColor4f kannst du die Farbe der Vertices (und damit die des Quads) festlegen. Der letzte Parameter ist dabei der Alpha-Kanal. Alle vier Werte werden in der Standardeinstellung mit der Texturfarbe multipliziert. Wenn du also z.B.
Code:
glColor4f(1, 1, 1, 0.5);
glBegin(GL_QUADS);
// usw...
schreiben tust, ist dein Quad da, wo der Alpha-Wert der Textur eigentlich 1 ist, halbtransparent. Da, wo die Textur 0.5 sagt, ergibt sich ein endgültiger Alpha-Wert von 0.25 usw...
Zuletzt geändert von mrtrain am Mi Aug 31, 2011 20:29, insgesamt 1-mal geändert.
Danke für die Antworten, klappt alles wunderbar, und ich muss sagen, mein kleines Projekt macht schon einiges her.
Eine weitere Frage: Wie kann ich einen Text auf dem Bildschirm ausgeben? Wenn es dazu ein Tutorial / Wiki-Eintrag gibt, würde ich euch bitten, den zu verlinken, da ich keinen gefunden habe.
Registriert: Di Okt 13, 2009 17:25 Beiträge: 365
Programmiersprache: C++
Textdarstellung mit OpenGL ist schon etwas komplexer. Grundsätzlich gibt es zwei Ansätze:
Man erstellt sich eine Textur in der alle Zeichen, die man braucht abgebildet sind. Dazu natürlich die uv-Koordinaten. Wenn man den Text darstellt rendert man einfach Vierecke mit den gespeicherten Texturkoordinaten. Bei diesem Verfahren hat man leider den Nachteil, dass die Schriften nicht mehr schön aussehen, wenn man sie skaliert.
Eine Alternative wäre, die Zeichen in Vektorform zu speichern (wie Windows es z.B. auch tut) und sie dementsprechend komplexer zu rendern. Das zu implementlieren ist relativ aufwändig und erfordert schon einiges an Zeit. Dafür kann man die Schriften skalieren wie man will, ohne dass es verpixelt aussieht.
Zum Glück bist du nicht der Erste, der vor diesem Problem steht. Die Textsuite von Lossy eX ist in diesem Forum hier recht beliebt und nimmt dem Delphi-Programmierer einiges an Arbeit ab. Allerdings benutze ich sie nicht selber (ich arbeite mit C++), kann dir dazu also keine genaueren Fragen beantworten.
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.