dxRay.h 1.2 KB

1234567891011121314151617181920212223242526272829303132
  1. struct dxRay{
  2. dReal Length;
  3. };
  4. inline void Decompose(const dMatrix3 Matrix, dVector3 Right, dVector3 Up, dVector3 Direction){
  5. Right[0] = Matrix[0 * 4 + 0];
  6. Right[1] = Matrix[1 * 4 + 0];
  7. Right[2] = Matrix[2 * 4 + 0];
  8. Right[3] = Matrix[3 * 4 + 0];
  9. Up[0] = Matrix[0 * 4 + 1];
  10. Up[1] = Matrix[1 * 4 + 1];
  11. Up[2] = Matrix[2 * 4 + 1];
  12. Up[3] = Matrix[3 * 4 + 1];
  13. Direction[0] = Matrix[0 * 4 + 2];
  14. Direction[1] = Matrix[1 * 4 + 2];
  15. Direction[2] = Matrix[2 * 4 + 2];
  16. Direction[3] = Matrix[3 * 4 + 2];
  17. }
  18. inline void Decompose(const dMatrix3 Matrix, dVector3 Vectors[3]){
  19. Decompose(Matrix, Vectors[0], Vectors[1], Vectors[2]);
  20. }
  21. inline dContactGeom* CONTACT(int Flags, dContactGeom* Contacts, int Index, int Stride){
  22. dIASSERT(Index >= 0 && Index < (Flags & 0x0ffff));
  23. return ((dContactGeom*)(((char*)Contacts) + (Index * Stride)));
  24. }
  25. int dCollidePR(dxGeom* RayGeom, dxGeom* PlaneGeom, int Flags, dContactGeom* Contacts, int Stride);
  26. int dCollideSR(dxGeom* RayGeom, dxGeom* SphereGeom, int Flags, dContactGeom* Contacts, int Stride);
  27. int dCollideBR(dxGeom* RayGeom, dxGeom* BoxGeom, int Flags, dContactGeom* Contacts, int Stride);
  28. int dCollideCCR(dxGeom* RayGeom, dxGeom* CCylinderGeom, int Flags, dContactGeom* Contacts, int Stride);