void Sphere::Transform(const float3x4 &transform) { assume(transform.HasUniformScale()); pos = transform.MulPos(pos); r *= transform.Col(0).Length(); }
void Polygon::Transform(const float3x4 &transform) { if (!p.empty()) transform.BatchTransformPos((vec*)&p[0], (int)p.size()); }
void Ray::Transform(const float3x4 &transform) { pos = transform.TransformPos(pos); dir = transform.TransformDir(dir); }
Ray operator *(const float3x4 &transform, const Ray &ray) { assume(transform.IsInvertible(1e-6f)); // Tundra: use smaller epsilon in order to prevent assumption spam when raycasting to non-uniformly scaled objects. return Ray(transform.MulPos(ray.pos), transform.MulDir(ray.dir).Normalized()); }
Line operator *(const float3x4 &transform, const Line &l) { return Line(transform.MulPos(l.pos), transform.MulDir(l.dir)); }
void Line::Transform(const float3x4 &transform) { pos = transform.MulPos(pos); dir = transform.MulDir(dir); }