ich hab ein paar Objekte in meiner Szene. Jedes Objekt ist in einer
display list gespeichert. Jetzt würde ich gerne eine 1D Textur nehmen
und über alle drüber "ziehen", aber nicht für jedes einzeln.
Ich hab daher folgende Einstellungen für die Generierung gewählt:
das passiert in der init.
Dann hab ich eine For schleife die mir jede Display liste "called".
Davor mach ich ein glEnable((GLenum)GL_TEXTURE_2D); und danach
ein glDisable((GLenum)GL_TEXTURE_2D);
Jetzt bekommt jedes objekt zwar die textur, aber jedes einzeln das
will ich ja nicht.
Ach so, ich benutzte die 2D Funktionen, als ob es 1D wären, das sollte
aber keine Probleme machen, oder doch?
Registriert: Do Dez 05, 2002 10:35 Beiträge: 4234 Wohnort: Dortmund
Habe mal das Pascaltag hinzugefügt.
Also im Normalfall macht es keinen Unterschied ob du 2D mit 1 Pixel höhe oder 1D benutzt. Allerdings solltest du dann alle Einstellungen auch für GL_T mit einstellen. Und nicht nur mit einem entschiedenen Manchmal. Allerdings berechnet die Grafikkarte so die Koordinaten für S und für T obwohl die für T immer gleich sind. Also könntest du ihr auch einen Gefallen tun und es weglassen.
Aber du solltest dir mal ein Demo von Sascha Willems anschauen. Unter OpenGL und dann recht weit unten findest du eine Demo zu projezierten Texturen. Er stellt dort noch eine Eye_plane ein und richtet seine Projection mittels der Texturmatrix aus. Habe es jetzt so im überfliegen nicht ganz verstanden was da vor sich geht.
Registriert: Do Dez 05, 2002 10:35 Beiträge: 4234 Wohnort: Dortmund
Also als erstes mal. 300 Pixel ist keine gültige Größe für Texturen. Ich sage nur Potenz von 2.
Aber beide deinem Problem denke ich, dass es durchaus einfachere Wege dafür geben würde. Ich hoffe mal, dass die Linien keine Tiefe sind sondern feste Bildschirmbereiche. Wenn dem so ist, dann kannst du mit dem ScissorTest (glScissor) das rendern auf einen bestimmten rechteckigen Bereich einschränken. Und da würde ich das einfach so machen, dass du für deine Objekte die entsprechende Farbe setzt und sie zeichnechst, dann den nächsten Scissor Bereich einstellst. Szene Zeichnen. Scissor. Szene.
Das bedeutet aber, dass du deine Szene 3 Mal zeichnen musst. Das ist natürlich nur bei halbwegs kleinen Szenen performant. Und es wäre nicht möglich irgendwann einen weichen Farbverlauf zu erzeugen. Aber das ist zu mindest die einfachste und schnellste Lösung. Als Alternative kämen sicherlich auch noch Shader in Frage. Aber wie man das dabei machen müsste ist mir nicht so ganz klar.
Die Textur wird im Bereich von 0 bis 1 angewendet, ist das richtig?
Aber im lokalen koordinaten system, wenn ich das richtig verstehe.
wie kann ich es im globalen anwenden lassen und dann halt trotzdem
auf die objekte anwenden?
Mal ne blöde Idee: Wie wärs, wenn Du die Szene ganz in Weiß renderst, und am Schluss ein Bildschirmfüllendes Quad mit deiner Textur drüberblendest?
Sprich: Helligkeitswerte aus dem Farbpuffer verwurschtelt mit den Farbinformationen aus der Textur, ähnlich wie im LichtUndSchatten tut.
_________________ Manchmal sehen Dinge, die wie Dinge aussehen wollen, mehr wie Dinge aus, als Dinge.
<Esmerelda Wetterwax>
Es kann vorkommen, dass die Nachkommen trotz Abkommen mit ihrem Einkommen nicht auskommen und umkommen.
Registriert: Do Sep 25, 2003 15:56 Beiträge: 7810 Wohnort: Sachsen - ERZ / C
Programmiersprache: Java (, Pascal)
Hmmm... Könnte man nicht einfach die Texturkoodinatengenerierung das übernehmen lassen. Irgendwie kann man doch Techturkoordinaten in Abhängigkeit von der Tiefe berechnen lassen.
Aber mal ganz anders gefragt: Für was brauchst du es eigentlich. Bevor wir hier Rätselraten... eventuell gibts andere einfache Lösungen.
_________________ Blog: kevin-fleischer.de und fbaingermany.com
Ok, ich werde mal grad erklären was ich genau vor habe.
Ich hab eine Szene, durch die ich durchlaufen möchte.
Die Szene besteht aus verschiedenen Objekten, die einfach
eine Farbe haben. Dann habe ich Geometrie, die
ich mit der Textur belegen möchte. Durch die Textur will
ich quasi höhenunterschiede darstellen. Die Geometrie sind
Wände die rechts und links angebracht sind. Jedes
Objekt ist jeweils in einer Displayliste und jedes Wandstück
auch. Was ich mit der Textur machen möchte, ist quasi sagen.
Nimm diese Textur und bringe sie im bereich von 0 bis z.B. 10
an und strecke sie auf diesen Bereich, alles was drüber ist soll
die letzte farbe der textur bekommen, alles was darunter ist
soll die erste farbe bekommen.
glColor funktioniert, glaub ich auch. Aber dann kann ich die Farbwerte zur Laufzeit nur ändern,
wenn ich auch die Displaylisten neu mache, was enorm die Performance einbrechen läßt.
Wie meinst du das mit glBindTexture?
Grundlegend funktioniert das ja sehr gut mit der 1D Textur und dann
automatische Texturkoordinaten generierung, aber wie bekomme ich es
hin, das die Textur nicht im Bereich von 0 bis 1 angewendet wird,
sondern in einem von mir defenierten Bereich, z.B. 0 bis 10.
Kann man die Textur nicht skalieren oder so, also mit Matrix operationen
da was machen?
Mitglieder in diesem Forum: 0 Mitglieder und 8 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.