| 
				
				
					
						
					
				
				
				 | 
			
			 | 
			
			@ -2838,6 +2838,51 @@ bool CheckCollisionRayBox(Ray ray, BoundingBox box) | 
			
		
		
	
		
			
			 | 
			 | 
			
			 | 
			
			
 | 
			
		
		
	
		
			
			 | 
			 | 
			
			 | 
			
			    return collision; | 
			
		
		
	
		
			
			 | 
			 | 
			
			 | 
			
			} | 
			
		
		
	
		
			
			 | 
			 | 
			
			 | 
			
			// Get collision info between ray and mesh | 
			
		
		
	
		
			
			 | 
			 | 
			
			 | 
			
			RayHitInfo GetCollisionRayMesh(Ray ray, Mesh mesh, Matrix transform) | 
			
		
		
	
		
			
			 | 
			 | 
			
			 | 
			
			{ | 
			
		
		
	
		
			
			 | 
			 | 
			
			 | 
			
			    RayHitInfo result = { 0 }; | 
			
		
		
	
		
			
			 | 
			 | 
			
			 | 
			
			
 | 
			
		
		
	
		
			
			 | 
			 | 
			
			 | 
			
				// Check if mesh vertex data on CPU for testing | 
			
		
		
	
		
			
			 | 
			 | 
			
			 | 
			
				if (mesh.vertices != NULL) | 
			
		
		
	
		
			
			 | 
			 | 
			
			 | 
			
				{ | 
			
		
		
	
		
			
			 | 
			 | 
			
			 | 
			
					// model->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]; | 
			
		
		
	
		
			
			 | 
			 | 
			
			 | 
			
						} | 
			
		
		
	
		
			
			 | 
			 | 
			
			 | 
			
			
 | 
			
		
		
	
		
			
			 | 
			 | 
			
			 | 
			
						a = Vector3Transform(a, transform); | 
			
		
		
	
		
			
			 | 
			 | 
			
			 | 
			
						b = Vector3Transform(b, transform); | 
			
		
		
	
		
			
			 | 
			 | 
			
			 | 
			
						c = Vector3Transform(c, transform); | 
			
		
		
	
		
			
			 | 
			 | 
			
			 | 
			
			
 | 
			
		
		
	
		
			
			 | 
			 | 
			
			 | 
			
						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 | 
			
		
		
	
		
			
			 | 
			 | 
			
			 | 
			
			RayHitInfo GetCollisionRayModel(Ray ray, Model model) | 
			
		
		
	
	
		
			
				| 
				
				
				
					
						
					
				
				 | 
			
			 | 
			
			@ -2846,43 +2891,12 @@ RayHitInfo GetCollisionRayModel(Ray ray, Model model) | 
			
		
		
	
		
			
			 | 
			 | 
			
			 | 
			
			
 | 
			
		
		
	
		
			
			 | 
			 | 
			
			 | 
			
			    for (int m = 0; m < model.meshCount; m++) | 
			
		
		
	
		
			
			 | 
			 | 
			
			 | 
			
			    { | 
			
		
		
	
		
			
			 | 
			 | 
			
			 | 
			
			        // Check if meshhas vertex data on CPU for testing | 
			
		
		
	
		
			
			 | 
			 | 
			
			 | 
			
			        if (model.meshes[m].vertices != NULL) | 
			
		
		
	
		
			
			 | 
			 | 
			
			 | 
			
			        { | 
			
		
		
	
		
			
			 | 
			 | 
			
			 | 
			
			            // model->mesh.triangleCount may not be set, vertexCount is more reliable | 
			
		
		
	
		
			
			 | 
			 | 
			
			 | 
			
			            int triangleCount = model.meshes[m].vertexCount/3; | 
			
		
		
	
		
			
			 | 
			 | 
			
			 | 
			
			
 | 
			
		
		
	
		
			
			 | 
			 | 
			
			 | 
			
			            // Test against all triangles in mesh | 
			
		
		
	
		
			
			 | 
			 | 
			
			 | 
			
			            for (int i = 0; i < triangleCount; i++) | 
			
		
		
	
		
			
			 | 
			 | 
			
			 | 
			
			            { | 
			
		
		
	
		
			
			 | 
			 | 
			
			 | 
			
			                Vector3 a, b, c; | 
			
		
		
	
		
			
			 | 
			 | 
			
			 | 
			
			                Vector3 *vertdata = (Vector3 *)model.meshes[m].vertices; | 
			
		
		
	
		
			
			 | 
			 | 
			
			 | 
			
			
 | 
			
		
		
	
		
			
			 | 
			 | 
			
			 | 
			
			                if (model.meshes[m].indices) | 
			
		
		
	
		
			
			 | 
			 | 
			
			 | 
			
			                { | 
			
		
		
	
		
			
			 | 
			 | 
			
			 | 
			
			                    a = vertdata[model.meshes[m].indices[i*3 + 0]]; | 
			
		
		
	
		
			
			 | 
			 | 
			
			 | 
			
			                    b = vertdata[model.meshes[m].indices[i*3 + 1]]; | 
			
		
		
	
		
			
			 | 
			 | 
			
			 | 
			
			                    c = vertdata[model.meshes[m].indices[i*3 + 2]]; | 
			
		
		
	
		
			
			 | 
			 | 
			
			 | 
			
			                } | 
			
		
		
	
		
			
			 | 
			 | 
			
			 | 
			
			                else | 
			
		
		
	
		
			
			 | 
			 | 
			
			 | 
			
			                { | 
			
		
		
	
		
			
			 | 
			 | 
			
			 | 
			
			                    a = vertdata[i*3 + 0]; | 
			
		
		
	
		
			
			 | 
			 | 
			
			 | 
			
			                    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 meshHitInfo = GetCollisionRayMesh(ray, model.meshes[m], model.transform); | 
			
		
		
	
		
			
			 | 
			 | 
			
			 | 
			
			
 | 
			
		
		
	
		
			
			 | 
			 | 
			
			 | 
			
			                RayHitInfo triHitInfo = GetCollisionRayTriangle(ray, a, b, c); | 
			
		
		
	
		
			
			 | 
			 | 
			
			 | 
			
			
 | 
			
		
		
	
		
			
			 | 
			 | 
			
			 | 
			
			                if (triHitInfo.hit) | 
			
		
		
	
		
			
			 | 
			 | 
			
			 | 
			
			                { | 
			
		
		
	
		
			
			 | 
			 | 
			
			 | 
			
			                    // Save the closest hit triangle | 
			
		
		
	
		
			
			 | 
			 | 
			
			 | 
			
			                    if ((!result.hit) || (result.distance > triHitInfo.distance)) result = triHitInfo; | 
			
		
		
	
		
			
			 | 
			 | 
			
			 | 
			
			                } | 
			
		
		
	
		
			
			 | 
			 | 
			
			 | 
			
			            } | 
			
		
		
	
		
			
			 | 
			 | 
			
			 | 
			
			        if (meshHitInfo.hit) | 
			
		
		
	
		
			
			 | 
			 | 
			
			 | 
			
			        { | 
			
		
		
	
		
			
			 | 
			 | 
			
			 | 
			
			            // Save the closest hit mesh | 
			
		
		
	
		
			
			 | 
			 | 
			
			 | 
			
			            if ((!result.hit) || (result.distance > meshHitInfo.distance)) result = meshHitInfo; | 
			
		
		
	
		
			
			 | 
			 | 
			
			 | 
			
			        } | 
			
		
		
	
		
			
			 | 
			 | 
			
			 | 
			
			    } | 
			
		
		
	
		
			
			 | 
			 | 
			
			 | 
			
			
 | 
			
		
		
	
	
		
			
				| 
				
					
						
					
				
				
				
				 | 
			
			 | 
			
			
 |