表示とクリッピング

コンピュータグラフィックスでのクリッピングの主な用途は、表示ペインの外側にあるオブジェクト、線、または線分を削除することです。表示変換は、表示ボリュームに対するポイントの位置(特にビューアの後ろのポイント)の影響を受けないため、ビューを生成する前にこれらのポイントを削除する必要があります。

ポイントクリッピング

特定のウィンドウからポイントをクリップするのは非常に簡単です。次の図を考えてみましょう。長方形はウィンドウを示しています。ポイントクリッピングは、指定されたポイント(X、Y)が指定されたウィンドウ内にあるかどうかを示します。そして、ウィンドウの最小座標と最大座標を使用するかどうかを決定します。

XがWx1≤X≤Wx2の間にある場合、指定されたポイントのX座標はウィンドウの内側にあります。同様に、YがWy1≤Y≤Wy2の間にある場合、指定された点のY座標はウィンドウの内側にあります。

線クリッピング

ラインクリッピングの概念は、ポイントクリッピングと同じです。線クリッピングでは、ウィンドウの外側にあるラインの部分をカットし、ウィンドウの内側にある部分のみを保持します。

コーエン-サザランドラインクリッピング

このアルゴリズムは、次の図に示すようにクリッピングウィンドウを使用します。クリッピング領域の最小座標は$(XW_ {min、} YW_ {min})$であり、クリッピング領域の最大座標は$(XW_ {max、} YW_ {max})$です。

領域全体を分割するために4ビットを使用します。これらの4ビットは、次の図に示すように、領域の上部、下部、右側、および左側を表します。ここでは、TOP そして LEFT ビットは1に設定されているため、 TOP-LEFT コーナー。

ラインには3つの可能性があります-

  • 線は完全にウィンドウの内側に置くことができます(この線は受け入れられる必要があります)。

  • 線は完全にウィンドウの外側に置くことができます(この線は領域から完全に削除されます)。

  • 線は部分的にウィンドウの内側に配置できます(交点を見つけて、領域内にある線の部分のみを描画します)。

アルゴリズム

Step 1 −各エンドポイントにリージョンコードを割り当てます。

Step 2 −両方のエンドポイントにリージョンコードがある場合 0000 次に、この行を受け入れます。

Step 3 −それ以外の場合は、論理を実行します AND両方のリージョンコードの操作。

Step 3.1 −結果がそうでない場合 0000, 次に、その行を拒否します。

Step 3.2 −それ以外の場合は、クリッピングが必要です。

Step 3.2.1 −ウィンドウの外側にある線の端点を選択します。

Step 3.2.2 −ウィンドウ境界で交点を見つけます(地域コードに基づく)。

Step 3.2.3 −端点を交点に置き換え、地域コードを更新します。

Step 3.2.4 −簡単に受け入れられるか、簡単に拒否されるクリップされた行が見つかるまで、手順2を繰り返します。

Step 4 −他の行についても手順1を繰り返します。

Cyrus-Beckラインクリッピングアルゴリズム

このアルゴリズムは、コーエン-サザランドアルゴリズムよりも効率的です。パラメトリックライン表現と単純なドット積を採用しています。

直線のパラメトリック方程式は−

P0P1:P(t) = P0 + t(P1 - P0)

