2016-11-09 6 views
1

何とかQtGraphicalEffectsを使用して複数のスポットライトを取得することはできますか?Qt QMLスポットライト効果

透明グラデーションの下のチェッカーされた部分は、QML Itemのようなタイプのプレースホルダです。最終的な結果は、アニメーションアイテムがエフェクトの下で実行されている完全なシーンになります。

私は唯一の4つのRectangle親コンテナに固定型とImageImageタイプを使用して解決策を考え出すことができました - しかし、この方法で私は現場に1つのスポットライトオーバーレイを持つことができます

Spotlight effect

いずれかの時点で私はそれは私がうまくブレンド1つのシーンの上に複数のスポットライトを持つことができたいと思います: enter image description here

答えて

0

私は個人的にShaderEffectを使って、中心からの距離が増すにつれて出力を暗くするシンプルなシェーダを使用します。テクスチャを使うよりも安くなるでしょう。テクスチャを必要としないからです。複数のスポットライトが必要な場合は、シェーダエフェクトのインスタンスを複数作成するだけです。フォールオフをパラメータ化してアニメートすることもできます。また、ちらつき効果のようなもののために色付けや可変強度を追加することもできます。

単純にShaderEffectSourceを使用できるテクスチャにシーンアイテムにレンダリングする必要があります。その後、実際にその背景を隠す必要があり、その背景に黒い背景を表示する必要があります。次に、そのテクスチャを各シェーダに渡す必要があります。シェーダは、スポットライトの中央付近にあるピクセルを「公開」します。完全に黒くしたくない場合は、不透明度を使用してシーンを調整することはできますが、シーンアイテムではなく親コンテナアイテムで調整して、テクスチャソースを完全に不透明にします。

+0

ありがとうございます!シェイダーは私の心を邪魔しました - 大きな問題は私がよく理解していないということです。ネットでQMLを使ってサンプルを取得するのは苦労します。 – Larpon

+0

私は現在かなり忙しく、後で(数日のように)私は例を掲載します。しかし、シェイダーを理解することは複雑ではなく、使用するためのスキルでもありません。 QMLはシェーダの要件ではなく、2つを同時に学習することができます。 – dtech

+0

私は知っているが、ネットの周りの例の大部分は、例えば、基本的なスタフを隠しているサイトを使って[webGL](https://www.shadertoy.com/view/Mlt3Df) - 同じメインにfragColorとfragCoordの両方を持っているところ - 私は混乱します。 QML 'ShaderEffect'は、これらを(コードを保持するfragmentShaderとvertexShaderの文字列を使って)分割していますが、例えばshadertoyは両方とも利用可能です – Larpon

関連する問題