Computer-graphics-viewing-and-clipping
表示とクリッピング
コンピューターグラフィックスでのクリッピングの主な用途は、表示ウィンドウの外側にあるオブジェクト、線、または線分を削除することです。 ビューイング変換は、ビューイングボリュームに対するポイントの位置、特にビューアーの背後のポイントには影響されません。ビューを生成する前にこれらのポイントを削除する必要があります。
ポイントクリッピング
特定のウィンドウからポイントをクリップするのは非常に簡単です。 次の図を検討してください。長方形はウィンドウを示しています。 ポイントクリッピングは、指定されたポイント(X、Y)が指定されたウィンドウ内にあるかどうかを示します。そして、ウィンドウの最小および最大座標を使用するかどうかを決定します。
XがWx1≤X≤Wx2の間にある場合、指定されたポイントのX座標はウィンドウ内にあります。 同様に、YがWy1≤Y≤Wy2の間にある場合、指定されたポイントのY座標はウィンドウ内にあります。
ラインクリッピング
ラインクリッピングの概念は、ポイントクリッピングと同じです。 ラインクリッピングでは、ウィンドウの外側にあるラインの部分をカットし、ウィンドウの内側にある部分のみを保持します。
Cohen-Sutherlandラインクリッピング
このアルゴリズムは、次の図に示すように、クリッピングウィンドウを使用します。 クリッピング領域の最小座標は$(XW _ \ {min、} YW _ \ {min})$で、クリッピング領域の最大座標は$(XW _ \ {max、} YW _ \ {max})$です。
Cohen-Sutherland Line Clipping
4ビットを使用して領域全体を分割します。 これらの4ビットは、次の図に示すように、領域の上部、下部、右、および左を表します。 ここで、 TOP および LEFT ビットは、 TOP-LEFT コーナーであるため1に設定されます。
ラインには3つの可能性があります-
- 行は完全にウィンドウ内に入れることができます(この行は受け入れられます)。
- 行は完全にウィンドウの外側にある場合があります(この行は領域から完全に削除されます)。
- 線は部分的にウィンドウの内側にある場合があります(交点を見つけ、領域内にある線の部分のみを描画します)。
アルゴリズム
- ステップ1 *-各エンドポイントに地域コードを割り当てます。
ステップ2 *-両方のエンドポイントに地域コード *0000 がある場合、この行を受け入れます。
ステップ3 *-それ以外の場合、両方の地域コードに対して論理的な AND *操作を実行します。
ステップ3.1 *-結果が 0000でない場合、*行を拒否します。
- ステップ3.2 *-それ以外の場合は、クリッピングが必要です。
- ステップ3.2.1 *-ウィンドウの外側にある行のエンドポイントを選択します。
- ステップ3.2.2 *-ウィンドウ境界での交点を見つけます(リージョンコードに基づいて)。
- ステップ3.2.3 *-エンドポイントを交点に置き換え、地域コードを更新します。
- ステップ3.2.4 *-簡単に受け入れられるか、または簡単に拒否されるクリップされた行が見つかるまで、ステップ2を繰り返します。
- ステップ4 *-他の行に対してステップ1を繰り返します。
Cyrus-Beckラインクリッピングアルゴリズム
このアルゴリズムは、Cohen-Sutherlandアルゴリズムよりも効率的です。 パラメトリックライン表現と単純なドット積を採用しています。
線のパラメトリック方程式は-
P0P1:P(t) = P0 + t(P1 - P0)
N〜i〜を外側の法線エッジE〜i〜とします。 ここで、エッジE〜i〜上の任意のポイントP〜Ei〜を選択すると、ドット積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(t)をP〜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〜1〜-P〜0〜]にDを代入)
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 Hodgemanポリゴンクリッピングアルゴリズムは、ポリゴンクリッピングに使用されます。 このアルゴリズムでは、ポリゴンのすべての頂点がクリッピングウィンドウの各エッジに対してクリップされます。
まず、ポリゴンウィンドウの左端に対してポリゴンがクリップされ、ポリゴンの新しい頂点が取得されます。 これらの新しい頂点は、次の図に示すように、クリッピングウィンドウの右端、上端、下端に対してポリゴンをクリップするために使用されます。
クリッピングウィンドウでポリゴンのエッジを処理しているときに、エッジが完全にクリッピングウィンドウ内になく、交差点から外側のエッジまでの部分的なエッジがクリップされる場合、交差点が見つかります。 次の図は、左、右、上端、下端のクリッピングを示しています-
テキストの切り抜き
コンピューターグラフィックスでテキストクリッピングを提供するには、さまざまな手法が使用されます。 文字の生成に使用される方法と特定のアプリケーションの要件によって異なります。 以下にリストされているテキストのクリッピングのための3つの方法があります-
- すべてまたはまったく文字列のクリッピング
- すべてまたはまったく文字のクリッピング
- テキストクリッピング
次の図は、すべてまたはまったく文字列のクリッピングを示しています-
すべてまたはまったく文字列のクリッピング方法では、文字列全体を保持するか、クリッピングウィンドウに基づいて文字列全体を拒否します。 上の図に示すように、STRING2は完全にクリッピングウィンドウ内にあるため、STRING2を維持し、STRING1はウィンドウ内に部分的にのみ存在します。
次の図は、すべてまたはまったく文字のクリッピングを示しています-
このクリッピング方法は、文字列全体ではなく文字に基づいています。 このメソッドでは、文字列が完全にクリッピングウィンドウ内にある場合、それを保持します。 それが部分的にウィンドウの外側にある場合、-
- 文字列の外側にある部分のみを拒否します
- 文字がクリッピングウィンドウの境界上にある場合、その文字全体を破棄し、残りの文字列を保持します。
次の図は、テキストのクリッピングを示しています-
このクリッピング方法は、文字列全体ではなく文字に基づいています。 このメソッドでは、文字列が完全にクリッピングウィンドウ内にある場合、それを保持します。 部分的にウィンドウの外側にある場合、
- 文字列の外側にある部分のみを拒否します。
- 文字がクリッピングウィンドウの境界上にある場合、クリッピングウィンドウの外側にある文字の部分のみを破棄します。
ビットマップグラフィックス
ビットマップは、画像を記述するピクセルのコレクションです。 これは、コンピューターが画像の保存と表示に使用するコンピューターグラフィックスの一種です。 このタイプのグラフィックスでは、画像はビットごとに保存されるため、ビットマップグラフィックスと呼ばれます。 理解を深めるために、ビットマップグラフィックスを使用して笑顔の顔を描く次の例を考えてみましょう。
このスマイリーフェイスがコンピューターグラフィックスに少しずつ保存される様子を見ていきましょう。
元のスマイリーフェイスを注意深く観察すると、上の図でB1、B2およびE1、E2として表されている2本の青い線があることがわかります。
同様に、スマイリーは、それぞれA4、B5、C6、D6、E5、およびF4の組み合わせビットを使用して表されます。
ビットマップグラフィックスの主な欠点は次のとおりです-
- ビットマップ画像のサイズを変更することはできません。 サイズを変更しようとすると、ピクセルがぼやけます。
- 色付きビットマップは非常に大きくなる場合があります。