2016-11-09 2 views
1

Ist es möglich, mehrere Strahler mit QtGraphicalEffects irgendwie zu bekommen?Qt QML Strahler Wirkung

Die karierten Teile unter dem transparenten Gradienten ist ein Platzhalter für jeden QML Item-ähnlichen Typ. Das Endergebnis könnte also eine vollständige Szene mit animierten Elementen sein, die unter dem Effekt laufen.

Ich habe nur in der Lage gewesen, mit einer Lösung zu kommen, die einen Image Typen mit 4 Rectangle Typen verwendet, um den Behälter übergeordneten Objekt verankert und die Image - aber mit diesem Ansatz kann ich nur einen Scheinwerfer Overlay auf der Szene zu jeder Zeit

Spotlight effect

ich möchte es so konnte ich mehrere Strahler über eine Szene haben, die gut mischen: enter image description here

Antwort

0

Ich würde persönlich einen ShaderEffect mit einem einfachen Shader verwenden, der die Ausgabe verdunkelt, wenn der Abstand vom Zentrum zunimmt. Das wäre billiger als die Verwendung von Texturen, da es keine erfordert. Wenn Sie mehrere Spotlights wünschen, erstellen Sie einfach mehrere Instanzen des Shader-Effekts. Sie können den Falloff parametrisieren und animieren und auch Dinge wie Kolorierung oder variable Intensität für Dinge wie flackernde Effekte hinzufügen.

Sie müssen Szene zu einer Textur rendern, für die Sie einfach ShaderEffectSource verwenden können. Dann müssen Sie die Szene tatsächlich ausblenden, um einen schwarzen Hintergrund dahinter zu zeigen. Dann müssen Sie diese Textur an jeden Shader übergeben, der Pixel in der Nähe der Mitte des Spotlights "enthüllt". Wenn Sie kein vollständiges Schwarz wünschen, können Sie die Opazität verwenden, um die Szene zu optimieren, jedoch nicht direkt auf dem Szenenelement, sondern auf einem übergeordneten Containerelement, um die Texturquelle vollständig undurchsichtig zu lassen.

+0

Danke! Shaders kam mir in den Sinn - das große Problem ist, dass ich sie nicht gut verstehe - und es fällt mir schwer, Beispiele aus dem Netz über QML zu bekommen - vielleicht könntest du ein funktionierendes (QML) Beispiel mit deiner Antwort posten? – Larpon

+0

Ich bin zur Zeit ziemlich beschäftigt, vielleicht später (wie in ein paar Tagen) werde ich ein Beispiel veröffentlichen. Verständnis Shader ist jedoch nicht so komplex und eine brauchbare Fähigkeit zu haben. QML ist keine Voraussetzung für Shader, du kannst die beiden parallel lernen. – dtech

+0

Ich weiß, aber die überwiegende Mehrheit der Beispiele rund um das Netz basiert auf z. [webGL] (https://www.shadertoy.com/view/Mlt3Df) mit Websites, die einige der grundlegenden Stuff verbirgt - wo Sie sowohl fragColor und fragCoord in der gleichen Haupt-etc. haben - es ist verwirrend für mich, weil die QML 'ShaderEffect' hat diese unterteilt (über fragmentShader und vertexShader Strings, die den Code enthalten) - aber die Beispiele auf z shadertoy hat beides verfügbar – Larpon