Todos

  • Member AABB::ClosestPoint (const float3 &targetPoint) const : Add ClosestPoint(Line/Ray/LineSegment/Plane/Triangle/Polygon/Circle/Disc/AABB/OBB/Sphere/Capsule/Frustum/Polyhedron).
  • Member AABB::Contains (const Sphere &sphere) const : Optimize.
  • Member AABB::Contains (const float3 &point) const : Add Contains(Circle/Disc/Sphere/Capsule).
  • Member AABB::CornerPoint (int cornerIndex) const : Draw which index generates which corner point.
  • Member AABB::Distance (const float3 &point) const : Add AABB::Distance(Line/Ray/LineSegment/Plane/Triangle/Polygon/Circle/Disc/AABB/OBB/Capsule/Frustum/Polyhedron). This function could be slightly optimized. See Christer Ericson's Real-Time Collision Detection, p.131.
  • Member AABB::Edge (int edgeIndex) const : Specify which index generates which edge.
  • Member AABB::Intersection (const AABB &aabb) const : Add Intersection(OBB/Polyhedron).
  • Member AABB::Intersects (const Ray &ray, float *dNear, float *dFar) const : Add Intersects(Circle/Disc).
  • Member AABB::PointOnEdge (int edgeIndex, float u) const : Document which index generates which one.
  • Member AABB::SetFrom (const OBB &obb): Implement SetFrom(Polyhedron).
  • Member Capsule::ClosestPoint (const float3 &targetPoint) const : Add ClosestPoint(Line/Ray/LineSegment/Plane/Triangle/Polygon/Circle/Disc/AABB/OBB/Sphere/Capsule/Frustum/Polyhedron).
  • Member Capsule::Contains (const float3 &point) const : Add Contains(Circle/Disc/Sphere/Capsule).
  • Member Capsule::Distance (const float3 &point) const : Add Distance(Triangle/Polygon/Circle/Disc/Capsule).
  • Member Capsule::Intersects (const Ray &ray) const : Add Intersects(Circle/Disc).
  • Member Capsule::Intersects (const Sphere &sphere) const : Optimize to avoid square roots.
  • Member Capsule::Intersects (const Capsule &capsule) const : Optimize to avoid square roots.
  • Member Capsule::IsFinite () const : Implement IsDegenerate().
  • Member Capsule::RandomPointOnSurface (LCG &rng) const : The points are NOT distributed uniformly.
  • Member Circle::ClosestPointToDisc (const float3 &point) const : Implement ClosestPointToDisc(Ray/LineSegment/Line).
  • Member Circle::ClosestPointToEdge (const float3 &point) const : Implement ClosestPointToEdge(Ray/LineSegment/Line).
  • Member Circle::DistanceToDisc (const float3 &point) const : Implement DistanceToDisc(Ray/LineSegment/Line).
  • Member Circle::DistanceToEdge (const float3 &point) const : Implement DistanceToEdge(Ray/LineSegment/Line).
  • Member Circle::EdgeContains (const float3 &point, float maxDistance=1e-6f) const : Implement DiscContains(float3/LineSegment/Triangle).
  • Member Clock::Day (): .
  • Member Clock::Hour (): .
  • Member Clock::Min (): .
  • Member Clock::Month (): .
  • Member Clock::Sec (): .
  • Member Clock::Year (): .
  • Member CombinatorialTab (int n, int k): We can lower this size.
  • Member float2::MinAreaRect (const float2 *pointArray, int numPoints, float2 &center, float2 &uDir, float2 &vDir): Examine. A bug in the book? All the following are initialized to 0!.
  • Member float3::Distance (const float3 &point) const : Add float3::Distance(Polygon/Circle/Disc/Frustum/Polyhedron).
  • Member float3x3::IsInvertible (float epsilon=1e-3f) const : Optimize.
  • Member float3x3::IsOrthonormal (float epsilon=1e-3f) const : Epsilon magnitudes don't match.
  • Member float3x3::Orthonormalize (int firstColumn, int secondColumn, int thirdColumn): Optimize away copies.
  • Member float3x4::Inverse (): It is possible optimize to avoid copying here by writing the inverse function specifically for float3x4.
  • Member float3x4::IsInvertible (float epsilon=1e-3f) const : Optimize.
  • Member float3x4::IsOrthonormal (float epsilon=1e-3f) const : Epsilon magnitudes don't match.
  • Member float3x4::OrthographicProjection (float nearPlaneDistance, float farPlaneDistance, float horizontalViewportSize, float verticalViewportSize): Implement.
  • Member float3x4::Orthonormalize (int firstColumn, int secondColumn, int thirdColumn): Optimize away copies.
  • Member float4::AnotherPerpendicular3 (const float3 &hint=float3(0, 1, 0), const float3 &hint2=float3(0, 0, 1)) const : Enforce that (x: this, y: Perpendicular3(), z: AnotherPerpendicular3) form a right-handed basis.
  • Member float4x4::IsInvertible (float epsilon=1e-3f) const : Optimize.
  • Member float4x4::IsOrthonormal3 (float epsilon=1e-3f) const : Epsilon magnitudes don't match.
  • Member float4x4::Orthogonalize3 (int firstColumn, int secondColumn, int thirdColumn): Optimize away copies.
  • Member float4x4::Orthonormalize3 (int firstColumn, int secondColumn, int thirdColumn): Optimize away copies.
  • Member float4x4::PerspectiveProjection (float nearPlaneDistance, float farPlaneDistance, float horizontalFov, float verticalFov): Implement.
  • Member Frustum::ClosestPoint (const float3 &point) const : Add ClosestPoint(Line/Ray/LineSegment/Plane/Triangle/Polygon/Circle/Disc/AABB/OBB/Sphere/Capsule/Frustum/Polyhedron).
  • Member Frustum::Contains (const float3 &point) const : Add Contains(Circle/Disc/Sphere/Capsule).
  • Member Frustum::Distance (const float3 &point) const : Add Frustum::Distance(Line/Ray/LineSegment/Plane/Triangle/Polygon/Circle/Disc/AABB/OBB/Capsule/Frustum/Polyhedron).
  • Member Frustum::Intersects (const Ray &ray) const : Add Intersects(Circle/Disc). This is a naive test. Implement a faster version.
  • Member Frustum::Intersects (const Line &line) const : This is a naive test. Implement a faster version.
  • Member Frustum::Intersects (const LineSegment &lineSegment) const : This is a naive test. Implement a faster version.
  • Member Frustum::Intersects (const AABB &aabb) const : This is a naive test. Implement a faster version.
  • Member Frustum::Intersects (const OBB &obb) const : This is a naive test. Implement a faster version.
  • Member Frustum::Intersects (const Triangle &triangle) const : This is a naive test. Implement a faster version.
  • Member Frustum::Intersects (const Polygon &polygon) const : This is a naive test. Implement a faster version.
  • Member Frustum::Intersects (const Sphere &sphere) const : This is a naive test. Implement a faster version.
  • Member Frustum::Intersects (const Capsule &capsule) const : This is a naive test. Implement a faster version.
  • Member Frustum::Intersects (const Frustum &frustum) const : This is a naive test. Implement a faster version.
  • Member Frustum::IsFinite () const : Implement IsDegenerate().
  • Member Frustum::LookAt (float x, float y) const : This function will be renamed and replaced with Unproject(float x, float y) and Unproject(const float3 &p);
  • Member Frustum::LookAtFromNearPlane (float x, float y) const : This function will be renamed and replaced with Unproject(float x, float y) and Unproject(const float3 &p);
  • Member Frustum::ProjectionMatrix () const : Implement.
  • Member Frustum::RandomPointInside (LCG &rng) const : Implement.
  • Member LCG::Int (): Convert to using Schrage's method for approximate factorization. (Numerical Recipes in C)
  • Member LCG::Int (int a, int b): Some bug here - the result is not necessarily in the proper range.
  • Member Line::AreCollinear (const float3 &p1, const float3 &p2, const float3 &p3, float epsilon=1e-3f): Improve this check to be distance length -invariant.
  • Member Line::IntersectsDisc (const Circle &disc) const : This signature will be moved to bool Intersects(const Disc &disc) const;
  • Member LineSegment::Distance (const float3 &point, float *d=0) const : This function could be slightly optimized. See Christer Ericson's Real-Time Collision Detection, p.130.
  • Member LineSegment::Intersects (const Plane &plane) const : Output intersection point.
  • Member LineSegment::IntersectsDisc (const Circle &disc) const : This signature will be moved to bool Intersects(const Disc &disc) const;
  • Member Mod (float x, int mod): Optimize.
  • Member ModPos (float x, int mod): Optimize.
  • Member OBB::ClosestPoint (const float3 &point) const : Add ClosestPoint(Line/Ray/LineSegment/Plane/Triangle/Polygon/Circle/Disc/AABB/OBB/Sphere/Capsule/Frustum/Polyhedron).
  • Member OBB::Contains (const float3 &point) const : Add Contains(Circle/Disc/Sphere/Capsule).
  • Member OBB::CornerPoint (int cornerIndex) const : Draw a diagram that shows which index generates which edge.
  • Member OBB::Distance (const float3 &point) const : Add OBB::Distance(Line/Ray/LineSegment/Plane/Triangle/Polygon/Circle/Disc/AABB/OBB/Capsule/Frustum/Polyhedron). This code can be optimized a bit. See Christer Ericson's Real-Time Collision Detection, p.134.
  • Member OBB::Edge (int edgeIndex) const : Draw a diagram that shows which index generates which edge.
  • Member OBB::FaceCenterPoint (int faceIndex) const : Document which index generates which face.
  • Member OBB::FacePoint (int faceIndex, float u, float v) const : Document which index generates which face.
  • Member OBB::Intersects (const AABB &aabb) const : Add Intersects(Circle/Disc).
  • Member OBB::MaximalContainedAABB () const : Implement.
  • Member OBB::PCAEnclosingOBB (const float3 *pointArray, int numPoints): Implement.
  • Member OBB::PointOnEdge (int edgeIndex, float u) const : Document which index generates which one.
  • Member OBB::SetFrom (const Polyhedron &polyhedron): Implement.
  • Member OBB::SetFromApproximate (const float3 *pointArray, int numPoints): Implement.
  • Member OBBSetFrom (OBB &obb, const AABB &aabb, const Matrix &m): Would like to simply do the above, but instead numerical stability requires to do the following:
  • Member Plane::ClosestPoint (const Ray &ray) const : Output parametric d as well.
  • Member Plane::ClosestPoint (const LineSegment &lineSegment) const : Output parametric d as well.
  • Member Plane::DihedralAngle (const Plane &plane) const : Implement.
  • Member Plane::GenerateCircle (const float3 &circleCenter, float radius) const : Implement.
  • Member Plane::Intersects (const Triangle &triangle) const : Add a version of Plane-Triangle intersection which returns the line segment of intersection.
  • Member Plane::ObliqueProject (const float3 &point, const float3 &obliqueProjectionDir) const : Implement.
  • Member Plane::ObliqueProjection (const float3 &obliqueProjectionDir) const : Implement.
  • Member Plane::Refract (const float3 &vec, float negativeSideRefractionIndex, float positiveSideRefractionIndex) const : Add Plane::Reflect.
  • Member Plane::Transform (const float3x4 &transform): Could optimize this function by switching to plane convention ax+by+cz+d=0 instead of ax+by+cz=d. Can optimize the inverse here by assuming orthogonality or orthonormality.
  • Member Plane::Transform (const float3x3 &transform): Could optimize the inverse here by assuming orthogonality or orthonormality.
  • Member Polygon::ClosestPoint (const float3 &point) const : Add ClosestPoint(Line/Ray/Plane/Triangle/Polygon/Circle/Disc/AABB/OBB/Sphere/Capsule/Frustum/Polyhedron).
  • Member Polygon::Contains (const float3 &point, float polygonThickness=1e-3f) const : Add ContainsConvex(float3/etc.). See RTCD p. 202. Add Contains(Circle/Disc).
  • Member Polygon::Contains2D (const float2 &localSpacePoint) const : Add Contains2D(Circle/Disc/Triangle/Polygon).
  • Member Polygon::Intersects (const Capsule &capsule) const : Optimize.
  • Member Polygon::Intersects (const Sphere &sphere) const : Optimize.
  • Member Polygon::Intersects (const Line &line) const : Add Intersects(Circle/Disc).
  • Member Polygon::MapTo2D (const float3 &point) const : Return a float3 to be able to read the distance of the point from the plane of the polygon? (or add an overload for that) Add MapTo2D(Line/LineSegment/Ray/Triangle/Polygon).
  • Member Polygon::MinimalEnclosingAABB () const : Add MinimalEnclosingSphere() and MinimalEnclosingOBB().
  • Member Polygon::NormalCCW () const : Optimize temporaries.
  • Member Polygon::NormalCW () const : Optimize temporaries.
  • Member Polygon::ToPolyhedron () const : Add ToPolyhedron(float polygonThickness)
  • Member Polyhedron::ClosestPoint (const float3 &point) const : Add ClosestPoint(Line/Ray/Plane/Triangle/Polygon/Circle/Disc/AABB/OBB/Sphere/Capsule/Frustum/Polyhedron).
  • Member Polyhedron::ClosestPointConvex (const float3 &point) const : Add ClosestPointConvex(Line/LineSegment/Ray/Plane/Triangle/Polygon/Circle/Disc/AABB/OBB/Sphere/Capsule/Frustum/Polyhedron).
  • Member Polyhedron::Contains (const float3 &point) const : Add Contains(Circle/Disc/Sphere/Capsule).
  • Member Polyhedron::ContainsConvex (const float3 &point) const : Add ContainsConvex(Polygon/AABB/OBB/Frustum/Polyhedron/Circle/Disc/Sphere/Capsule).
  • Member Polyhedron::Distance (const float3 &point) const : Add Distance(Line/LineSegment/Ray/Plane/Triangle/Polygon/Circle/Disc/AABB/OBB/Sphere/Capsule/Frustum/Polyhedron).
  • Member Polyhedron::EdgeIndices () const : Support this in linear time.
  • Member Polyhedron::Edges () const : Support this in linear time.
  • Member Polyhedron::Intersects (const AABB &aabb) const : This is a naive test. Implement a faster version.
  • Member Polyhedron::Intersects (const Polyhedron &polyhedron) const : Implement a more efficient algorithm.
  • Member Polyhedron::Intersects (const Frustum &frustum) const : This is a naive test. Implement a faster version.
  • Member Polyhedron::Intersects (const LineSegment &lineSegment) const : Add Intersects(Circle/Disc).
  • Member Polyhedron::Intersects (const OBB &obb) const : This is a naive test. Implement a faster version.
  • Member Polyhedron::IntersectsConvex (const Line &line) const : Add Intersects(Circle/Disc).
  • Member Polyhedron::IsConvex () const : Real-Time Collision Detection, p. 64: A faster O(n) approach is to compute for each face F of P the centroid C of F, and for all neighboring faces G of F test if C lies behind the supporting plane of G. If some C fails to lie behind the supporting plane of one or more neighboring faces, P is concave, and is otherwise assumed convex. However, note that just as the corresponding polygonal convexity test may fail for a pentagram this test may fail for, for example, a pentagram extruded out of its plane and capped at the ends.
  • Member Polyhedron::MinimalEnclosingAABB () const : Add MinimalEnclosingSphere() and MinimalEnclosingOBB().
  • Member Polyhedron::SurfaceArea () const : Optimize temporary copies.
  • Member Polyhedron::Volume () const : Optimize temporary copies.
  • Member Polynomial::SolveCubic (float a, float b, float c, float d, float &root1, float &root2, float &root3): Implement.
  • Member Polynomial::SolveQuadratic (float a, float b, float c, float &root1, float &root2): numerical float issues: catastrophic cancellation can occur in the subtraction.
  • Member Polynomial::SolveQuartic (float a, float b, float c, float d, float &root1, float &root2, float &root3, float &root4): Implement.
  • Member Quat::ToEulerXYX () const : the following could be heavily optimized. Don't route through float3x3 conversion.
  • Member Ray::IntersectsDisc (const Circle &disc) const : This signature will be moved to bool Intersects(const Disc &disc) const;
  • Member SetIdentity3x3 (Matrix &m): Clean this up, or remove if unused completely. -jj.
  • Member Sphere::ClosestPoint (const float3 &point) const : Add Sphere::ClosestPoint(Line/Ray/LineSegment/Plane/Triangle/Polygon/Circle/Disc/AABB/OBB/Sphere/Capsule/Frustum/Polyhedron).
  • Member Sphere::Contains (const float3 &point) const : Add Sphere::Contains(Circle/Disc).
  • Member Sphere::Distance (const float3 &point) const : Add Sphere::Distance(Polygon/Circle/Disc/Frustum/Polyhedron).
  • Member Sphere::Enclose (const float3 *pointArray, int numPoints): This might not be very optimal at all. Perhaps better to enclose the farthest point first.
  • Member Sphere::Enclose (const LineSegment &lineSegment): This might not be very optimal at all. Perhaps better to enclose the farthest point first.
  • Member Sphere::Enclose (const AABB &aabb): This might not be very optimal at all. Perhaps better to enclose the farthest point first.
  • Member Sphere::Enclose (const OBB &obb): This might not be very optimal at all. Perhaps better to enclose the farthest point first.
  • Member Sphere::Enclose (const float3 &point): Add Sphere::Enclose(Triangle/Polygon/Polyhedron).
  • Member Sphere::RandomPointInside (LCG &lcg): Add Sphere::Point(polarYaw, polarPitch, radius).
  • Member Sphere::RandomPointOnSurface (LCG &lcg): Add Sphere::PointOnSurface(polarYaw, polarPitch).
  • Member Triangle::ClosestPoint (const Line &line, float *outU, float *outV, float *outD) const : Add ClosestPoint(Ray/Plane/Polygon/Circle/Disk/AABB/OBB/Sphere/Capsule/Frustum/Polyhedron). The Triangle-Line code is currently untested. Run tests to ensure the following code works properly. Add optimized float3x3::InverseSymmetric().
  • Member Triangle::ClosestPoint (const LineSegment &lineSegment, float3 *otherPt) const : The Triangle-LineSegment test is naive. Optimize!
  • Member Triangle::ClosestPointToTriangleEdge (const Line &line, float *outU, float *outV, float *outD) const : Add ClosestPointToTriangleEdge(Point/Ray/Triangle/Plane/Polygon/Circle/Disk/AABB/OBB/Sphere/Capsule/Frustum/Polyhedron). Optimize!
  • Member Triangle::ClosestPointToTriangleEdge (const LineSegment &lineSegment, float *outU, float *outV, float *outD) const : Optimize!
  • Member Triangle::Contains (const float3 &point, float triangleThickness=1e-3f) const : Add Triangle::Contains(Circle) and Triangle::Contains(Disc). The plane-point distance test is omitted in Real-Time Collision Detection. p. 25. A bug in the book?
  • Member Triangle::Distance (const float3 &point) const : Add Triangle::Distance(Line/Ray/LineSegment/Plane/Triangle/Polygon/Circle/Disc/AABB/OBB/Capsule/Frustum/Polyhedron).
  • Member Triangle::Intersects (const AABB &aabb) const : The Triangle-AABB intersection test can be greatly optimized by manually unrolling loops, trivial math and by avoiding unnecessary copying.
  • Member Triangle::RandomPointInside (LCG &rng) const : rng.Float() returns [0,1[, but to be completely uniform, we'd need [0,1] here.