Es hängt davon ab, was Sie und der Dozent mit "Transparenz" meint. Was folgt, ist zur Verdeutlichung sehr vereinfacht.
Der erste Teil von transparenten Objekten ist die Tiefensortierung. Wenn Sie ein three.js-Material erstellen, ermöglicht material.transparent = true;
die Tiefensortierung, bei der Szenenobjekte auf der Grundlage der Tiefe der Kamera in die Renderreihenfolge und nicht in der Reihenfolge, in der sie hinzugefügt wurden, platziert werden. Dies stellt sicher, dass die transparenten Objekte ihre Farben korrekt mischen. Das war wahrscheinlich, was der Dozent sagen wollte, war im Shader schwer zu machen, weil sich der Shader auf das Zeichnen des aktuellen Fragments konzentriert und nicht viel Information über die umgebende Szene hat.
Der zweite Teil der Transparenz - mit der Sie wahrscheinlich vertrauter sind - ist die Einstellung eines Deckkraftwerts für das Material. Wenn Sie in einem beliebigen Fragment-Shader suchen, wird als letztes die Farbe des Fragments festgelegt, bei der es sich um eine vec4
handelt.
gl_FragColor = something;
Der vierte Wert des vec4
ist die alpha (Opazität) -Wert. Sie könnten manuell ein Fragment Halb tranparent rot wie folgt festgelegt:
gl_FragColor = vec4(1.0, 0.0, 0.0, 0.5);
Aber noch einmal, wenn das Objekt nicht richtig Tiefen sortiert ist, kann die Transparenz nicht funktionieren, wie Sie es erwarten.
In Bezug auf Ihre Frage, wie Werte an den Shader übergeben werden, stimme ich den obigen Kommentaren zu: Ihre zweite Frage sollte in einen separaten Beitrag aufgeteilt werden.
Das heißt, uniform
s, attribute
s, und varying
s sind allgemeine und grundlegende Typ-Qualifier in Shadern. Jeder hat sehr spezifische Anwendungen, und es klingt, als ob Sie den Unterschied nicht ganz verstehen (das ist in Ordnung, Sie lernen immer noch). Ich empfehle, ein wenig mehr darüber zu lesen, wie man jeden von ihnen richtig verwendet (und StackOverflow ist natürlich ein guter Platz für Antworten like this one).
Sie sollten es vermeiden, mehrere Fragen gleichzeitig zu stellen, da dies die Wahrscheinlichkeit verringert, eine Antwort zu erhalten. Man müsste die Lösung für alle Fragen kennen, um eine Antwort zu schreiben. – BDL
Vielleicht können Sie uns auch den Grund nennen, warum der Vortragende gesagt hat, dass es sehr schwierig ist, Transparenz in Shadern zu verwenden. Es ist nicht so schwer AFAIK – 2pha
ich stimme zu, die Weitergabe einzelner Float Transparenz Wert an den Fragment-Shader über Uniform ist nicht so schwer – DanP