zeus/include/zeus/CMRay.hpp

33 lines
867 B
C++

#pragma once
#include "zeus/CTransform.hpp"
#include "zeus/CVector3f.hpp"
namespace zeus {
struct CMRay {
CMRay(const CVector3f& start, const CVector3f& dirin, float len)
: start(start), length(len), invLength(1.f / len), dir(dirin) {
end = start + (len * dirin);
delta = end - start;
}
CMRay(const CVector3f& start, const CVector3f& end, float len, float invLen)
: start(start), end(end), length(len), invLength(invLen) {
delta = end - start;
dir = invLen * delta;
}
[[nodiscard]] CMRay getInvUnscaledTransformRay(const CTransform& xfrm) const {
const CTransform inv = xfrm.inverse();
return CMRay(inv * start, inv * end, length, invLength);
}
CVector3f start; // x0
CVector3f end; // xc
CVector3f delta; // x18
float length; // x24
float invLength; // x28
CVector3f dir; // x2c
};
} // namespace zeus