問題タブ [3d]
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 - OpenGL: オフスクリーン レンダリングの高速化
OpenGL を使用して、非常に多く (数万) の画像を画面外にレンダリングする必要があります。
私は Windows で実行しており、QT をフレームワークとして使用しています。解決策はWindowsのみですが、実際には問題ではありません。
私が Google を使用して見つけたものから、これを行うための多くのオプションがあります。 この記事はかなり古いようですが、いくつかの方法を提案しています。そのうちの関連するものは次のとおりです。
- Windows 固有 -
CreateDIBSection
テクスチャを使用して何らかの方法でバインドします。 - 私のカードでサポートされていると思われる pbuffers 拡張機能を使用します。
このスレッド(メッセージ 6) は、これを使用してこれを行う QT 固有の方法を提案しています。QGLWidget::renderPixmap
私の質問は、どれが最速の方法でしょうか? pbuffers は、ハードウェア上で実行されることが保証されているため、最も安全な方法のようですが、CreateDIB メソッドを使用していないため、ハードウェアも通過しますか? QT法はどうですか?これにはコンテキスト作成の問題があるようです。確かに、作成するすべての画像に対して新しいコンテキストを作成したくはありません。
これで良い経験をした人はいますか?
EDIT : コメント
への回答 - まったく変わらない一定のシーンがあり、さまざまな視点からレンダリングしています。今のところ、画像はユーザーに返され、CPU によって処理されます。将来的には、GPU で処理される可能性があります。
.net - 3D アクセラレーションを使用したグラフ レンダリング
巨大なデータセットのグラフを生成します。1 秒あたり 4096 サンプル、1 グラフあたり 10 分です。簡単な計算では、折れ線グラフあたり 4096 * 60 * 10 = 2457600 サンプルになります。各サンプルは倍精度 (8 バイト) の FP です。さらに、1 つの画面に最大 100 程度の複数の折れ線グラフをレンダリングします。これにより、1 つの画面で約 25M のサンプルをレンダリングできます。常識と簡単なトリックを使用して、2D キャンバスにこれを描画する CPU を使用して、このコードのパフォーマンスを向上させることができます。高性能、つまり、レンダリング時間が 1 分未満になります。これは科学的なデータであるため、サンプルを省略することはできません。真剣に、これはオプションではありません。それについて考え始めることさえしないでください。
当然のことながら、利用可能なすべての手法を使用してレンダリング時間を改善したいと考えています。マルチコア、プリレンダリング、キャッシングはすべて非常に興味深いものですが、それをカットすることはできません。これらのデータセットでは、最低でも 30 FPS のレンダリングが必要であり、60 FPS が推奨されます。これは野心的な目標です。
グラフィックス レンダリングをオフロードする自然な方法は、システムの GPU を使用することです。GPU は、巨大なデータセットを処理し、それらを並列処理するように作られています。GPU を使用したいくつかの単純な HelloWorld テストでは、レンダリング速度の昼と夜の違いが示されました。
問題は、OpenGL、DirectX、XNA などの GPU API が 3D シーンを念頭に置いて作成されていることです。したがって、それらを使用して 2D 線グラフをレンダリングすることは可能ですが、理想的ではありません。私たちが開発した概念実証では、2D の世界を 3D の世界に変換する必要があることがわかりました。突然、ポリゴン、頂点などの XYZ 座標系を使用する必要が生じました。これは、開発の観点からは理想とはほど遠いものです。コードが読めなくなり、メンテナンスが困難になり、さらに多くの問題が発生します。
3D でのこれに対する提案やアイデアは何ですか? 2 つのシステム (2D 座標と 3D 座標とエンティティ) を実際に変換する唯一の方法はありますか? または、これを達成するためのより洗練された方法はありますか?
-1 つのピクセルで複数のサンプルをレンダリングすると便利なのはなぜですか? データセットをよりよく表しているためです。1 つのピクセルについて、値 2、5、および 8 があるとします。一部のサンプル省略アルゴリズムにより、5 のみが描画されます。線は 5 にのみ移動し、8 には移動しないため、データが歪んでいます。反対のことを主張することもできますが、問題は、最初の引数が使用するデータセットに関係するということです。これこそが、サンプルを省略できない理由です。
graphics - 3D グラフィックス ライブラリでの I セクションのモデリング
Direct3D を使用して、鉄骨構造で使用される多数の I 断面を表示しています。シーン全体に、これらの I セクションのインスタンスが何百もある可能性があります。
私はこれを2つの方法で行うことができます:
方法 A を使用すると、サーフェスが少なくなります。ただし、背面カリングをオンにすると、サーフェスは片側からしか見えなくなります。背面カリングがオフになっている場合、フランジ (水平プレート) とウェブ (垂直プレート) が間違った順序でレンダリングされる可能性があります。
方法 B は正しいように見えます (背面カリングをオンにしておくこともできます) が、私のモデルでは I セクションのプレートの厚さは重要ではなく、各サイドに個別の三角形ストリップを作成する必要は避けたいと考えています。プレート。
より良い解決策はありますか?DrawIndexedPrimitives の特定の呼び出しに対してのみ背面カリングをオフにする方法はありますか? プラットフォームに中立な回答があれば、それもお願いします。
3d - XNA でのウィンドウ システムのレンダリング戦略 (RenderTarget のパフォーマンス)
現在、XNA ゲーム用のウィンドウ システムをゼロから作成しています。私は主に Windows 向けに開発していますが、将来どのプラットフォームをサポートするかは誰にもわかりません。パフォーマンスのセマンティクスは似ているはずなので、ネイティブ Direct3D についてこれを知っている場合は、自由に答えてください。可能であれば、ターゲット プラットフォームが X-Box 360 である場合に何が変わるかを検討してください。
私は順調に進んでいますが、ウィンドウを正確にレンダリングする方法がわかりません。私は4つのアプローチを思い付きました:
すべてのコントロールを画面に直接レンダリングするだけです。これが私が今していることです。コントロールは、半透明でない限り、状態をブレンドしてアニメーション化できます。任意の数の状態の間でアニメーション化する良い方法が見つかりませんでした (現在、ボタンアップからボタンダウン、マウスアウトからマウスオーバーにアニメーション化されているボタンが無効になっているとします。最後の状態から新しい状態にスムーズにブレンドします。このアプローチでは、最後のアニメーションが終了した後に 1 つのアニメーションが再生される場合にのみ機能します。そうしないと、アニメーションにジャンプが発生します。
各トップレベル ウィンドウとすべてのコントロールをレンダー ターゲットにレンダリングし、それを使用して半透明のトップレベル ウィンドウを画面にレンダリングします。これにより、トップレベルの作業で半透明になり、管理が容易になりますが、アニメーションの内容は変わりません。
各コントロールをレンダー ターゲットにレンダリングします。レンダー ターゲットは、コントロールがダーティになった場合 (つまり、アニメーション化する必要があるか、テキストが変更された場合) にのみ更新されます。このようにして、コントロールごとの半透明が機能します。
前と同様ですが、アニメーションの問題を解決することに加えて、各コントロールに 2 番目のレンダー ターゲットを用意します。アニメーションが開始するたびに、レンダー ターゲットを交換して、アニメーションが開始したときの状態を取得し、それを目的の状態とブレンドして他のレンダー ターゲットに入れます。これにより、以前のアプローチよりもオーバーヘッドが増えることはありません。レンダー ターゲットの数が 2 倍になり、任意のフレームで (最大で) 1 つだけがレンダリングされます。しかし、ここで問題が発生します。これを機能させるには、「古い」レンダー ターゲットのコンテンツを保持する必要があります。これは、Windows では良好なパフォーマンスで動作するはずですが、X-Box 360 ではパフォーマンスに重大な影響があるようです。一方、「保存」ビットは、アニメーションがアクティブな間のみ必要です。
そして、実際の質問が来ます。明確にするものは何でも大歓迎です。パフォーマンスの問題については、これはゲームのウィンドウ システムにすぎないことを覚えておいてください。ゲームの背後にあるゲームは、多くのレンダー ターゲットを使用し、パフォーマンスも低下させる可能性があり、ウィンドウ システムよりもはるかに多くの可能性があります。最悪の場合、画面上にそれぞれ 20 ~ 40 のコントロールを持つ 5 つのトップレベル ウィンドウがあるとします。
- これらのアプローチのどれをお勧めしますか?またその理由は? もちろん、別のアプローチを自由に追加してください。
- 200 個または 400 個のレンダー ターゲットを利用できる場合、各フレームに 20 個しかレンダリングされない場合、パフォーマンスに影響はありますか?
- PreserveContents のパフォーマンスへの影響は、X-Box 360 では本当に悪いのでしょうか? Windowsではどれくらい悪いですか?
- RenderTarget2D.RenderTargetUsage プロパティに書き込むことができます。PreserveContents を必要に応じてのみ有効にするために、実行時にこれを切り替えることは良い考えですか?
- ボタンの上にマウスを移動し、マウスを移動してから再び移動するなど、特定の状況でコントロールアニメーションがジャンプすることを (プレイヤーとして) 気にしますか?あなたより遅い?
3d - 3Dジオメトリ:1つのペアのポイントを別のペアと平行に整列するように変換します
(x1、y1、z1)から(x2、y2、z2)に向かう線(実際には立方体)があります。(x3、y3、z3)から(x4、y4、z4)に向かう別の線に沿って整列するように回転させたいと思います。現在、とMath::Atan2
一緒に使用していMatrix::RotateYawPitchRoll
ます。これを行うためのより良い方法はありますか?
編集:私はこの投稿を非常にひどく言いました。私が実際に探しているのは、2つのベクトルからの回転行列です。
3d - 「オンライン ルーム プランナー」サイトに最適な 3D テクノロジは何ですか?
主なユーザーケースは次のとおりです。
- 2D フロア プランを作成する
- 部屋の 3D ビューを色とダイナミックな照明 (ランプのオンとオフの切り替え) で見る
- あらかじめ定義されたサンプルの大規模なライブラリから家具を選択します。
- 家具サンプルの色と質感を変更します。
- さまざまなポイントから 3D ルーム ビューの写真を作成します。
- また、ユーザーは室内でカメラを動かしたり回したりして、景色を発見することができます。
wpf - WPFのアンビエントオクルージョンシェーダー効果?
これは複数の部分からなる質問だと思います。
3D モデルを WPF アプリケーションにインポートできますが、アンビエント オクルージョン シェーダー効果を適用するにはどうすればよいですか? .NET 3.5 SP1 ではカスタム エフェクトを実行できることはわかっていますが、これはピクセル シェーダーに限定されており、頂点シェーダーは含まれていません。
XNAアプリケーションでこれを行うことができると思いますが、XNAに慣れていないので、2番目の質問は次のとおりです.WPFとXNAはどのくらい違いますか? XNA で XAML の概念を持っていないようです。WPF から XNA への移行にはどれくらいの時間がかかりますか?
ありがとう、クリス
math - 3 軸グラフをメッシュとしてプロットする
以前にデータの 3D サーフェス プロットを見たことがありますが、それを作成するためにどのソフトウェアを使用できるかわかりません。
私は 3 つの一連のデータ (X、Y、Z) を持っています。基本的には、テーブルの各行を 3D 空間の点にし、すべてメッシュとして結合したいと考えています。データは現在csvですが、自分で生成したデータなのでフォーマットを変更できます。
誰でも助けてくれますか
java - Canvas3D と Swing
この質問は、Mac OS X のパフォーマンスの問題に関するものです。
Canvas3D オブジェクトは JPanel に埋め込まれています。その後、パネルは Swing で構築されたアプリケーションの残りの部分と統合されます。その Canvas 内で、特定の変換を適用して単純な立方体をレンダリングしています。初回起動時 正常に動作します。しかし、ウィンドウのサイズを変更したり、垂直または水平の分割バー ボタンでいくつかの操作を実行しようとすると、Swing コンポーネントが画面に表示されるまでに時間がかかります。派手な白色のものが先に出現し、その後スイングパーツが出現?(ちらつきのようなものが起こると完全に言っています)。この問題を解決する方法はありますか?
この点で私を助けてください。
J3DSwinger