0

通常のシーンの頂点法線がワールド空間のテクスチャに色として表示されている場合、エッジを効率的に計算する方法はありますか、それとも数学的に不可能ですか?ビュー空間に法線があればエッジを計算できることは知っていますが、ワールド空間に法線があれば計算できるかどうかはわかりません(過去の方法を模索してきました)時間..)

HLSLでDirectXを使用しています。

4

3 に答える 3

2
if ( normalA dot normalB > cos( maxAngleDiff ) 

その後、あなたはエッジを持っています。完璧ではありませんが、他の方法では見つけられないエッジを確実に見つけることができます。

それとも私は問題を誤解していますか?

編集:画像をハイパスフィルタリングするのはどうですか?

于 2009-09-23T22:47:14.810 に答える
1

画像に含まれる色の数と、それらがどのように結合するかによって異なります。鋭いエッジ、ディザリング、ブレンドなどです。
頂点法線があると言うので、単一の平面で色情報にアクセスできると思います。
私はさまざまな成功を収めた2つの手法を使用しました。

  1. 同じ色(RGB)のローカル領域を画像で検索し、R、G、またはBの最高値を使用して、「エッジ」を見つけました。これは、選択したR、G、またはBが最高値ではなくなった場所です。
  2. 私が使用した2番目の方法は、画像を内部で16色に縮小することです。この場合、輪郭を簡単に見つけることができます。

ベクトルを作成するかどうかは、「ワイヤーフレーム」画像の粒度をどの程度細かくするかによって異なります。

于 2009-09-23T16:55:40.050 に答える
1

セルシェーダーの漫画スタイルのエッジを作成しようとしていると思いますか?

その場合は、ワールドスペースのピクセル位置からカメラの位置を引いたもので、ワールドスペースの内積を単純に作成します。オペランドがすべて同じスペースにある限り、問題はありません。

float edgy = dot(world_space_normal, pixel_world_pos - camera_world_pos);

edgyが0に近い場合、それはエッジです。

画面スペースサイズのエッジが必要な場合は、別のサーフェスに追加のオブジェクトID情報をレンダリングし、その違いをカラーサーフェスに後処理する必要があります。

于 2009-10-04T02:49:29.073 に答える