C ++
 Computer >> コンピューター >  >> プログラミング >> C ++

C++のZ-BufferまたはDepth-Bufferメソッド


depth-bufferとも呼ばれるzバッファ 隠面判定に使用される方法です。

隠面検出

透明なオブジェクトと表面を持つ画像の場合。この場合、他のオブジェクトの背後にあるオブジェクトは非表示になります。画像を適切に表示するには、これらの隠面判定を削除する必要があります。この識別は、隠面問題と呼ばれます。

zバッファでは、z軸のサーフェスを深度として比較します。

アルゴリズム

Step 1: initialize the depth of all pixel max.
   d(i,j) = infinity
Step 2: Initialize color for all pixels.
   c(i,j) = background-color
Step 3: for each pixel in polygon projection do,
   Step 3.1: find z i.e. depth of projection’s (i,j) pixel.
   Step 3.2: if z < d(i,j) do
      Step 3.2.1 : d(i,j) = z and c(i,j) = color of polygon.

この方法をピクセルごとに使用して、平面の各ピクセルの深さを見つけます。最小の表面がバッファの色を決定します。通常、すべてのz値は範囲[0,1]に近いです。

z =0、背面クリッピング平面およびz =1、前面クリッピング平面。

Zバッファのいくつかの重要なポイント

  • Zバッファ方式を適用するために、ポリゴン(平面)を最初に並べ替える必要はありません。

  • Zバッファは、プレーンの数が多い場合でも高速な結果を提供します。

  • z-bufferメソッドではオブジェクトの比較は必要ありません。

  • 非ポリゴンの非表示オブジェクトも、この方法を使用して検出できます。

  • 保存と解決のための追加のデータ構造は必要ありません。

  • ハードウェアの実装はプロセスをスピードアップすることが可能であり、グラフィックワークステーションの解決に積極的に使用されています。

  • この方法は、検討中のオブジェクトが不透明である場合、つまり透明なオブジェクトでエラーが発生する可能性がある場合にのみ適用できます。

  • 隠面判定は時間のかかるプロセスかもしれません。


  1. 二分法のためのC++プログラム

    0であり、関数f(x)はaとbの間にある必要があります。つまりf(x)=[a、b ]。タスクは、二分法を使用して、関数f(x)の区間aとbの間にあるルートの値を見つけることです。 二分法とは何ですか? 二分法は、「a」と「b」で定義された指定された制限内の関数f(x)の根の値を見つけるために使用されます。関数の根は、f(a)=0となるような値aとして定義できます。 例 Quadratic equation F(x) =  - 8 This equation is equals to 0 when the value of x will be 2 i.e.  - 8 =

  2. メタプログラミングの隠れたコスト

    メタプログラミングは非常に派手な言葉のように聞こえますが、それは何か良いことですか? 便利な場合もありますが、メタプログラミングの使用にはいくらかのコストがかかることに多くの人が気づいていません。 同じページにいるので… メタプログラミングとは 正確に? 私はメタプログラミングを次のような方法を使用するものとして定義しています: コードの構造を変更します(define_methodなど) ) 文字列を実際のRubyコードの一部であるかのように実行します(instance_evalなど)。 ) 何らかのイベントへの反応として何かを行います(method_missingなど) ) で