2018-10-06 20:39:40 -07:00
|
|
|
#pragma once
|
2018-12-07 17:16:50 -08:00
|
|
|
|
2016-03-04 15:03:26 -08:00
|
|
|
#include "zeus/CVector3f.hpp"
|
|
|
|
#include "zeus/CTransform.hpp"
|
|
|
|
#include "zeus/Math.hpp"
|
2015-11-08 19:39:51 -08:00
|
|
|
|
2018-12-07 17:16:50 -08:00
|
|
|
namespace zeus {
|
|
|
|
struct CMRay {
|
|
|
|
CMRay(const CVector3f& start, const CVector3f& dirin, float len)
|
2018-12-07 21:23:50 -08:00
|
|
|
: start(start), length(len), invLength(1.f / len), dir(dirin) {
|
2018-12-07 17:16:50 -08:00
|
|
|
end = start + (len * dirin);
|
|
|
|
delta = end - start;
|
|
|
|
}
|
2015-11-08 19:39:51 -08:00
|
|
|
|
2018-12-07 17:16:50 -08:00
|
|
|
CMRay(const CVector3f& start, const CVector3f& end, float len, float invLen)
|
2018-12-07 21:23:50 -08:00
|
|
|
: start(start), end(end), length(len), invLength(invLen) {
|
2018-12-07 17:16:50 -08:00
|
|
|
delta = end - start;
|
|
|
|
dir = invLen * delta;
|
|
|
|
}
|
2015-11-08 19:39:51 -08:00
|
|
|
|
2018-12-07 17:16:50 -08:00
|
|
|
CMRay getInvUnscaledTransformRay(const CTransform& xfrm) const {
|
|
|
|
const CTransform inv = xfrm.inverse();
|
|
|
|
return CMRay(inv * start, inv * end, length, invLength);
|
|
|
|
}
|
2015-11-08 19:39:51 -08:00
|
|
|
|
2018-12-07 17:16:50 -08:00
|
|
|
CVector3f start; // x0
|
2018-12-07 21:23:50 -08:00
|
|
|
CVector3f end; // xc
|
2018-12-07 17:16:50 -08:00
|
|
|
CVector3f delta; // x18
|
2018-12-07 21:23:50 -08:00
|
|
|
float length; // x24
|
2018-12-07 17:16:50 -08:00
|
|
|
float invLength; // x28
|
2018-12-07 21:23:50 -08:00
|
|
|
CVector3f dir; // x2c
|
2015-11-08 19:39:51 -08:00
|
|
|
};
|
2018-12-07 21:23:50 -08:00
|
|
|
} // namespace zeus
|