Todos

  • Member AABB::ClosestPoint (const float4 &targetPoint) const : Add ClosestPoint(Line/Ray/LineSegment/Plane/Triangle/Polygon/Circle/Disc/AABB/OBB/Sphere/Capsule/Frustum/Polyhedron).
  • Member AABB::Contains (const float4 &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 float4 &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::Scale (const float4 &centerPoint, const float4 &scaleFactor): mat mat mat
  • Member AABB::SetFrom (const OBB &obb): Implement SetFrom(Polyhedron).
  • Member AlignedNew (size_t numElements, size_t alignment): This is not really placement-new.
  • Member AlignedNew (size_t numElements): This is not really placement-new.
  • Member Capsule::ClosestPoint (const float4 &targetPoint) const : Add ClosestPoint(Line/Ray/LineSegment/Plane/Triangle/Polygon/Circle/Disc/AABB/OBB/Sphere/Capsule/Frustum/Polyhedron).
  • Member Capsule::Contains (const float4 &point) const : Add Contains(Circle/Disc/Sphere/Capsule).
  • Member Capsule::Distance (const float4 &point) const : Add Distance(Triangle/Polygon/Circle/Disc/Capsule).
  • Member Capsule::Intersects (const Ray &ray) const : Add Intersects(Circle/Disc).
  • Member Capsule::IsFinite () const : Implement IsDegenerate().
  • Member Capsule::RandomPointOnSurface (LCG &rng) const : The points are NOT distributed uniformly. Convert this to using the rejection method and RandomPointInside() to produce a uniform distribution.
  • Member Circle::ClosestPointToDisc (const float4 &point) const : Implement ClosestPointToDisc(Ray/LineSegment/Line).
  • Member Circle::ClosestPointToEdge (const float4 &point) const : Implement ClosestPointToEdge(Ray/LineSegment/Line).
  • Member Circle::DistanceToDisc (const float4 &point) const : Implement DistanceToDisc(Ray/LineSegment/Line).
  • Member Circle::DistanceToEdge (const float4 &point) const : Implement DistanceToEdge(Ray/LineSegment/Line).
  • Member Circle::EdgeContains (const float4 &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 DetectSIMDCapability (): SIMD detection for other x86 platforms.
  • Member float3::Distance (const float3 &point) const : Add float3::Distance(Polygon/Circle/Disc/Frustum/Polyhedron).
  • 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 (float epsilon=1e-6f): It is possible optimize to avoid copying here by writing the inverse function specifically for float3x4.
  • Member float3x4::IsOrthonormal (float epsilon=1e-3f) const : Epsilon magnitudes don't match.
  • Member float3x4::operator* (const float3x3 &rhs) const : SSE.
  • Member float3x4::Orthonormalize (int firstColumn, int secondColumn, int thirdColumn): SSE. Optimize away copies.
  • Member float3x4::RemoveScale (): SSE.
  • Member float3x4::Transpose3 (): SSE.
  • 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 float4::Recip3 () const : SSE.
  • Member float4::ScaleToLength3 (float newLength): Add SSE-enabled version. Add ClampToLength3.
  • Member float4x4::InverseColOrthogonal (): SSE
  • Member float4x4::InverseOrthogonalUniformScale (): SSE
  • 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): SSE Optimize away copies.
  • Member float4x4::Orthonormalize3 (int firstColumn, int secondColumn, int thirdColumn): SSE Optimize away copies.
  • Member float4x4::RemoveScale (): SSE
  • Member float4x4::Transform (float4 *vectorArray, int numVectors) const : SSE.
  • Member float4x4::Transform (float4 *vectorArray, int numVectors, int strideBytes) const : SSE.
  • Member float4x4::TransformDir (float3 *dirArray, int numVectors) const : SSE.
  • Member float4x4::TransformDir (float3 *dirArray, int numVectors, int strideBytes) const : SSE.
  • Member float4x4::TransformPos (float3 *pointArray, int numPoints) const : SSE.
  • Member float4x4::TransformPos (float3 *pointArray, int numPoints, int strideBytes) const : SSE.
  • Member Frustum::ClosestPoint (const float4 &point) const : Add ClosestPoint(Line/Ray/LineSegment/Plane/Triangle/Polygon/Circle/Disc/AABB/OBB/Sphere/Capsule/Frustum/Polyhedron). Improve numerical stability enough to do effectively this - but do so without temporary memory allocations.
  • Member Frustum::Contains (const float4 &point) const : Add Contains(Circle/Disc/Sphere/Capsule). Make Frustum::Contains agnostic of the projection settings.
  • Member Frustum::Distance (const float4 &point) const : Add Frustum::Distance(Line/Ray/LineSegment/Plane/Triangle/Polygon/Circle/Disc/AABB/OBB/Capsule/Frustum/Polyhedron).
  • Member Frustum::Edge (int edgeIndex) const : Draw a diagram that shows which index generates which edge.
  • Member Frustum::Frustum (): remove the opaque-qtscript attribute.
  • 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::IsFinite () const : Implement IsDegenerate().
  • Member Frustum::SerializeToString () const : Implement this properly.
  • Member Frustum::UnProjectFromNearPlane (float x, float y) const : Add float3 UnProject(const float3 &point) const;
  • Member LCG::Int (int a, int b): Some bug here - the result is not necessarily in the proper range.
  • Member LCG::Int (): Convert to using Schrage's method for approximate factorization. (Numerical Recipes in C)
  • Member Line::IntersectsDisc (const Circle &disc) const : This signature will be moved to bool Intersects(const Disc &disc) const;
  • 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 float4 &point) const : Add ClosestPoint(Line/Ray/LineSegment/Plane/Triangle/Polygon/Circle/Disc/AABB/OBB/Sphere/Capsule/Frustum/Polyhedron).
  • Member OBB::Contains (const float4 &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 float4 &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::Enclose (const float4 &point): Optimize out this comparison! Can we omit this? (redundant since axis[i] are orthonormal?)
  • 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 OBB &obb, float epsilon=1e-3f) const : Add Intersects(Circle/Disc).
  • Member OBB::LocalToWorld () const : sse-matrix
  • Member OBB::OptimalEnclosingOBB (const float4 *pointArray, int numPoints): This function is strongly WIP! (Works, but is very very slow!) Convex hull'ize.
  • Member OBB::PointOnEdge (int edgeIndex, float u) const : Document which index generates which one.
  • 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 operator* (const float3x3 &lhs, const float3x4 &rhs): SSE.
  • Member operator* (const float4 &lhs, const float3x4 &rhs): SSE.
  • Member Plane::ClosestPoint (const LineSegment &lineSegment) const : Output parametric t along the ray as well.
  • Member Plane::Intersects (const AABB &aabb) const : Use the above form when Plane is SSE'ized.
  • Member Plane::Intersects (const Triangle &triangle) const : Add a version of Plane-Triangle intersection which returns the line segment of intersection.
  • Member Plane::Refract (const float4 &float4, 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 LineSegment &lineSegment, float4 *lineSegmentPt) const : Add ClosestPoint(Line/Ray/Plane/Triangle/Polygon/Circle/Disc/AABB/OBB/Sphere/Capsule/Frustum/Polyhedron).
  • Member Polygon::Contains (const float4 &point, float polygonThicknessSq=1e-5f) const : Add ContainsConvex(vec/etc.). See RTCD p. 202. Add Contains(Circle/Disc).
  • Member Polygon::Contains2D (const LineSegment &localSpaceLineSegment) const : Add Contains2D(Circle/Disc/Triangle/Polygon). Reimplement this!
  • Member Polygon::Intersects (const Line &line) const : Add Intersects(Circle/Disc).
  • Member Polygon::Intersects (const Capsule &capsule) const : Optimize.
  • Member Polygon::Intersects (const Sphere &sphere) const : Optimize.
  • Member Polygon::MapTo2D (const float4 &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::ProjectToAxis (const float4 &direction, float &outMin, float &outMax) const : Optimize!
  • Member Polygon::ToPolyhedron () const : Add ToPolyhedron(float polygonThickness)
  • Member Polyhedron::ClosestPoint (const LineSegment &lineSegment, float4 *lineSegmentPt) const : Make lineSegmentPt an out-reference instead of an out-pointer. Add ClosestPoint(Line/Ray/Plane/Triangle/Polygon/Circle/Disc/AABB/OBB/Sphere/Capsule/Frustum/Polyhedron).
  • Member Polyhedron::ClosestPointConvex (const float4 &point) const : Add ClosestPointConvex(Line/LineSegment/Ray/Plane/Triangle/Polygon/Circle/Disc/AABB/OBB/Sphere/Capsule/Frustum/Polyhedron).
  • Member Polyhedron::Contains (const float4 &point) const : Add Contains(Circle/Disc/Sphere/Capsule).
  • Member Polyhedron::ContainsConvex (const float4 &point, float epsilon=1e-4f) const : Add ContainsConvex(Polygon/AABB/OBB/Frustum/Polyhedron/Circle/Disc/Sphere/Capsule).
  • Member Polyhedron::ConvexHull (const float4 *pointArray, int numPoints): This function is strongly WIP!
  • Member Polyhedron::Distance (const float4 &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 LineSegment &lineSegment) const : Add Intersects(Circle/Disc).
  • 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::MergeAdjacentPlanarFaces ():
  • Member Polyhedron::MinimalEnclosingAABB () const : Add MinimalEnclosingSphere() and MinimalEnclosingOBB().
  • Member Polyhedron::ProjectToAxis (const float4 &direction, float &outMin, float &outMax) const : Optimize!
  • Member Polyhedron::SurfaceArea () const : Optimize temporary copies.
  • Member Polyhedron::Transform (const float4x4 &transform): Add float4x4::BatchTransformPos.
  • Member Polyhedron::Volume () const : Optimize temporary copies.
  • Member Polynomial::SolveQuadratic (float a, float b, float c, float &root1, float &root2): numerical float issues: catastrophic cancellation can occur in the subtraction.
  • Member QuadTree< T >::QuadTree (): Currently storing persistent raw pointers to this array outside the array. Remove the requirement to never reallocate the vector!
  • Member Quat::Slerp (const Quat &target, float t) const : SSE.
  • Member Quat::SlerpVector (const float3 &from, const float3 &to, float t): The following chain can be greatly optimized.
  • Member Quat::ToEulerXYX () const : the following could be heavily optimized. Don't route through float3x3 conversion.
  • Member Quat::Transform (const float3 &float4) const : Optimize/benchmark the scalar path not to generate a matrix!
  • Member Ray::IntersectsDisc (const Circle &disc) const : This signature will be moved to bool Intersects(const Disc &disc) const;
  • Member SATIntersect (const A &a, const B &b): Make this API safe. Make this API safe.
  • Member Set3x3PartRotateEulerXYX (Matrix &m, float &x2, float &y, float &x1): Vectorize to compute 4 sines+cosines at one time.
  • Member Set3x3PartRotateEulerXYZ (Matrix &m, float x, float y, float z): Vectorize to compute 4 sines+cosines at one time.
  • Member Set3x3PartRotateEulerXZX (Matrix &m, float &x2, float &z, float &x1): Vectorize to compute 4 sines+cosines at one time.
  • Member Set3x3PartRotateEulerXZY (Matrix &m, float &x, float &z, float &y): Vectorize to compute 4 sines+cosines at one time.
  • Member Set3x3PartRotateEulerYXY (Matrix &m, float &y2, float &x, float &y1): Vectorize to compute 4 sines+cosines at one time.
  • Member Set3x3PartRotateEulerYXZ (Matrix &m, float &y, float &x, float &z): Vectorize to compute 4 sines+cosines at one time.
  • Member Set3x3PartRotateEulerYZX (Matrix &m, float &y, float &z, float &x): Vectorize to compute 4 sines+cosines at one time.
  • Member Set3x3PartRotateEulerYZY (Matrix &m, float &y2, float &z, float &y1): Vectorize to compute 4 sines+cosines at one time.
  • Member Set3x3PartRotateEulerZXY (Matrix &m, float &z, float &x, float &y): Vectorize to compute 4 sines+cosines at one time.
  • Member Set3x3PartRotateEulerZXZ (Matrix &m, float &z2, float &x, float &z1): Vectorize to compute 4 sines+cosines at one time.
  • Member Set3x3PartRotateEulerZYX (Matrix &m, float &z, float &y, float &x): Vectorize to compute 4 sines+cosines at one time.
  • Member Set3x3PartRotateEulerZYZ (Matrix &m, float &z2, float &y, float &z1): Vectorize to compute 4 sines+cosines at one time.
  • Member Sphere::ClosestPoint (const float4 &point) const : Add Sphere::ClosestPoint(Line/Ray/LineSegment/Plane/Triangle/Polygon/Circle/Disc/AABB/OBB/Sphere/Capsule/Frustum/Polyhedron).
  • Member Sphere::Contains (const float4 &point) const : Add Sphere::Contains(Circle/Disc).
  • Member Sphere::Distance (const float4 &point) const : Add Sphere::Distance(Polygon/Circle/Disc/Frustum/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, float4 *otherPt=0) const : Add ClosestPoint(Ray/Plane/Polygon/Circle/Disk/AABB/OBB/Sphere/Capsule/Frustum/Polyhedron). Optimize this function.
  • Member Triangle::ClosestPoint (const LineSegment &lineSegment, float4 *otherPt=0) const : 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 float4 &point, float triangleThicknessSq=1e-5f) 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 float4 &point) const : Add Triangle::Distance(Line/Ray/LineSegment/Plane/Triangle/Polygon/Circle/Disc/AABB/OBB/Capsule/Frustum/Polyhedron).
  • Member Triangle::RandomPointInside (LCG &rng) const : rng.Float() returns [0,1[, but to be completely uniform, we'd need [0,1] here.