summaryrefslogtreecommitdiffhomepage
diff options
context:
space:
mode:
-rw-r--r--examples/models/models_mesh_picking.c4
-rw-r--r--src/models.c24
-rw-r--r--src/raylib.h2
3 files changed, 17 insertions, 13 deletions
diff --git a/examples/models/models_mesh_picking.c b/examples/models/models_mesh_picking.c
index 1cc38b45..e09f9860 100644
--- a/examples/models/models_mesh_picking.c
+++ b/examples/models/models_mesh_picking.c
@@ -101,8 +101,8 @@ int main()
{
hitMeshBBox = true;
- // Check ray collision against mesh
- meshHitInfo = GetCollisionRayMesh(ray, &tower.mesh);
+ // Check ray collision against model
+ meshHitInfo = GetCollisionRayModel(ray, &tower);
if ((meshHitInfo.hit) && (meshHitInfo.distance < nearestHit.distance))
{
diff --git a/src/models.c b/src/models.c
index ae1fc968..ccf2d05b 100644
--- a/src/models.c
+++ b/src/models.c
@@ -1966,28 +1966,28 @@ bool CheckCollisionRayBox(Ray ray, BoundingBox box)
return collision;
}
-// Get collision info between ray and mesh
-RayHitInfo GetCollisionRayMesh(Ray ray, Mesh *mesh)
+// Get collision info between ray and model
+RayHitInfo GetCollisionRayModel(Ray ray, Model *model)
{
RayHitInfo result = { 0 };
// If mesh doesn't have vertex data on CPU, can't test it.
- if (!mesh->vertices) return result;
+ if (!model->mesh.vertices) return result;
- // mesh->triangleCount may not be set, vertexCount is more reliable
- int triangleCount = mesh->vertexCount/3;
+ // model->mesh.triangleCount may not be set, vertexCount is more reliable
+ int triangleCount = model->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;
+ Vector3 *vertdata = (Vector3 *)model->mesh.vertices;
- if (mesh->indices)
+ if (model->mesh.indices)
{
- a = vertdata[mesh->indices[i*3 + 0]];
- b = vertdata[mesh->indices[i*3 + 1]];
- c = vertdata[mesh->indices[i*3 + 2]];
+ a = vertdata[model->mesh.indices[i*3 + 0]];
+ b = vertdata[model->mesh.indices[i*3 + 1]];
+ c = vertdata[model->mesh.indices[i*3 + 2]];
}
else
{
@@ -1995,6 +1995,10 @@ RayHitInfo GetCollisionRayMesh(Ray ray, Mesh *mesh)
b = vertdata[i*3 + 1];
c = vertdata[i*3 + 2];
}
+
+ a = Vector3Transform(a, model->transform);
+ b = Vector3Transform(b, model->transform);
+ c = Vector3Transform(c, model->transform);
RayHitInfo triHitInfo = GetCollisionRayTriangle(ray, a, b, c);
diff --git a/src/raylib.h b/src/raylib.h
index 3986ebcf..a5963905 100644
--- a/src/raylib.h
+++ b/src/raylib.h
@@ -1052,7 +1052,7 @@ RLAPI bool CheckCollisionRaySphere(Ray ray, Vector3 spherePosition, float sphere
RLAPI bool CheckCollisionRaySphereEx(Ray ray, Vector3 spherePosition, float sphereRadius,
Vector3 *collisionPoint); // Detect collision between ray and sphere, returns collision point
RLAPI bool CheckCollisionRayBox(Ray ray, BoundingBox box); // Detect collision between ray and box
-RLAPI RayHitInfo GetCollisionRayMesh(Ray ray, Mesh *mesh); // Get collision info between ray and mesh
+RLAPI RayHitInfo GetCollisionRayModel(Ray ray, Model *model); // Get collision info between ray and model
RLAPI RayHitInfo GetCollisionRayTriangle(Ray ray, Vector3 p1, Vector3 p2, Vector3 p3); // Get collision info between ray and triangle
RLAPI RayHitInfo GetCollisionRayGround(Ray ray, float groundHeight); // Get collision info between ray and ground plane (Y-normal plane)