ポリゴンの交差判定

Last-modified: 2006-04-28 (金) 23:17:38

ポリゴンの交差判定

このサイトを参考にさせていただいてます。
http://ft-lab.ne.jp/cgi-bin/wiki.cgi?page=%B8%F2%BA%B9%C8%BD%C4%EA_3DCG

public RayReturnDate mytrace( CtVector3D V , CtVector3D E )
{
 RayReturnDate ret = new RayReturnDate();
 float EN;
 int JudgeFlag = 0;
 ret.N.assignment( P.get(2).sub(P.get(1)).mod( P.get(1).sub(P.get(0)) ) );
 ret.N.normalize();
 EN = (E.mul(ret.N));
 if(EN == 0)
 {
	ret.CrossJudgement = false;
	return ret;
 }
 ret.t = -V.sub(P.get(0)).mul(ret.N)/ EN;
 if(ret.t < 0.0)
 {
	ret.CrossJudgement = false;
	return ret;
 }
 ret.P.assignment( E.mul(ret.t).add(V) );
 JudgeFlag += Judge( P.get(1).sub(ret.P).mod(P.get(2).sub(ret.P)) );
 JudgeFlag += Judge( P.get(2).sub(ret.P).mod(P.get(0).sub(ret.P)) );
 JudgeFlag += Judge( P.get(0).sub(ret.P).mod(P.get(1).sub(ret.P)) );
 if(JudgeFlag == 3 || JudgeFlag == 0	)
	ret.CrossJudgement = true;
 return ret;
}

ノイズを取るには遊びを持たせる

0> 0.000001など