Ukážeme si, jak zjistit kolizi paprsku (polopřímky) s koulí. Tuto kolizi lze ve hrách použít například pro míření na určité objekty ve scéně, kdy paprsek vychází z pozice kamery a míří do nekonečna před kameru. Testujeme kolizi tohoto paprsku s kolizní koulí objektu.
1. Paprsek a koule mají tuto strukturu:
class K3dRay{// Ray is R(t) = P+t*D for t >= 0. D is not necessarily unit length. K3dVector3 m_kOrigin; // P K3dVector3 m_kDirection; // Dpublic: K3dRay(K3dVector3 &_rkOrigin, K3dVector3 &_rkDirection) { m_kOrigin = _rkOrigin; m_kDirection = _rkDirection; } K3dRay() { m_kOrigin.Reset(); m_kDirection.Reset(); } ~K3dRay() {} K3dVector3& GetOrigin() {return m_kOrigin; }const K3dVector3& GetOrigin() const {return m_kOrigin; } K3dVector3& GetDirection() {return m_kDirection; }const K3dVector3& GetDirection() const {return m_kDirection; }};
2. Potřebujeme vypočítat dot produkt (skalární součin) 3D vektorů, kdy vstupní vektor bude direction (směrový) vektor paprsku a vektor float m_afVector[3] bude rozdíl mezi pozicí paprsku a pozicí kamery.: