0

投影とは、3Dモデルデータ、カメラデータなどを取得し、表示されるフラットな2D画像にシーンを投影することを意味します。

directx / openglはこれを行いますか?彼らは実際にゲーム/グラフィックデザイナーのためにそれを行いますか、それともopengl / directxで3Dから2Dへの投影を実装する必要がありますか?これは私が混乱しているところです。

4

1 に答える 1

1

まあ、これは私たちが話しているコンピュータグラフィックスの種類によって異なります。たとえば、視覚効果(ILM、Digital Domain、Weta Digitalなど)やコンピューターアニメーションムービー(Pixar、Dreamworks Animation、Disney Animation、Blu Skyなど)で通常見られる画像は、専用のレンダラーソフトウェアによってオフラインで生成されます。このようなオフラインレンダラーは、さまざまな方法で実装できます。ラスターライザー(OpenGLやDirectX 3Dとは異なります)またはレイトレーサー(完全に異なる)があり、ハイブリッドもあります。

OpenGLとDirectX3Dは、ラスタライズによるリアルタイムの画像生成を目的としたAPIであり、これらについて説明します。最初に理解しなければならないのは、OpenGLとDirectX 3Dの観点からは、3Dモデル、カメラ、シーンがないということです。それらの場合、点、線、または三角形だけをラスタライズ(=描画)するフレームバッファ(2Dキャンバス)のみがあります。このようなプリミティブをラスター化する場合、あらゆる種類の入力データがプロセスに影響を与える可能性があります。たとえば、画像(テクスチャ)やパラメータは、シミュレートされた照明プロセスを制御します。

現在のシステムでは、プロセスは4つに分かれています。

  1. ジオメトリデータは、いわゆるクリップスペース内の位置に変換されます。これは、頂点シェーダーと呼ばれるステージによって実行されます。事実上、プリミティブの各コーナーに対して、入力ベクトル(何でもかまいません)を受け取り、そこからクリップ空間内の位置を計算します。あなたが尋ねた予測は、まさにこのステップで起こります–しかし、全体はもっとたくさんあります。読んでください。

  2. (オプション)テッセレーションシェーディングは、前の手順で生成された位置によって定義されたプリミティブに適用されます。テッセレーションは、物事をよりスムーズに、またはより詳細に表示するための、一種のプログラム制御の改良と考えることができます。

  3. (オプション)ジオメトリシェーディングは、これまでに生成されたプリミティブを新しいプリミティブに変えることができます。これは、たとえば、シミュレートされた髪の毛を生成するのに役立ちます

  4. フラグメントシェーディングは、ラスタライズされたプリミティブによってカバーされる各フラグメントの最終的な色を計算します。ピクセルには少なくとも1つのフラグメントがありますが、アンチエイリアスを使用すると、さらに多くのフラグメントが存在する可能性があります。

では、OpenGLとDirectX 3Dはどこに画像を入力しますか?さて、OpenGL-2とDirectX-8の前に、上記の手順はそれらにハードコーディングされていたので、すべての実用的な用語でそれらはそれを行いました。今日、最新のOpenGLとDirectX 3Dは、熟練したプログラマーが独自のグラフィックス生成パイプラインを実装するために使用できる、用途の広いグラフィックスツールキットのようなものです。手順1〜4は、いわゆるシェーダープログラムによって実行されます。このプログラムは、 OpenGLまたはDirectX3Dを使用してすべてを機能させるプログラマーが作成する必要があります。

于 2013-02-08T01:16:49.613 に答える