2017-09-07 7 views
1

単一の三角形が正面か背面かを確認したいのですが、私はdirectx11のための簡単なオプションがあるかどうか調べようとしました。私は見つけられませんでした。C#SharpDX三角形が正面か背面かをチェックするオプションなし

Something like: CheckFacing((Vector3)TrianglePoints, Camera(vector3)){ 
Formula... //The formula to check it but I do not know if I should manually check or if directx11 has an option 
return CameraFacing; //(front or back) 
} 

答えて

2

基本的に、三角形の外積を探しています。これは、三角形の法線に平行なベクトルです。

Vector3 cross = Vector3.Cross(TrianglePoints[1] - TrianglePoints[0], TrianglePoints[2] - TrianglePoints[0]); 
bool facescam = cross.Z < 0; 

三角形がカムに面する場合、外積のZ値は負になります。出力は、三角形点の順序に依存することに注意してください。

カムが任意に配置されている場合、あなたはカムとクロスベクトルとの内積を計算する必要があります。簡単にするために、私はカメラが既に視聴者がに向いている方向を保持していることを前提としていること

bool facescam = Vector3.Dot(cross, Camera) < 0; 

注意をつまり、Camera = viewPoint - camLocationです。 パフォーマンスについては、インターフェイスを呼び出す代わりにここでコードを使用します。これはかなり高速です。

+0

私はそれを取得し始めましたが、 "ドット(クロス、カメラ)"でカメラのアイベクトルを使用するのですか、それとも間違っていますか? –

+0

はい、目のベクトルです。同じ方向のクロスフェイス、垂直の場合はゼロ、カムに向いている場合はマイナスです。 – yacc

+1

それは正しく動作しているようです私はジオメトリプロではないので、すべてのfronに直面しているものが正しいかどうかチェックしませんでしたが、私は4つの三角形を見て、4つの三角形を前面に向けました。動画は次のとおりです:https://www.youtube.com/watch?v=wkDD5z1iQws&feature=youtu.be –

関連する問題