Texture0 ist die TMU, auf die die Textur gebunden wurde, also irgendwas von 0 bis 15 normalerweise. Hab das aber noch nie benutzt, könnte also auch so falsch sein, wie der code in meinem letzten Beitrag. bzw Wenn du das über die z koordinate (Höhe) machst, siehts etwa so aus:
ggf muss es auch vec2(0.0, altitude) heißen, bzw es kann auch sein, dass auch (oder nur?) ein
Code:
texture1D(Texture0, altitude)
dir die richtigen Werte zurückgibt. Kommt wahrscheinlich darauf an, ob dus als 2d Textur oder als 1d Textur erzeugt hast.
Webgl kennt nur 2d Texturen. Ich habe mal all deine Vorschläge durchprobiert und bekomme unterschiedliche Effekte:
gl_FragColor =texture2D(uSampler, vec2(0.0,altitude)); //Buntes Bild, siehe Screenshot gl_FragColor =texture2D(uSampler, vec2(altitude,0.0)); //komplett rot das Objekt. Das untere Ende der Textur wird wohl benutzt. gl_FragColor =texture2D(uSampler, altitude); //Buntes Bild, siehe Screenshot das mit der Endung .rgb funzt nicht, ist das wichtig?
Screenshot: -> Irgendwas wird noch falsch gemacht von mir
Hier meine TExtur (hab sie zur besseren Erkennung auf 20px skaliert):
Die z-Werte gebe ich wie anfangs von Coolcat beschrieben als Weltkoordinaten weiter an den Pixelshader.
Und dann immer noch das Grundverständnis: Woher weiß der Fragmentshader, welchem z-Wert er welcher Farbe aus der TExtur zuordnen soll, z.B. dass der höchste Wert die Farbe rot bekommen soll?
Und dann immer noch das Grundverständnis: Woher weiß der Fragmentshader, welchem z-Wert er welcher Farbe aus der TExtur zuordnen soll, z.B. dass der höchste Wert die Farbe rot bekommen soll?
Tja, genau das fehlt Texturkoordinaten müssen immer zwischen 0 und 1 liegen. Bei größeren Werten wird die Textur wiederholt (*), darum bekommst du das was du oben als "Buntes Bild" bezeichnest: Für jeden Höhenmeter wird die Textur wiederholt.
Oben sagst du das deine Höhenwerte zwischen -5000 und 100 liegen. Also:
Code:
float texcoord = (altitude + 5000.0) / 5100.0; // = (altitude - Minimum) / (Maximum-Minimum) texcoord = clamp(texcoord, 0.0, 1.0); gl_FragColor = texture2D(uSampler, vec2(0.0,texcoord)); gl_FragColor.a = 1.0; // <-- die Textur liefert nur rgb, folglich sollte man den Alpha-Wert auf 1 setzen.
Zitat:
das mit der Endung .rgb funzt nicht, ist das wichtig?
texture2D liefert einen vec4 und gl_FragColor ist ebenfalls ein vec4. Da sharkman einen vec3 für die Farbe benutzt hatte musste er von den vier Werten drei auswählen. In GLSL kannst du mittels ".x", ".y", ".z" und ".w" auf die einzelnen Werte des vec4 zugreifen. Diese kannst du auch beliebig kombinieren, also ".xy" oder ".wzx". Zudem kannst du statt "xyzw" auch die Buchstaben "rgba" oder "stpq" benutzen, du musst dich aber für einen Buchstabensatz entscheiden, also ".xgb" geht nicht. Welchen Buchstabensatz du nimmst ist dem Compiler egal, üblicherweise nimmt man aber "xyzw" für Koordinaten, "rgba" für Farben und "stpq" für Texturkoordinaten.
(*) das ist die Default-Einstellung. Siehe glTexParameter mit GL_TEXTURE_WRAP_S bzw. GL_TEXTURE_WRAP_T.
Mitglieder in diesem Forum: 0 Mitglieder und 4 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.