diff options
| author | Ray <raysan5@gmail.com> | 2018-04-08 22:28:19 +0200 |
|---|---|---|
| committer | GitHub <noreply@github.com> | 2018-04-08 22:28:19 +0200 |
| commit | 9e7dedf5af6ea3f70196e86865b8a7e676b419b2 (patch) | |
| tree | b7ce38848b492596d1429dd7fcb5d02f3fdc6119 /src | |
| parent | 3caa044bf259653eadcba5dc413101b95c6ebfbb (diff) | |
| parent | 7bd0f8b28c4cd576ab5c3e7b696d408f0f8045e4 (diff) | |
| download | raylib-9e7dedf5af6ea3f70196e86865b8a7e676b419b2.tar.gz raylib-9e7dedf5af6ea3f70196e86865b8a7e676b419b2.zip | |
Merge pull request #521 from TheLumaio/master
Added GetCollisionRayModel
Diffstat (limited to 'src')
| -rw-r--r-- | src/models.c | 24 | ||||
| -rw-r--r-- | src/raylib.h | 2 |
2 files changed, 15 insertions, 11 deletions
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) |
