2010-12-02 9 views
2

私は現在、私はそのすべてのしばらく前に書かれている多くの異なるプロジェクトを持っているこれは非常に漠然とした質問であることを行っているが、私は...直面する問題イム周り枠組みにとらわれない構造体の問題

を取得する方法を疑問に思って空間パーティショニングとソートに対応する同様のフレームワークを持っていますが、各プロジェクトではこのフレームワークの独自のバージョンが実装されています。 5がありますが

  • XNA
  • シルバー
  • のOpenGL(TAO)

    のDirectX

  • のWinforms(GDI)
    • :彼らはすべてのグラフィックベースのアプリケーションですが、中に実装していますこれらのフレームワークの異なるバージョンは、まったく同じことを行い、異なるオブジェクトを受け入れるだけです。たとえば、GDIは描画関連タスクのほとんどにSystem.Drawing.Pointを使用しますが、XNAはVector2を使用しますが、X/Yを表すオブジェクトであり、他のライブラリと同じですが、x/y値をint、浮動小数点、倍精度ですが、最終的には、それらは同じデータを表します。

      空間パーティショニングフレームワークの主な仕事は、これらの2/3次元の値を処理し、ツリーを生成するか、またはこれらの数値を中心に他のソートベースのタスクを実行することです。

      現在、分散したフレームワークを1つの集中型フレームワークに統一しようとしているため、1つのプロジェクトを持つことができます。

      私の最初の考えは、カスタムPoint2D、Point3D、Quaternion、RectなどのX/Y問題に対処するためにいくつかの不可知論的なオブジェクトを作成することでした。しかし、レンダリングのためにそれらを元のバージョンに戻す必要がありました。私が各レンダリングサイクルごとに各オブジェクトの各点についてこれを行うのであれば、(このフレームワークができるだけパフォーマンスを上げるように意図されている場合は)大きなパフォーマンスペナルティのように思えます。

      私は、この問題を解決し、ネイティブオブジェクトを実装部分に内部的に包み込むインタフェースを持つことを考えていましたが、これが最善の方法であるかどうかはまだ分かりません。これらの問題を解決する必要はありませんでした。

      とにかくワッフルをやめることができます。アドバイスは素晴らしいでしょう!

  • 答えて

    2

    私のお勧めは、あなた自身の数学タイプを実装し、それらを使ってすべての計算を行うことです。私はおそらくXNAをベースとして使用します。彼らはかなり優れているだけでなく、Mono.XNA、SilverSprite、XNATouchからオープンソースの実装を得ることができるからです。 (そしてもちろんXNAのフレームワーク自体です。)これにより、多くの作業を節約できます。

    私が見ることができる大きな問題は、あなたの異なるプラットフォームが異なるタイプを使用していることです。 GDIは整数を使用し、XNA、DirectXおよびOpenGLは単精度浮動小数点(一般に)を使用し、Silverlightは倍精度浮動小数点を使用します。

    そうでない場合は、同じレイアウトのネイティブのものに自分のタイプを割り当て、JITに依存してそのタイプを最適化することができます。

    OpenGL、DirectX、およびXNA(SpriteBatchのようなものを除く)に関する素晴らしい点は、基本的にはAPIにデータレイアウトを伝えることで、内部的に好きなものを使用できることです。

    GDIとSilverlightの場合は、とにかく超高性能グラフィックスを実行するために苦労するでしょう。だから私はちょうど浮かれて戻って変換のヒットを取るだろう。データを表示するための簡単な変換関数を書くだけです。タイプを変換することは、レンダリングと比較してCPU時間のごくわずかです。

    (私は実際にSilverlightのためにこれをやった - そしてそれ本当にを心配する価値はありません。)

    +0

    うんXNAはかなり私は複製したいものであり、あなたが釘を打ってきました基本的にどの段階にあるかのように数学図書館で頭の中に置かれているかのように、その場にいるかのように他のすべてがそれらを使用し、根本的なネイティブメソッドを抽象化することができます... GDIとある程度GDIの実装はツールキットベースのアプリケーションです彼らはとにかく速く走る必要はありません。 – Grofit

    関連する問題