1

個人的なプロジェクトにPanda3Dを使用したいのですが、ドキュメントといくつかのソースコードの例を読んだ後、まだいくつか質問があります。

  • 1つのフレームだけをレンダリングしてファイルに保存するにはどうすればよいですか?実際、2つの異なる画像をレンダリングする必要があります。1つのオブジェクトと、前の1つのオブジェクトを含む複数のオブジェクトのシーンですが、それぞれに1つのフレームがあり、両方を画像ファイルとして保存する必要があります。

  • アプリケーションはPythonでコーディングされ、非常にスケーラブルである必要があります(数千人のユーザーが使用します)。Panda3Dはここの法案に適合しますか?(Pythonでの私のプログラムについては、ほぼ一定の複雑さなので、ここでは問題ありません。3Dモデルは低ポリで、シーンごとに約5〜20になります)。

  • カメラに対するすべてのオブジェクトの透視投影を計算する必要があります。頂点と面(位置、パラメータなど)に直接アクセスすることは可能ですか?

  • 3Dオブジェクトの色を変更できますか?オブジェクト全体に単純な色を設定する必要がありますが、オブジェクトごとに異なる色を設定します。出来ますか?

また、私はグラフィックおよびゲーム開発の分野ではかなりの初心者ですが、3Dモデリングと3D理論、およびコンピューターイメージング理論については少し知っています。

私を読んでくれてありがとう。

PS:現在の私の主な代替手段は、Soya3DまたはPySoyを使用することですが、これらはあまり積極的に開発または最適化されていないようです。したがって、どちらもメモリフットプリントは小さくなりますが、実際にパフォーマンスが向上するかどうかはわかりません。 Panda3Dはあまり最適化されていないため、...

4

2 に答える 2

4
  • を使用して、シーンのスクリーンショットを撮ることができますself.win.saveScreenshot(Filename)。例:

    from panda3d.core import Filename
    
    file_name = Filename('whatever.png')) 
    self.win.saveScreenshot(file_name) 
    
  • 私はPanda3DNetworkingAPIを自分で使用したことはありませんが、クライアント側でうまく機能するはずです。数千人のユーザーがいるサーバー側のパフォーマンスはそれほど良くないかもしれませんが、CやNodeJSなどのヘビーネットワーキングに適した他のテクノロジーを使用してサーバーソフトウェアをコーディングできます。

  • はい、頂点にアクセスして変更し、それらを面にグループ化できます。デフォルトの頂点データを使用すると、頂点の位置、法線、色、テクスチャの座標を設定できますが、必要に応じて、独自にカスタマイズした頂点の形式を設定できます。マニュアルをご覧ください:Panda3Dマニュアル:GeomVertexDataの作成と入力

  • はい、オブジェクトの色はを使用して設定できますobject.setColor(r,g,b,a)。詳細:Panda3Dマニュアル:色合いと色の変更

それが役に立てば幸い!

于 2012-10-19T21:51:56.580 に答える
2
  • setOneShot を有効にしたバッファーを使用して、単一フレームのみをレンダリングすることができます。"window-type" PRC 変数を "none" に設定し、オフスクリーン バッファを自分で開くことにより、ウィンドウなしで Panda3D を起動できます。(注: ホスト ウィンドウのないオフスクリーン バッファは、一般的にサポートされていない場合があります。) 「window-type」を「offscreen」に設定base.winすると、実際にはバッファになります (独自に設定するよりも少し簡単かもしれません)。その後base.graphicsEngine.render_frame()、タスク マネージャーのオーバーヘッドを回避しながら、単一のフレームをレンダリングするために呼び出すことができます。ダブルバッファリングのため、2 回呼び出す必要があります。
  • はい。Panda3D は、ディズニーの MMORPG の一部で使用されています。Panda の高レベルのネットワーク インターフェイスについては、ドキュメントが不十分であることを付け加えておきます。
  • を使用して、オブジェクトからカメラへの変換を計算できますnodepath.get_transform(base.cam)。これは、必要に応じて を使用して行列に変換できる TransformState オブジェクトですts.get_mat()。これは驚くほど高速です。これは、Panda が変換用のコンポジション キャッシュを保持しているため、これが何度も発生する必要がありません。lens.get_projection_mat()を使用して、または逆を使用して、(ビュー空間からクリップ空間への) 射影行列を取得できますlens.get_projection_mat_inv()。また、Geom インターフェイスを使用して個々の頂点データにアクセスすることもできます。これについては、Panda3D のマニュアルで詳しく説明されています。
  • を使用set_colorしてオブジェクトのベース カラーを変更したり (頂点の色を置き換えたり)、オブジェクトに色をset_color_scale付けたりすることができます。既存の色を掛け合わせた色を適用します。ライトを使用し、ディフューズ、スペキュラー、アンビエント コンポーネントに異なる色を使用する場合は、マテリアル オブジェクトを適用することもできます。
于 2013-03-16T13:32:18.087 に答える