Files
Cyd 2b8ca921cb Initial full mirror of c:\VWE (source + assets + toolchain + outputs) via Git LFS
Complete disaster-recovery snapshot: engine/game source, game data assets,
VC6 toolchain + DX SDKs, build outputs, deployed game, and _UNUSED archive.
Large binaries in Git LFS; text preserved byte-for-byte (core.autocrlf=false,
no eol attributes). See RECOVERY.md for the one-clone rebuild procedure.
2026-06-24 21:28:16 -05:00

123 lines
2.3 KiB
C++

//###########################################################################
//
// $Workfile: RAY.HPP $
//
//~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
// Copyright(c) 1993 J. M. Albertson - All Rights Reserved
//
//###########################################################################
#pragma once
#include "Stuff.hpp"
#include "Point3D.hpp"
#include "UnitVector.hpp"
namespace Stuff {
class Plane;
class Sphere;
class OBB;
//~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ Ray3D ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
class Ray3D
#if defined(_ARMOR)
: public Stuff::Signature
#endif
{
public:
Point3D
origin;
UnitVector3D
direction;
Ray3D()
{}
Ray3D(
const Point3D &origin,
const UnitVector3D &direction
):
origin(origin),
direction(direction)
{}
//
// Ray3D projection functions
//
void
Project(
Scalar length,
Point3D *result
)
{
Check_Object(this); Check_Object(result);
Vector3D temp; temp.Multiply(direction,length);
result->Add(origin,temp);
}
Scalar
GetLengthToClosestPointTo(const Point3D &point)
{
Check_Object(this); Check_Object(&point);
Vector3D temp; temp.Subtract(point,origin);
return temp*direction;
}
void
GetClosestPointTo(
const Point3D &point,
Point3D *result
)
{
Check_Object(this); Check_Object(result); Check_Object(&point);
Project(GetLengthToClosestPointTo(point),result);
}
//
// Assignment operators
//
Ray3D&
SetDirection(const Vector3D &vector);
Ray3D&
SetOrigin(const Point3D &point)
{Check_Pointer(this); origin = point; return *this;}
//
// Ray3D intersection functions
//
Scalar
GetDistanceTo(
const Plane &plane,
Scalar *product
) const;
Scalar
GetDistanceTo(
const Sphere &sphere,
Scalar *penetration
) const;
Scalar
GetDistanceTo(const OBB &obb) const;
//
// Test support
//
void
TestInstance() const
{}
static bool
TestClass();
};
Scalar
Find_Closest_Approach(
const Point3D& origin1,
const Vector3D& velocity1,
Point3D *result1,
const Point3D& origin2,
const Vector3D& velocity2,
Point3D *result2,
Scalar *time,
bool *constant
);
}