2

指定されたカメラの位置などを指定して、3D のものを 2D 透視投影に変換するために使用できるコード例 (できれば C#) または単純な .Net 関数ライブラリ (安価または無料) を探しています。

検索して検索しましたが、見つかったものはすべて、主要なグラフィックス フレームワークを使用しているか、非常にデバイス指向であるか、またはその両方のようです。純粋なソフトウェアでデバイスに依存せず、.Net 2 で動作するものが必要です。

しかし、私はカメラビューを使用した実際の透視投影を望んでいます。画像を歪ませてやや遠近感を与えるような 2D 画像変換だけではありません。

編集:

答えてくれた人に感謝します。私が言うように、私はすでに多くの時間を検索に費やしてきたので、(これまでのところ) 存在しないものを探しているという答えが返ってきても、それほど驚くことではありません。

主要なパッケージに関与することになぜアレルギーがあるのか​​という質問に答えると、その理由は単純に「シンプルに保つ」というルールにある。私にとって、私がやろうとしているのは、ほんの少しのグラフィックス操作であり、10,000 以上の機能を実装する巨大な多目的パッケージに慣れる必要があるという考えを理解することはできません。私の小さな機能を実行できます。

編集 2 - 主に Miky 向け:

以下は、非常に特殊な関数が 1 つだけ必要な場合に、大規模で複雑なパッケージに関与することを避けたいという私の願望を正当化するために、もう一度試してみるための疑似プログラマーの哲学のとりとめのないビットです。本当にやるべきことがない限り、これを読んで時間を無駄にしないでください...

Miky は、.Net Framework には膨大な数の機能があることを正しく指摘していますが、私はそれらの機能の 1% の 1% も使用しないにもかかわらず、その使用方法を学ぶことを選択しました。はい、でも私は数百個を使用しているので、それだけの価値があります。(メモリ管理だけでも、死ぬほどの機能です。)

私は WinForms 用の Developer Express パッケージも使用しています。これには、私が決して使用しない何千もの関数も含まれています。しかし、私はリボン メニュー、ドッキング パネル、グリッド、ツリー ビュー、その他の数十、おそらく 100 以上の機能を使用しているため、すべての価値があります。

私は WinForms 製品用の MindFusion チャート作成も使用しています。これには、私が使用することのない数百の機能が含まれていますが、組織図とフロアプランの作成、ノードの移動、それらの相互リンク、再フォーマットをサポートする機能を使用しています。チャートとズームインとズームアウトと元に戻す...おそらく数十の関数を使用しているため、すべて価値があります。

ここでは、170,000 行のコードを含み、.Net Framework と Developer Express に大きく依存し、MindFusion にもある程度依存しているプログラムを使用しています。次に、3D 遠近法のレンダリングを少しだけ実行したいと考えています。実際には、実際の 3D でさえありません。私がやりたいのは、斜めから見た 2D 画像 (フロアプラン) を表示することです。フロアプランを互いに積み重ねて、おそらくフロアプラン間の間隔が誇張された透明な複数階建ての建物を表し、ユーザーが疑似建物を 1 つのコーナーまたは面から見たいかどうかを指定できるようにしたい-または別のコーナー、およびカメラの仰角。

それでおしまい。私が必要だと思うのは、これらの 2D フロアプランがカメラに対して傾いているため空間に浮かんでいるかのように 3D であるかのようにレンダリングし、カメラを移動できる 1 つまたは 2 つの C# メソッドです。これ以上何もない。

そして、正しいか間違っているかにかかわらず、主要な 3D ユニバース作成パッケージまたはデバイス/パフォーマンス指向のグラフィックス システムの学習に関与し始めると、この機能の価値よりも多くの時間を費やすことになると確信しています。そして、絶対に使用されないメガバイトのモジュールで、プログラムの実行時フットプリントを肥大化させたくありません。

しかし、この質問が受けたすべての提案と注意に感謝します。

4

3 に答える 3

3

基本的に、3D 形状を 2D 画面に投影することは、ジオメトリを使用して、私の画面が 3D 世界への窓である場合、そのオブジェクトの各点が画面のどこに表示されるかを言うことを意味します。

ここに画像の説明を入力

ユーザーの目が画面から離れているように見える距離がわかっている場合は、同様の三角形を使用して答えを出すことができます。

ここに画像の説明を入力

数学は次のようになります。

sx = tx * 距離 / ty

于 2013-03-21T20:05:09.990 に答える
1

Microsoft 固有のフレームワークやイベント OpenGL に依存したくない理由はいくつか考えられますが、ゲームの 3D ライブラリに対して何を持っているのかを理解するのに本当に苦労しています。

問題は、ほとんどの 3D ライブラリがゲーム開発者を念頭に置いていることです。ゲーム開発者がユーザー ベースの大部分を形成しているためです。

したがって、その最後の制限に寛容になりたい場合は、可能性がわずかに明るくなります。ただし、まだ 1 つの問題が残っています。

.NET 用の 3D ライブラリをあまり気にする人は誰もいません..NET には DirectX、XNA、OpenGL が既に存在するためです..また、ほとんどの 3D ライブラリ ユーザーは最初にパフォーマンスを求めているため、C または C++ に重点が置かれています。

したがって、次のようなライブラリを含む、管理されていない領域のオプションが残ります。

あなたの編集について:

この場合、自分の抑圧と戦い、威圧的なパッケージの 1 つの基本を理解することが最善の方法だと思います。次のように考えてください。

.NET フレームワークには 10,000 以上のメソッドがあり、ラベルに印刷されたテキストを更新するボタン付きのウィンドウを表示する単純なアプリケーションを作成したい場合でも、必要な少しのこと (いくつかの基本的な原則とサブセット) を学ぶのは簡単です。ボタンとテキスト ボックスを含むウィンドウを表示するように設計された軽量のライブラリを探すよりも、それを達成するためです。

上記の類推は、すべての主要な 3D ライブラリに当てはまります。彼らが威圧感を覚える理由の 1 つは、それがすべて新しい領域であることと、3D グラフィックスが把握するのが非常に単純な概念ではないことです。そのため、3D ライブラリを実装する人は誰でも、開発者の作業を楽にする (難しくするのではなく) ために、できるだけ多くの機能を公開したいと考えるでしょう。

幸いなことに、OpenGL や DirectX などの基本を理解することはそれほど難しくありません。.NET を使用すると、DirectX の学習/使用が簡単になる場合があります。OpenGL を学習することは、移植性が高いため、長期的にはより適している可能性があります。そしてどちらも、人々が始めるために利用できる多くのリソースがあるという利点があります.

だから、弾丸をかむ!車輪を再発明しないでください。また、大きな依存関係を引き受けることを恐れないでください (それが正しいことがわかっている場合)。そして、最初の基本的な 3D 対応アプリケーションの作成に取り掛かります。気分が良くなります

于 2013-03-21T20:45:20.127 に答える
1

私はそのようなライブラリを知りません。通常のアプローチは、同次座標を使用することです。これは機能しますが、かなり抽象的です。

この問題に取り組むために、まず、SlimDx または Xna に付属する数学ライブラリを使用してプログラムを作成します。

それが機能したら、必要な関数を独自の C# コードに移植します。どのライブラリから始めても、変換と透視行列関数はすべて同じであり、それらの定義はインターネットで見つけることができます。

于 2013-03-21T20:21:14.253 に答える