|
@@ -1966,50 +1966,7 @@ bool CheckCollisionRayBox(Ray ray, BoundingBox box)
|
|
return collision;
|
|
return collision;
|
|
}
|
|
}
|
|
|
|
|
|
-// Get collision info between ray and mesh
|
|
|
|
-RayHitInfo GetCollisionRayMesh(Ray ray, Mesh *mesh)
|
|
|
|
-{
|
|
|
|
- RayHitInfo result = { 0 };
|
|
|
|
-
|
|
|
|
- // If mesh doesn't have vertex data on CPU, can't test it.
|
|
|
|
- if (!mesh->vertices) return result;
|
|
|
|
-
|
|
|
|
- // mesh->triangleCount may not be set, vertexCount is more reliable
|
|
|
|
- int triangleCount = mesh->vertexCount/3;
|
|
|
|
-
|
|
|
|
- // Test against all triangles in mesh
|
|
|
|
- for (int i = 0; i < triangleCount; i++)
|
|
|
|
- {
|
|
|
|
- Vector3 a, b, c;
|
|
|
|
- Vector3 *vertdata = (Vector3 *)mesh->vertices;
|
|
|
|
-
|
|
|
|
- if (mesh->indices)
|
|
|
|
- {
|
|
|
|
- a = vertdata[mesh->indices[i*3 + 0]];
|
|
|
|
- b = vertdata[mesh->indices[i*3 + 1]];
|
|
|
|
- c = vertdata[mesh->indices[i*3 + 2]];
|
|
|
|
- }
|
|
|
|
- else
|
|
|
|
- {
|
|
|
|
- a = vertdata[i*3 + 0];
|
|
|
|
- b = vertdata[i*3 + 1];
|
|
|
|
- c = vertdata[i*3 + 2];
|
|
|
|
- }
|
|
|
|
-
|
|
|
|
- RayHitInfo triHitInfo = GetCollisionRayTriangle(ray, a, b, c);
|
|
|
|
-
|
|
|
|
- if (triHitInfo.hit)
|
|
|
|
- {
|
|
|
|
- // Save the closest hit triangle
|
|
|
|
- if ((!result.hit) || (result.distance > triHitInfo.distance)) result = triHitInfo;
|
|
|
|
- }
|
|
|
|
- }
|
|
|
|
-
|
|
|
|
- return result;
|
|
|
|
-}
|
|
|
|
-
|
|
|
|
// Get collision info between ray and model
|
|
// Get collision info between ray and model
|
|
-// NOTE: This is an exact clone of GetCollisionRayMesh but applies transformation matrix from the model to the vertices
|
|
|
|
RayHitInfo GetCollisionRayModel(Ray ray, Model *model)
|
|
RayHitInfo GetCollisionRayModel(Ray ray, Model *model)
|
|
{
|
|
{
|
|
RayHitInfo result = { 0 };
|
|
RayHitInfo result = { 0 };
|