問題タブ [displaylist]
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.
performance - OpenGlDisplayListは遅い
奇妙な問題が
あります。15x15要素のゲームフロアを出力する必要があります。
これまで、ゲームループで関数「printFloor()」を呼び出していました。
この関数は、225の要素すべてをステップスルーし、それらの値に応じて、テクスチャファイルの異なる部分を表示します。そのため、CPUはすべてのループサイクルで同じ225テクスチャをレンダリングする必要がありました。ゲームループは各サイクルで約16〜32ミリ秒必要だったので、この出力をディスプレイリストに入れました。
関数printFloorElementは、位置を計算し、グラフィックモードを「switchGraphicMode(TEXTURES);」に変更し、テクスチャをバインドして、テクスチャを描画します。
問題:1つのゲームループサイクルに60〜80ミリ秒かかるため、かなり遅くなります。ディスプレイリストは一度だけ生成されます、私はすでにそれをチェックしました。
「switchGraphicMode()」-関数:
誰もが理由を知っていますか?
opengl - 何千もの動くクワッドをレンダリングする
大量のパーティクルをレンダリングする必要があります。これらのパーティクルは、テクスチャのない単純な四角形(実際には正方形)です。ああ、そして彼らは粒子なので、彼らはいつも動いています。
私は2つのオプションを検討しましたが、私はOpenGLの専門家ではないため、何が最善かわかりません。
VBOを使用してそれらすべてをレンダリングします。
長所:即時モードよりも高速です。
短所:(VBOについてはよくわかりませんが)収集したものから、クワッドの座標をRAMのバッファに保存する必要があります...そして、これらの座標はすべてCPUによって計算される必要があります。したがって、粒子P1(x、y)の場合、他の4つの座標(P2(x-1、y-1)、P3(x-1、y + 1)、P4(x + 1、y + 1))を計算する必要があります。 、P5(x + 1、y-1))-これはCPUにとって大変な作業です。ディスプレイリストを使用する:最初に、単一の正方形のクワッドの小さなディスプレイリストを作成します。次に、各パーティクルをレンダリングするには、いくつかの操作を行います
pushMatrix, glTranslate, callList, popMatrix
。
長所:4つの座標を手動で計算する必要はありません-glTranlateがそれを行います。
おそらく、ディスプレイリストはVBOよりも高速です。
短所:クワッドが1つしかない場合、VBOよりも高速ですか?
注意:私はJavaからOpenGLのものを呼び出しているので、Java配列をGPU配列に変換するスムーズな方法はありません(転送前にすべてを中間のFloatBuffersに格納する必要があります)。
actionscript-3 - スターリング ビューへの displayList ビューの MouseEvent 伝播を停止します。
starling-layer (ゲーム自体) と、いくつかの Popups とそのようなものを含む従来の表示リストを使用するゲームを作成しています。
問題が 1 つあります。displayList 要素で MouseEvents が生成されると、それらは常にスターリング レイヤーを通過し、TouchEvents などを生成します。これは非常に面倒です。
それを処理するための一般的な(そして使いやすい)アプローチがあるのだろうかと思っていました。
1 つの可能性は、次のイベントのすべての displayList-Elements をリッスンすることでした。
しかし、これは私にはかなり厄介に見えます。そして、そのようにしたとしても、もう1つ問題があります。スターリング要素がそのdisplay-list-要素の下にあり、ロールオーバー動作のTouchEvent.TOUCHがある場合>>ロールオーバーの外観は削除されませんdisplay-list-element にカーソルを合わせると、ムクドリから。
イベントを停止するために、すべての display-list-element の後ろにダミースターリング要素を配置することも考えました..しかし、そのような「単純な」タスクに対しては、すべてが少し「複雑すぎる」ように聞こえます。または、何か不足していますか?
ヒントをいただければ幸いです。ありがとう。
opengl - 複数の表示リストを呼び出すことができません glCallList()
表示リストを作成するとき:
次に、「表示」関数でその表示リストを呼び出します。
なぜベンチが1つしか表示されないのですか?(つまり、表示リストの 1 つを表示するだけです)
移動 Z ポイントが -5.0f と -7.0f の 2 台のベンチである必要があります。
そして、最初のコールリスト glTranslatef(0.0f,0.0f,-8.0f) を変更しても、出力は何も変更されません。しかし、2 番目のコールリストをベンチで glTranslatef(0.0f,0.0f,-8.0f) に変更すると、出力ベンチはその位置を -8.0f に変換しました (-5.0f 以前より)。
私が得たのは、このコードは 2 番目のディスプレイ リスト (Z ポイントが -5.0f) のみを表示し、最初のディスプレイ リストを無視することだけです。
誰でもこれで私を助けることができますか?私は何を間違えましたか?
opengl - OpenGL: 表示リストの内容をコピーする
特定のゲーム改造プロジェクトで OpenGL 1.1 に固執しています。ゲームの一部の一種のスナップショットとしてディスプレイ リストを使用しています。そこで、ディスプレイ リストを開始し、それらの部分をレンダリングするように指示し、ディスプレイ リストを閉じます。 . これにより、表示リストが正しく表示され、自由に変換およびレンダリングできます。
ただし、そのディスプレイ リストを変換してレンダリングしている間、スナップショットされたゲームの部分は存在しなくなり、使用していたディスプレイ リストがすべて破棄されます。つまり、スナップショットをレンダリングすると、ディスプレイ リストだった部分が破棄されます。レンダリングに失敗します。
私ができるようにしたいのは、ネストされたディスプレイリストへの呼び出しを埋め込むだけでなく、ネストされたディスプレイリストの内容を最上位のリストにコピーするようにOpenGLに何らかの方法で指示することです。私がやりたいことをする関数を見つけることができませんでした。存在しますか?
(いいえ、私がスナップショットを撮っているゲームの部分は予測可能ではなく、毎回大きく異なる可能性があります.)
opengl - JOGL での表示リストとマウスの動きに対するさまざまな反応
私は最近、JOGL (Java で OpenGL コマンドにアクセスできるようにする) を使用してアプリケーション内に 3D 環境を作成する Java アプリケーション環境で API の使用を開始しました (そのため、OpenGL はまったく初めてです)。
この API は、表示リストを使用してコマンドをグループ化し、高速化してジオメトリ コンポーネントを表示します。これまでのところ、display メソッドでは、最初にマウスによって行われたシーンへのすべての変更 (ズーム、回転、平行移動) が適用され、次に現在の表示リストが呼び出されます。API は、ツリーのような構造に配置されるさまざまなシーン要素 (サーフェス、ライト、変換) を提供します。この構造は、これらのシーン要素が後で「実行」される順序を決定します。このシーン ツリーの実行は、表示リストに入れられます。これは意図したとおりに機能します。
ここで追加したいのは、コンポーネントの現在の向きを表す小さな座標系です。これは、シーン ツリーに追加される新しいシーン エレメントになります。この座標系は、マウスで行った回転によって明らかに影響を受ける必要がありますが、スケーリングしたり、他の場所に変換したりしてはなりません。
私の問題は、マウスの動きがシーン ツリーの実行外で適用されるため、ツリーの特定のシーン要素のみに回転のみを適用する方法がわかりません。ディスプレイリストの対応する部分でマウスの動きを元に戻すことはできません(私の理解では)。これは、ディスプレイリストがマウス位置の変更のパラメーターを取得する必要があることを意味するためです。しかし、状態が一度決定され、この状態でのみ実行されるため、表示リストのパラメーターを操作することはできません (正しいですか?)。回転状態が失われるため、射影行列をリセットすることはできません。
私の問題が理解できることを願っています。表示リストでこれを行う方法はありますか? または、この API の表示リストを別のものに置き換える必要がありますか? いずれにせよ、それらは推奨されていないようです。
opengl - 表示リストと即時レンダリング
表示リストの fps が即時レンダリングよりも優れているかどうかを確認しようとしています。オンライン表示リストの方が速いことがわかりましたが、オンラインでいくつかのコードを見つけましたが、その状況では即時モードの方が高速ですか? どちらがより良いfpsを持っているのか、そしてその理由を誰か説明できますか?