ましょうN私は外側に、通常のエッジEも。今、任意の点PピックEiのエッジE上のI次いで内積N I [P(T) - P。Eiは】点P(t)があるか否かを判断又は「外側」クリップエッジ「クリップエッジ内側」またはクリップの端に「オン」。

N i。[P(t)– P Ei ] <0の場合、点P(t)は内側にあります。

N i。[P(t)– P Ei ]> 0の場合、点P(t)は外側にあります。

N i。[P(t)– P Ei ] = 0(交点)の場合、点P(t)はエッジ上にあります。

N i。[P(t)– P Ei ] = 0

N I [P。0 + T(P 1 - P 0) - P Eiは] = 0(PとP(t)を交換0 + T(P 1 - P 0))

N I。[P 0 - P Eiの] + N I .T [P 1 - P 0 ] = 0

N I。[P 0 - P Eiの] + N I ∙時間tD = 0([Pの代わりD 1 - P 0 ])

N I [P。0 - P Eiの] = - N I ∙tDの

tの式は次のようになります。

$$ t = \ tfrac {N_ {i}。[P_ {o} -P_ {Ei}]} {{-N_ {i} .D}} $$

以下の条件で有効です-

  • N i ≠0(エラーは発生しません)
  • D≠0(P 1 ≠P 0
  • N I ∙D≠0(P 0 P 1 Eと平行でないI

ポリゴンクリッピング(Sutherland Hodgmanアルゴリズム)

クリッピングウィンドウを指定して、ポリゴンをクリッピングすることもできます。ポリゴンクリッピングには、SutherlandHodgemanポリゴンクリッピングアルゴリズムが使用されます。このアルゴリズムでは、ポリゴンのすべての頂点がクリッピングウィンドウの各エッジに対してクリッピングされます。

まず、ポリゴンをポリゴンウィンドウの左端にクリップして、ポリゴンの新しい頂点を取得します。これらの新しい頂点は、次の図に示すように、クリッピングウィンドウの右端、上端、下端に対してポリゴンをクリップするために使用されます。

クリッピングウィンドウを使用してポリゴンのエッジを処理しているときに、エッジがクリッピングウィンドウの完全に内側になく、交点から外側のエッジまでの部分的なエッジがクリップされている場合、交点が検出されます。次の図は、左、右、上、下のエッジの切り抜きを示しています-

テキストクリッピング

コンピュータグラフィックスでテキストクリッピングを提供するために、さまざまな手法が使用されます。これは、文字の生成に使用される方法と特定のアプリケーションの要件によって異なります。以下にリストされているテキストクリッピングの3つの方法があります-

  • すべてまたはまったく文字列のクリッピング
  • すべてまたはまったく文字のクリッピング
  • テキストクリッピング

次の図は、文字列のクリッピングがすべてまたはまったくないことを示しています。

すべてまたはまったく文字列のクリッピング方法では、文字列全体を保持するか、クリッピングウィンドウに基づいて文字列全体を拒否します。上の図に示すように、STRING2は完全にクリッピングウィンドウ内にあるため、それを保持し、STRING1は部分的にのみウィンドウ内にあるため、拒否します。

次の図は、文字のクリッピングがすべてまたはまったくないことを示しています-

このクリッピング方法は、文字列全体ではなく文字に基づいています。この方法では、文字列が完全にクリッピングウィンドウ内にある場合、それを保持します。部分的にウィンドウの外側にある場合、-

  • 文字列の外側にある部分のみを拒否します

  • 文字がクリッピングウィンドウの境界にある場合、その文字全体を破棄し、残りの文字列を保持します。

次の図は、テキストのクリッピングを示しています-

このクリッピング方法は、文字列全体ではなく文字に基づいています。この方法では、文字列が完全にクリッピングウィンドウ内にある場合、それを保持します。部分的にウィンドウの外側にある場合は、

  • 文字列の外側にある部分のみを拒否します。

  • 文字がクリッピングウィンドウの境界上にある場合、クリッピングウィンドウの外側にある文字の部分のみを破棄します。

ビットマップグラフィックス

ビットマップは、画像を説明するピクセルのコレクションです。これは、コンピューターが画像の保存と表示に使用するコンピューターグラフィックスの一種です。このタイプのグラフィックスでは、画像はビットごとに保存されるため、ビットマップグラフィックスと呼ばれます。理解を深めるために、ビットマップグラフィックを使用してスマイリーフェイスを描く次の例を考えてみましょう。

次に、このスマイリーフェイスがコンピュータグラフィックスに少しずつ保存される様子を見ていきます。

元のスマイリーフェイスをよく見ると、上の図ではB1、B2、E1、E2の2本の青い線があることがわかります。

同様に、スマイリーは、それぞれA4、B5、C6、D6、E5、およびF4の組み合わせビットを使用して表されます。

ビットマップグラフィックスの主な欠点は次のとおりです。

  • ビットマップ画像のサイズを変更することはできません。サイズを変更しようとすると、ピクセルがぼやけます。

  • 色付きのビットマップは非常に大きくなる可能性があります。