問題タブ [scenegraph]
For questions regarding programming in ECMAScript (JavaScript/JS) and its various dialects/implementations (excluding ActionScript). Note JavaScript is NOT the same as Java! Please include all relevant tags on your question; e.g., [node.js], [jquery], [json], [reactjs], [angular], [ember.js], [vue.js], [typescript], [svelte], etc.
opengl - 実行時に同じモデルで異なるシェーダーを使用する
私はすでに同様の質問をしましたが、ここでは少し不明確ですが、今回は非常に具体的で要点を述べます。
パワーアップをつかむ俳優がいるとします。彼はブルーム シェーダを使用して光り始め、10 秒後に通常の状態に戻り、デフォルト シェーダを再び取り付けます。質問は基本的に次のように要約されます。
実行時に同じモデルで異なるシェーダーを使用する方法は?
次の非常に単純な例を検討してください。
デフォルトのシェーダー:
RendererGLES20 内のレンダリング コードは次のようになります。
簡単です!ここで、アクターがパワーアップし、次のクレイジー シェーダーが適用されたとします。
クレイジー シェーダー:
ご覧のとおり、このシェーダーをモデルにアタッチするには、実際のレンダラー ソース コードを次のように変更する必要があります。
異なるシェーダーをアタッチするために、非常に異なるコードを記述する必要があることがわかります。デフォルトのシェーダを再度アタッチしたい場合はどうすればよいですか? (これは、シェーダーのアタッチとデタッチが実行時に行われる必要があります。例: アクターがパワーアップを収集)。
これを効率的かつ簡単に実装して、モデルが実行時にシェーダーを変更できるようにする方法はありますか? 素敵な実装/アイデアを楽しみにしています。皆さんなら、上記の問題をどのように処理しますか?
sorting - オブジェクトの階層内での兄弟の並べ替え
2D ゲームで使用するシーン ツリーを実装しました。ツリー ノードには、変換と描画可能なオブジェクトが含まれています。
シーン ツリーは次のようになります。
シーンを描画するために、ツリーは最初に深さ優先順にトラバースされます。トラバーサル中、ドローアブルはレンダー キューに収集されます。次に、レンダ キューがレンダラーに渡されて処理されます。
ドローアブルは深さ優先の順序で収集されるため、これはレンダラーによって描画される順序でもあります。描画順序を変更するには、ツリー ノードを再配置する必要があります。たとえば、ノード G をノード F の前に描画したい場合は、それらを交換する必要があります。ノードを再配置する必要がないように変更したいと思います。代わりに、レンダラーはレンダー キューをそれ自体でソートできる必要があります。
問題:
兄弟ノードの各グループ ([A、B、C] または [F、G] または [D、E] など) は、階層が損なわれないように個別にソートする必要があります。ツリー ノードが直接ソートされている場合、これは問題になりません。ただし、ツリーがレンダー キューにフラット化されると、事態は複雑になります。
私の質問:
ノードの階層を乱さずにレンダー キューを並べ替えるにはどうすればよいですか?
この種の問題に対する代替ソリューションはありますか?
追加情報:
私が見つけることができる最良のリソースは、ブログ記事Order your graphics draw calls aroundです。複数の情報のチャンクから組み立てられた 64 ビット キーを使用して、レンダー キューを並べ替える方法について説明します。しかし、それは私が抱えている問題には対処しません。
ツリー ノードを直接ソートするだけで満足しないのはなぜかと疑問に思われるかもしれません。理由は 2 つあります。まず、懸念事項を分けておきたいからです。レンダラーが正しい順序でノードを描画するようにシーン ツリー内のノードを再配置しても、この目的には役立ちません。第 2 に、非表示のノード/ドローアブルをソートから除外することはできません (レンダー キューには、可視のドローアブルのみが含まれます)。
java - 描画順をオーバーライドする Scene2D のステージ
とがいくつかある複雑なScene2D
グラフが与えられます。ユーザーにいくつかを選択して最後に描画してもらい、他の.libgdx
Group's
Actor's
Actors
Actors
Stage
2回繰り返したいと思います。最初に unselected を描画しActors
、2 回目に selected を描画しactors
ます。ただし、この動作を強制する「良い」方法はありません。
私はきれいなオプションを好むでしょう。この小さな追加のためだけに、メソッドの実装全体をコピーしたくありません。
機能しないもの:
- () メソッドは、
Actor's
toFront
その兄弟に対してのみ機能します。 - ステージ内の場所の交換
Actor's
: これにより、持っている変換が変更されActors
ます。
考えるべきシナリオ:Root
グループgAとグループgBを持つ があります。Group
gAには 2 つのイメージiA1とiA2が含まれています。Group
gBには 1 つのイメージiBが含まれます。Group
gAが最初にステージに追加され、そのイメージiA1がiBとオーバーラップするとします。ここで、 iA1を選択してiBの上に表示します。gA.toFront()だけを呼び出したくありません。これにより、gA全体が前面に配置されます。つまり、 iA2も前面に配置されます。iA2を入れるGroup
in front には、イメージの一部をgB内に隠すという望ましくない効果があります。Group
javascript - Three.js - 相対回転の計算
THREE.Scene
2 つのメッシュが追加された と がありmeshA
、meshB
それぞれが異なる方法で回転されています。私の目標は、シーンから削除meshB
して の子として再度追加することですがmeshA
、そのグローバルな位置と回転は維持されます。つまり、 の位置と回転はmeshB
、このコードの前後で同じように表示されるはずです。
私の現在の、ほとんど機能する試みは次のとおりです。
ポジショニングは正常に機能します。回転は、 と が同じ軸を中心に回転しているmeshA
場合にのみ機能します。 とが異なる軸を中心に回転している場合、このコードの前後で回転が変化するように見えます。meshB
meshA
meshB
meshB
上記のコード(または別のアプローチのアイデア)を修正しmeshB
て、シーンに削除して再追加する前後に同じ「グローバル」回転を維持する方法はありますか?
ありがとう!
css - シーン グラフで styleClass を持つすべてのノードを取得する
プログラムでグローバル検索を定義したいと考えています。私のプログラムにはシーン内に多くのノードがあり、さまざまなノードに検索可能な共通点がたくさんあります。検索可能なクラスと、各ノードで検索するためのメソッドを定義することを考えています。
そのため、クラスセレクターで検索すると、すべてのノードに到達して、ユーザーのためにそれらを強調表示できます。
たとえば、 Scene または Node に次のようなメソッドがある場合:
シーンまたはノードの子を再帰的に反復することで確かに実行できますが、私には非常に重いように見えるので、そのようなものが存在するかどうか知りたいです:
qt - QQuickItem 継承内で処理されないマウス イベント
ドラッグ可能な QQuickItems を使用してシンプルな Qt Quick アプリを作成したいと考えています。項目に MouseArea が埋め込まれているため、項目は適切にドラッグできます。しかし問題は、仮想オーバーロードされた関数の C++ コードでマウス イベントが発生しないことです。この問題を解決する方法、または私が見つけられなかったいくつかの例がありますか?
QML ファイル:
C++ クラス: