1. ProjektanforderungenDas Projekt muss eine Funktion haben: Wenn ein Lichtpunkt einen Pfad durchquert, leuchten alle Positionen auf dem Pfad auf. 2. DokumentinhaltDie Funktion ähnelt der Radiergummifunktion dieses großen Gottes: https://forum.cocos.org/t/2-0-8/74246 Der Weg, den die Projektanforderungen nehmen, ist allerdings von unscharfen Rändern umgeben – er wird von der Mitte zum Rand hin dunkler. Also, Shader-Beispiele, die von den Meistern aus dem Internet übernommen wurden, ähneln den folgenden Beispielen: Ich habe einige Änderungen an den Schultern des großen Gottes vorgenommen, um den Anforderungen des Projekts gerecht zu werden. 3. ProjektbeispieleHier ist ein Beispiel aus meinem eigenen Testprojekt: (Bitte ignorieren Sie die schlechte Bildqualität, ich bin zu faul, eine Bildschirmaufzeichnungssoftware zu installieren) 4. ProjektcodeSliderPointLight.ts Konstante { cc-Klasse, Eigentum } = cc._Dekorateur; @ccklasse exportiere Standardklasse Follow_spot erweitert cc.Component { @Eigenschaft(cc.Node) bg: cc.Node = null; Material: cc.Material = null; Mitte: Zahl[] = [0,5, 0,5]; testArr: Zahl[] = []; beim Laden() { dieses.material = dieses.bg.getComponent(cc.Sprite).getMaterial(0); dieses.material.setProperty('wh_ratio', diese.bg.width / diese.bg.height); dieses.material.setProperty('mitte', dieses.mitte); //Der wichtigste Satz in js ist dieser, wobei der Parameter die Array-Länge * die Dimension des Vektors im Array ist this.material.setProperty('colorArr', new Float32Array(400)); //Wenn Sie hier Einstellungen vornehmen, müssen Sie die Vektorkomponenten im Array in ein eindimensionales Array erweitern. this.material.setProperty('colorArr', []); dies.bg.on(cc.Node.EventType.TOUCH_MOVE, dies.touchMoveEvent, dies); } touchMoveEvent(evt: cc.Event.EventTouch) { this.center[0] = evt.getLocation().x / this.bg.width; this.center[1] = 1 - evt.getLocation().y / this.bg.height; Konsole.log(dieses.Center); dieses.material.setProperty('center', dieses.center); wenn (this.testArr.length >= 400) { dies.testArr.shift(); dies.testArr.shift(); } dies.testArr.push(dieses.center[0]); dies.testArr.push(dieses.center[1]); //Der wichtigste Satz in js ist dieser, wobei der Parameter die Array-Länge * die Dimension des Vektors im Array ist this.material.setProperty('colorArr', new Float32Array(this.testArr)); //Wenn Sie hier Einstellungen vornehmen, müssen Sie die Vektorkomponenten im Array in ein eindimensionales Array erweitern this.material.setProperty('colorArr', this.testArr); } } SliderPointLight.Effekt CCEeffekt % { Techniken: -Pässe: -vert: vs frag: fs Mischungszustand: Ziele: -blend: wahr rasterizerState: cullMode: keiner Eigenschaften: Textur: Wert: weiß } wh_verhältnis: Wert: 1,78, Editor: Tooltip: „Seitenverhältnis“ } } verwischen: Wert: 0,35, Editor: Tooltip: „Blendenunschärfestufe“ } } Radius: Wert: 0,5, Editor: Tooltip: „Blendenradius“ } } Center: Wert: [0,5, 0,5], Editor: Tooltip: „Blendenstartpunkt“ } } FarbeArr: { Wert: [0,5, 0,5, 0,5, 0,5] } } % CCProgram vs. % Präzisions-Hochleistungsschwimmer; #einschließen <cc-global> #einschließen <cc-local> in vec3 a_position; in vec4 a_color; ausgegebenes vec4 v_color; #wenn USE_TEXTURE im Vektor 2 a_uv0; ausgegebener vec2 v_uv0; #endif void main() { vec4 pos = vec4(a_position, 1); #wenn CC_USE_MODEL pos = cc_matViewProj * cc_matWorld * pos; #anders pos = cc_matViewProj * pos; #endif #wenn USE_TEXTURE a_uv0; #endif v_Farbe = eine_Farbe; gl_Position = pos; } } % CCProgramm fs % { Präzisions-Hochleistungsschwimmer; #include <Alphatest> in vec4 v_color; #wenn USE_TEXTURE im Vektor 2 v_uv0; einheitliche Sampler2D-Textur; #endif einheitliches ARGS Schwimmradius; schwebende Unschärfe; vec2 Mitte; Gleitkommazahl wh_verhältnis; }; //Effektdefinition einheitlicher Metaball { vec4 FarbeArr[100]; }; void main() { vec4o = vec4(1, 1, 1, 0); o *= Textur(Textur, v_uv0); o *= v_Farbe; Gleitkommakreis = Radius * Radius; für (int i = 0; i < 100; i++) { float FarbeX = FarbeArr[i].x; FarbeY = FarbeArr[i].y; float rx = FarbeX * wh_verhältnis; float ry = FarbeY; float dis = (v_uv0.x * wh_ratio - rx) * (v_uv0.x * wh_ratio - rx) + (v_uv0.y - ry) * (v_uv0.y - ry); oa = Smoothstep(Kreis, Kreis - Unschärfe, Unschärfe) + oa; } gl_FragColor = o; } }% Oben finden Sie Einzelheiten dazu, wie CocosCreator die Textur an der Stelle anzeigen kann, an der Sie wischen. Weitere Informationen zu CocosCreator finden Sie in den anderen verwandten Artikeln auf 123WORDPRESS.COM! Das könnte Sie auch interessieren:
|
<<: So deinstallieren Sie MySQL 5.7.19 unter Linux
>>: Docker installiert das offizielle Redis-Image und ermöglicht die Kennwortauthentifizierung
In diesem Artikelbeispiel wird der spezifische Co...
Die Gesamtarchitektur von NGINX ist durch eine Re...
Lassen Sie uns über einige Probleme sprechen, die ...
Heute bin ich auf das MySQL-Dienstfehlerproblem 1...
Umwelterklärung Host-Betriebssystem: Cetnos7.9 Mi...
Inhaltsverzeichnis 1 Mount-Verzeichnisse und Date...
Ich habe gerade angefangen, React für Projekte zu...
Tomcat selbst optimieren Tomcat-Speicheroptimieru...
Vorwort Es wird gesagt, dass sich die für Betrieb...
Inhaltsverzeichnis 1. Einleitung 2. Installieren ...
Inhaltsverzeichnis 1. Zweck 2. Grammatik 3. Üben ...
Aus beruflichen Gründen habe ich vor Kurzem einig...
Vorwort Bei der Projektfreigabe ist immer eine Ve...
Vue+Openlayer verwendet „modify“, um Elemente zu ...
Inhaltsverzeichnis Vorwort Fügen Sie Sudo-Schreib...