| 
				
				
					
						
					
				
				
				 | 
			
			 | 
			
			@ -2815,7 +2815,7 @@ void DrawBillboardPro(Camera camera, Texture2D texture, Rectangle source, Vector | 
			
		
		
	
		
			
			 | 
			 | 
			
			 | 
			
			{ | 
			
		
		
	
		
			
			 | 
			 | 
			
			 | 
			
			    // NOTE: Billboard size will maintain source rectangle aspect ratio, size will represent billboard width | 
			
		
		
	
		
			
			 | 
			 | 
			
			 | 
			
			    Vector2 sizeRatio = { size.y, size.x*(float)source.height/source.width }; | 
			
		
		
	
		
			
			 | 
			 | 
			
			 | 
			
				 | 
			
		
		
	
		
			
			 | 
			 | 
			
			 | 
			
			     | 
			
		
		
	
		
			
			 | 
			 | 
			
			 | 
			
			    Matrix matView = MatrixLookAt(camera.position, camera.target, camera.up); | 
			
		
		
	
		
			
			 | 
			 | 
			
			 | 
			
			
 | 
			
		
		
	
		
			
			 | 
			 | 
			
			 | 
			
			    Vector3 right = { matView.m0, matView.m4, matView.m8 }; | 
			
		
		
	
	
		
			
				| 
				
				
				
					
						
					
				
				 | 
			
			 | 
			
			@ -2824,9 +2824,9 @@ void DrawBillboardPro(Camera camera, Texture2D texture, Rectangle source, Vector | 
			
		
		
	
		
			
			 | 
			 | 
			
			 | 
			
			    // NOTE: Billboard locked on axis-Y | 
			
		
		
	
		
			
			 | 
			 | 
			
			 | 
			
			    Vector3 up = { 0.0f, 1.0f, 0.0f }; | 
			
		
		
	
		
			
			 | 
			 | 
			
			 | 
			
			
 | 
			
		
		
	
		
			
			 | 
			 | 
			
			 | 
			
				Vector3 rightScaled = Vector3Scale(right, sizeRatio.x/2); | 
			
		
		
	
		
			
			 | 
			 | 
			
			 | 
			
				Vector3 upScaled = Vector3Scale(up, sizeRatio.y/2); | 
			
		
		
	
		
			
			 | 
			 | 
			
			 | 
			
				 | 
			
		
		
	
		
			
			 | 
			 | 
			
			 | 
			
			    Vector3 rightScaled = Vector3Scale(right, sizeRatio.x/2); | 
			
		
		
	
		
			
			 | 
			 | 
			
			 | 
			
			    Vector3 upScaled = Vector3Scale(up, sizeRatio.y/2); | 
			
		
		
	
		
			
			 | 
			 | 
			
			 | 
			
			     | 
			
		
		
	
		
			
			 | 
			 | 
			
			 | 
			
			    Vector3 p1 = Vector3Add(rightScaled, upScaled); | 
			
		
		
	
		
			
			 | 
			 | 
			
			 | 
			
			    Vector3 p2 = Vector3Subtract(rightScaled, upScaled); | 
			
		
		
	
		
			
			 | 
			 | 
			
			 | 
			
			
 | 
			
		
		
	
	
		
			
				| 
				
				
				
					
						
					
				
				 | 
			
			 | 
			
			@ -2834,50 +2834,50 @@ void DrawBillboardPro(Camera camera, Texture2D texture, Rectangle source, Vector | 
			
		
		
	
		
			
			 | 
			 | 
			
			 | 
			
			    Vector3 topRight = p1; | 
			
		
		
	
		
			
			 | 
			 | 
			
			 | 
			
			    Vector3 bottomRight = p2; | 
			
		
		
	
		
			
			 | 
			 | 
			
			 | 
			
			    Vector3 bottomLeft = Vector3Scale(p1, -1); | 
			
		
		
	
		
			
			 | 
			 | 
			
			 | 
			
				 | 
			
		
		
	
		
			
			 | 
			 | 
			
			 | 
			
				if (rotation != 0.0f) | 
			
		
		
	
		
			
			 | 
			 | 
			
			 | 
			
				{	 | 
			
		
		
	
		
			
			 | 
			 | 
			
			 | 
			
					float sinRotation = sinf(rotation*DEG2RAD); | 
			
		
		
	
		
			
			 | 
			 | 
			
			 | 
			
					float cosRotation = cosf(rotation*DEG2RAD); | 
			
		
		
	
		
			
			 | 
			 | 
			
			 | 
			
					 | 
			
		
		
	
		
			
			 | 
			 | 
			
			 | 
			
					// NOTE: (-1, 1) is the range where origin.x, origin.y is inside the texture | 
			
		
		
	
		
			
			 | 
			 | 
			
			 | 
			
					float rotateAboutX = sizeRatio.x*origin.x/2; | 
			
		
		
	
		
			
			 | 
			 | 
			
			 | 
			
					float rotateAboutY = sizeRatio.y*origin.y/2; | 
			
		
		
	
		
			
			 | 
			 | 
			
			 | 
			
					 | 
			
		
		
	
		
			
			 | 
			 | 
			
			 | 
			
					float xtvalue, ytvalue; | 
			
		
		
	
		
			
			 | 
			 | 
			
			 | 
			
					float rotatedX, rotatedY; | 
			
		
		
	
		
			
			 | 
			 | 
			
			 | 
			
					 | 
			
		
		
	
		
			
			 | 
			 | 
			
			 | 
			
					xtvalue = Vector3DotProduct(right, topLeft) - rotateAboutX; // Project points to x and y coordinates on the billboard plane | 
			
		
		
	
		
			
			 | 
			 | 
			
			 | 
			
					ytvalue = Vector3DotProduct(up, topLeft) - rotateAboutY; | 
			
		
		
	
		
			
			 | 
			 | 
			
			 | 
			
					rotatedX = xtvalue*cosRotation - ytvalue*sinRotation + rotateAboutX; // Rotate about the point origin  | 
			
		
		
	
		
			
			 | 
			 | 
			
			 | 
			
					rotatedY = xtvalue*sinRotation + ytvalue*cosRotation + rotateAboutY; | 
			
		
		
	
		
			
			 | 
			 | 
			
			 | 
			
					topLeft = Vector3Add(Vector3Scale(up, rotatedY), Vector3Scale(right, rotatedX)); // Translate back to cartesian coordinates | 
			
		
		
	
		
			
			 | 
			 | 
			
			 | 
			
					 | 
			
		
		
	
		
			
			 | 
			 | 
			
			 | 
			
					xtvalue = Vector3DotProduct(right, topRight) - rotateAboutX; | 
			
		
		
	
		
			
			 | 
			 | 
			
			 | 
			
					ytvalue = Vector3DotProduct(up, topRight) - rotateAboutY; | 
			
		
		
	
		
			
			 | 
			 | 
			
			 | 
			
					rotatedX = xtvalue*cosRotation - ytvalue*sinRotation + rotateAboutX; | 
			
		
		
	
		
			
			 | 
			 | 
			
			 | 
			
					rotatedY = xtvalue*sinRotation + ytvalue*cosRotation + rotateAboutY; | 
			
		
		
	
		
			
			 | 
			 | 
			
			 | 
			
					topRight = Vector3Add(Vector3Scale(up, rotatedY), Vector3Scale(right, rotatedX)); | 
			
		
		
	
		
			
			 | 
			 | 
			
			 | 
			
			
 | 
			
		
		
	
		
			
			 | 
			 | 
			
			 | 
			
					xtvalue = Vector3DotProduct(right, bottomRight) - rotateAboutX; | 
			
		
		
	
		
			
			 | 
			 | 
			
			 | 
			
					ytvalue = Vector3DotProduct(up, bottomRight) - rotateAboutY; | 
			
		
		
	
		
			
			 | 
			 | 
			
			 | 
			
					rotatedX = xtvalue*cosRotation - ytvalue*sinRotation + rotateAboutX; | 
			
		
		
	
		
			
			 | 
			 | 
			
			 | 
			
					rotatedY = xtvalue*sinRotation + ytvalue*cosRotation + rotateAboutY; | 
			
		
		
	
		
			
			 | 
			 | 
			
			 | 
			
					bottomRight = Vector3Add(Vector3Scale(up, rotatedY), Vector3Scale(right, rotatedX)); | 
			
		
		
	
		
			
			 | 
			 | 
			
			 | 
			
					 | 
			
		
		
	
		
			
			 | 
			 | 
			
			 | 
			
					xtvalue = Vector3DotProduct(right, bottomLeft)-rotateAboutX; | 
			
		
		
	
		
			
			 | 
			 | 
			
			 | 
			
					ytvalue = Vector3DotProduct(up, bottomLeft)-rotateAboutY; | 
			
		
		
	
		
			
			 | 
			 | 
			
			 | 
			
					rotatedX = xtvalue*cosRotation - ytvalue*sinRotation + rotateAboutX; | 
			
		
		
	
		
			
			 | 
			 | 
			
			 | 
			
					rotatedY = xtvalue*sinRotation + ytvalue*cosRotation + rotateAboutY; | 
			
		
		
	
		
			
			 | 
			 | 
			
			 | 
			
					bottomLeft = Vector3Add(Vector3Scale(up, rotatedY), Vector3Scale(right, rotatedX)); | 
			
		
		
	
		
			
			 | 
			 | 
			
			 | 
			
				} | 
			
		
		
	
		
			
			 | 
			 | 
			
			 | 
			
				 | 
			
		
		
	
		
			
			 | 
			 | 
			
			 | 
			
			     | 
			
		
		
	
		
			
			 | 
			 | 
			
			 | 
			
			    if (rotation != 0.0f) | 
			
		
		
	
		
			
			 | 
			 | 
			
			 | 
			
			    {     | 
			
		
		
	
		
			
			 | 
			 | 
			
			 | 
			
			        float sinRotation = sinf(rotation*DEG2RAD); | 
			
		
		
	
		
			
			 | 
			 | 
			
			 | 
			
			        float cosRotation = cosf(rotation*DEG2RAD); | 
			
		
		
	
		
			
			 | 
			 | 
			
			 | 
			
			         | 
			
		
		
	
		
			
			 | 
			 | 
			
			 | 
			
			        // NOTE: (-1, 1) is the range where origin.x, origin.y is inside the texture | 
			
		
		
	
		
			
			 | 
			 | 
			
			 | 
			
			        float rotateAboutX = sizeRatio.x*origin.x/2; | 
			
		
		
	
		
			
			 | 
			 | 
			
			 | 
			
			        float rotateAboutY = sizeRatio.y*origin.y/2; | 
			
		
		
	
		
			
			 | 
			 | 
			
			 | 
			
			         | 
			
		
		
	
		
			
			 | 
			 | 
			
			 | 
			
			        float xtvalue, ytvalue; | 
			
		
		
	
		
			
			 | 
			 | 
			
			 | 
			
			        float rotatedX, rotatedY; | 
			
		
		
	
		
			
			 | 
			 | 
			
			 | 
			
			         | 
			
		
		
	
		
			
			 | 
			 | 
			
			 | 
			
			        xtvalue = Vector3DotProduct(right, topLeft) - rotateAboutX; // Project points to x and y coordinates on the billboard plane | 
			
		
		
	
		
			
			 | 
			 | 
			
			 | 
			
			        ytvalue = Vector3DotProduct(up, topLeft) - rotateAboutY; | 
			
		
		
	
		
			
			 | 
			 | 
			
			 | 
			
			        rotatedX = xtvalue*cosRotation - ytvalue*sinRotation + rotateAboutX; // Rotate about the point origin  | 
			
		
		
	
		
			
			 | 
			 | 
			
			 | 
			
			        rotatedY = xtvalue*sinRotation + ytvalue*cosRotation + rotateAboutY; | 
			
		
		
	
		
			
			 | 
			 | 
			
			 | 
			
			        topLeft = Vector3Add(Vector3Scale(up, rotatedY), Vector3Scale(right, rotatedX)); // Translate back to cartesian coordinates | 
			
		
		
	
		
			
			 | 
			 | 
			
			 | 
			
			         | 
			
		
		
	
		
			
			 | 
			 | 
			
			 | 
			
			        xtvalue = Vector3DotProduct(right, topRight) - rotateAboutX; | 
			
		
		
	
		
			
			 | 
			 | 
			
			 | 
			
			        ytvalue = Vector3DotProduct(up, topRight) - rotateAboutY; | 
			
		
		
	
		
			
			 | 
			 | 
			
			 | 
			
			        rotatedX = xtvalue*cosRotation - ytvalue*sinRotation + rotateAboutX; | 
			
		
		
	
		
			
			 | 
			 | 
			
			 | 
			
			        rotatedY = xtvalue*sinRotation + ytvalue*cosRotation + rotateAboutY; | 
			
		
		
	
		
			
			 | 
			 | 
			
			 | 
			
			        topRight = Vector3Add(Vector3Scale(up, rotatedY), Vector3Scale(right, rotatedX)); | 
			
		
		
	
		
			
			 | 
			 | 
			
			 | 
			
			
 | 
			
		
		
	
		
			
			 | 
			 | 
			
			 | 
			
			        xtvalue = Vector3DotProduct(right, bottomRight) - rotateAboutX; | 
			
		
		
	
		
			
			 | 
			 | 
			
			 | 
			
			        ytvalue = Vector3DotProduct(up, bottomRight) - rotateAboutY; | 
			
		
		
	
		
			
			 | 
			 | 
			
			 | 
			
			        rotatedX = xtvalue*cosRotation - ytvalue*sinRotation + rotateAboutX; | 
			
		
		
	
		
			
			 | 
			 | 
			
			 | 
			
			        rotatedY = xtvalue*sinRotation + ytvalue*cosRotation + rotateAboutY; | 
			
		
		
	
		
			
			 | 
			 | 
			
			 | 
			
			        bottomRight = Vector3Add(Vector3Scale(up, rotatedY), Vector3Scale(right, rotatedX)); | 
			
		
		
	
		
			
			 | 
			 | 
			
			 | 
			
			         | 
			
		
		
	
		
			
			 | 
			 | 
			
			 | 
			
			        xtvalue = Vector3DotProduct(right, bottomLeft)-rotateAboutX; | 
			
		
		
	
		
			
			 | 
			 | 
			
			 | 
			
			        ytvalue = Vector3DotProduct(up, bottomLeft)-rotateAboutY; | 
			
		
		
	
		
			
			 | 
			 | 
			
			 | 
			
			        rotatedX = xtvalue*cosRotation - ytvalue*sinRotation + rotateAboutX; | 
			
		
		
	
		
			
			 | 
			 | 
			
			 | 
			
			        rotatedY = xtvalue*sinRotation + ytvalue*cosRotation + rotateAboutY; | 
			
		
		
	
		
			
			 | 
			 | 
			
			 | 
			
			        bottomLeft = Vector3Add(Vector3Scale(up, rotatedY), Vector3Scale(right, rotatedX)); | 
			
		
		
	
		
			
			 | 
			 | 
			
			 | 
			
			    } | 
			
		
		
	
		
			
			 | 
			 | 
			
			 | 
			
			     | 
			
		
		
	
		
			
			 | 
			 | 
			
			 | 
			
			    // Translate points to the draw center (position) | 
			
		
		
	
		
			
			 | 
			 | 
			
			 | 
			
				topLeft = Vector3Add(topLeft, position); | 
			
		
		
	
		
			
			 | 
			 | 
			
			 | 
			
				topRight = Vector3Add(topRight, position); | 
			
		
		
	
		
			
			 | 
			 | 
			
			 | 
			
				bottomRight = Vector3Add(bottomRight, position); | 
			
		
		
	
		
			
			 | 
			 | 
			
			 | 
			
				bottomLeft = Vector3Add(bottomLeft, position); | 
			
		
		
	
		
			
			 | 
			 | 
			
			 | 
			
				 | 
			
		
		
	
		
			
			 | 
			 | 
			
			 | 
			
			    topLeft = Vector3Add(topLeft, position); | 
			
		
		
	
		
			
			 | 
			 | 
			
			 | 
			
			    topRight = Vector3Add(topRight, position); | 
			
		
		
	
		
			
			 | 
			 | 
			
			 | 
			
			    bottomRight = Vector3Add(bottomRight, position); | 
			
		
		
	
		
			
			 | 
			 | 
			
			 | 
			
			    bottomLeft = Vector3Add(bottomLeft, position); | 
			
		
		
	
		
			
			 | 
			 | 
			
			 | 
			
			     | 
			
		
		
	
		
			
			 | 
			 | 
			
			 | 
			
			    rlCheckRenderBatchLimit(4); | 
			
		
		
	
		
			
			 | 
			 | 
			
			 | 
			
			
 | 
			
		
		
	
		
			
			 | 
			 | 
			
			 | 
			
			    rlSetTexture(texture.id); | 
			
		
		
	
	
		
			
				| 
				
				
				
					
						
					
				
				 | 
			
			 | 
			
			@ -2902,7 +2902,7 @@ void DrawBillboardPro(Camera camera, Texture2D texture, Rectangle source, Vector | 
			
		
		
	
		
			
			 | 
			 | 
			
			 | 
			
			        rlVertex3f(topRight.x, topRight.y, topRight.z); | 
			
		
		
	
		
			
			 | 
			 | 
			
			 | 
			
			    rlEnd(); | 
			
		
		
	
		
			
			 | 
			 | 
			
			 | 
			
			
 | 
			
		
		
	
		
			
			 | 
			 | 
			
			 | 
			
			    rlSetTexture(0);	 | 
			
		
		
	
		
			
			 | 
			 | 
			
			 | 
			
			    rlSetTexture(0);     | 
			
		
		
	
		
			
			 | 
			 | 
			
			 | 
			
			} | 
			
		
		
	
		
			
			 | 
			 | 
			
			 | 
			
			
 | 
			
		
		
	
		
			
			 | 
			 | 
			
			 | 
			
			// Draw a bounding box with wires | 
			
		
		
	
	
		
			
				| 
				
					
						
					
				
				
				
				 | 
			
			 | 
			
			
 |