// レイと交差するかどうか IZ_BOOL CTriangle::IsIntersect(const SRay& ray) { SVector4 tmp; IZ_BOOL isIntersect = GetIntersectPoint(ray, tmp); return isIntersect; }
// 平面を設定. void CPlane::Set(const SVector4& normal, IZ_FLOAT _d) { SVector4::Copy(nml, normal); nml.w = 0.0f; SVector4::Normalize(nml, nml); d = _d; // 平面の基準位置を計算する // => 原点からの法線方向へのレイとの交点を計算する CRay ray( CVector4(0.0f, 0.0f, 0.0f), nml); GetIntersectPoint(ray, this->pt); }
// 線分と交差する点を取得. IZ_BOOL CPlane::GetIntersectPoint( const SVector4& from, const SVector4& to, SVector4& refPtr, IZ_FLOAT* retRayCoefficient/*= IZ_NULL*/) const { if ((IsPositive(from) && !IsPositive(to)) || (!IsPositive(from) && IsPositive(to))) { // 二つの点は面の正負のそれぞれにないといけない CRay ray( from, CVector4(to, from, CVector4::INIT_SUB)); IZ_BOOL ret = GetIntersectPoint(ray, refPtr, retRayCoefficient); return ret; } return IZ_FALSE; }