ポリゴンの交差判定
このサイトを参考にさせていただいてます。
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など