Пример #1
0
    // レイと交差するかどうか
    IZ_BOOL CTriangle::IsIntersect(const SRay& ray)
    {
        SVector4 tmp;

        IZ_BOOL isIntersect = GetIntersectPoint(ray, tmp);
        return isIntersect;
    }
Пример #2
0
    // 平面を設定.
    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);
    }
Пример #3
0
    // 線分と交差する点を取得.
    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;
    }