| 
				
				
				
				 | 
			
			 | 
			
			@ -1,135 +0,0 @@ | 
			
		
		
	
		
			
			 | 
			 | 
			
			 | 
			
			/******************************************************************************************* | 
			
		
		
	
		
			
			 | 
			 | 
			
			 | 
			
			* | 
			
		
		
	
		
			
			 | 
			 | 
			
			 | 
			
			*   raylib [core] example - quat conversions | 
			
		
		
	
		
			
			 | 
			 | 
			
			 | 
			
			* | 
			
		
		
	
		
			
			 | 
			 | 
			
			 | 
			
			*   Generally you should really stick to eulers OR quats... | 
			
		
		
	
		
			
			 | 
			 | 
			
			 | 
			
			*   This tests that various conversions are equivalent. | 
			
		
		
	
		
			
			 | 
			 | 
			
			 | 
			
			* | 
			
		
		
	
		
			
			 | 
			 | 
			
			 | 
			
			*   This example has been created using raylib 3.5 (www.raylib.com) | 
			
		
		
	
		
			
			 | 
			 | 
			
			 | 
			
			*   raylib is licensed under an unmodified zlib/libpng license (View raylib.h for details) | 
			
		
		
	
		
			
			 | 
			 | 
			
			 | 
			
			* | 
			
		
		
	
		
			
			 | 
			 | 
			
			 | 
			
			*   Example contributed by Chris Camacho (@chriscamacho) and reviewed by Ramon Santamaria (@raysan5) | 
			
		
		
	
		
			
			 | 
			 | 
			
			 | 
			
			* | 
			
		
		
	
		
			
			 | 
			 | 
			
			 | 
			
			*   Copyright (c) 2020-2021 Chris Camacho (@chriscamacho) and Ramon Santamaria (@raysan5) | 
			
		
		
	
		
			
			 | 
			 | 
			
			 | 
			
			* | 
			
		
		
	
		
			
			 | 
			 | 
			
			 | 
			
			********************************************************************************************/ | 
			
		
		
	
		
			
			 | 
			 | 
			
			 | 
			
			
 | 
			
		
		
	
		
			
			 | 
			 | 
			
			 | 
			
			#include "raylib.h" | 
			
		
		
	
		
			
			 | 
			 | 
			
			 | 
			
			
 | 
			
		
		
	
		
			
			 | 
			 | 
			
			 | 
			
			#include "raymath.h" | 
			
		
		
	
		
			
			 | 
			 | 
			
			 | 
			
			
 | 
			
		
		
	
		
			
			 | 
			 | 
			
			 | 
			
			//------------------------------------------------------------------------------------ | 
			
		
		
	
		
			
			 | 
			 | 
			
			 | 
			
			// Program main entry point | 
			
		
		
	
		
			
			 | 
			 | 
			
			 | 
			
			//------------------------------------------------------------------------------------ | 
			
		
		
	
		
			
			 | 
			 | 
			
			 | 
			
			int main(void) | 
			
		
		
	
		
			
			 | 
			 | 
			
			 | 
			
			{ | 
			
		
		
	
		
			
			 | 
			 | 
			
			 | 
			
			    // Initialization | 
			
		
		
	
		
			
			 | 
			 | 
			
			 | 
			
			    //-------------------------------------------------------------------------------------- | 
			
		
		
	
		
			
			 | 
			 | 
			
			 | 
			
			    const int screenWidth = 800; | 
			
		
		
	
		
			
			 | 
			 | 
			
			 | 
			
			    const int screenHeight = 450; | 
			
		
		
	
		
			
			 | 
			 | 
			
			 | 
			
			
 | 
			
		
		
	
		
			
			 | 
			 | 
			
			 | 
			
			    InitWindow(screenWidth, screenHeight, "raylib [core] example - quat conversions"); | 
			
		
		
	
		
			
			 | 
			 | 
			
			 | 
			
			
 | 
			
		
		
	
		
			
			 | 
			 | 
			
			 | 
			
			    Camera3D camera = { 0 }; | 
			
		
		
	
		
			
			 | 
			 | 
			
			 | 
			
			    camera.position = (Vector3){ 0.0f, 10.0f, 10.0f };  // Camera position | 
			
		
		
	
		
			
			 | 
			 | 
			
			 | 
			
			    camera.target = (Vector3){ 0.0f, 0.0f, 0.0f };      // Camera looking at point | 
			
		
		
	
		
			
			 | 
			 | 
			
			 | 
			
			    camera.up = (Vector3){ 0.0f, 1.0f, 0.0f };          // Camera up vector (rotation towards target) | 
			
		
		
	
		
			
			 | 
			 | 
			
			 | 
			
			    camera.fovy = 45.0f;                                // Camera field-of-view Y | 
			
		
		
	
		
			
			 | 
			 | 
			
			 | 
			
			    camera.projection = CAMERA_PERSPECTIVE;             // Camera mode type | 
			
		
		
	
		
			
			 | 
			 | 
			
			 | 
			
			
 | 
			
		
		
	
		
			
			 | 
			 | 
			
			 | 
			
			    // Load a cylinder model for testing | 
			
		
		
	
		
			
			 | 
			 | 
			
			 | 
			
			    Model model = LoadModelFromMesh(GenMeshCylinder(0.2f, 1.0f, 32)); | 
			
		
		
	
		
			
			 | 
			 | 
			
			 | 
			
			
 | 
			
		
		
	
		
			
			 | 
			 | 
			
			 | 
			
			    // Generic quaternion for operations | 
			
		
		
	
		
			
			 | 
			 | 
			
			 | 
			
			    Quaternion q1 = { 0 }; | 
			
		
		
	
		
			
			 | 
			 | 
			
			 | 
			
			
 | 
			
		
		
	
		
			
			 | 
			 | 
			
			 | 
			
			    // Transform matrices required to draw 4 cylinders | 
			
		
		
	
		
			
			 | 
			 | 
			
			 | 
			
			    Matrix m1 = { 0 }; | 
			
		
		
	
		
			
			 | 
			 | 
			
			 | 
			
			    Matrix m2 = { 0 }; | 
			
		
		
	
		
			
			 | 
			 | 
			
			 | 
			
			    Matrix m3 = { 0 }; | 
			
		
		
	
		
			
			 | 
			 | 
			
			 | 
			
			    Matrix m4 = { 0 }; | 
			
		
		
	
		
			
			 | 
			 | 
			
			 | 
			
			
 | 
			
		
		
	
		
			
			 | 
			 | 
			
			 | 
			
			    // Generic vectors for rotations | 
			
		
		
	
		
			
			 | 
			 | 
			
			 | 
			
			    Vector3 v1 = { 0 }; | 
			
		
		
	
		
			
			 | 
			 | 
			
			 | 
			
			    Vector3 v2 = { 0 }; | 
			
		
		
	
		
			
			 | 
			 | 
			
			 | 
			
			
 | 
			
		
		
	
		
			
			 | 
			 | 
			
			 | 
			
			    SetTargetFPS(60);               // Set our game to run at 60 frames-per-second | 
			
		
		
	
		
			
			 | 
			 | 
			
			 | 
			
			    //-------------------------------------------------------------------------------------- | 
			
		
		
	
		
			
			 | 
			 | 
			
			 | 
			
			
 | 
			
		
		
	
		
			
			 | 
			 | 
			
			 | 
			
			    // Main game loop | 
			
		
		
	
		
			
			 | 
			 | 
			
			 | 
			
			    while (!WindowShouldClose())    // Detect window close button or ESC key | 
			
		
		
	
		
			
			 | 
			 | 
			
			 | 
			
			    { | 
			
		
		
	
		
			
			 | 
			 | 
			
			 | 
			
			        // Update | 
			
		
		
	
		
			
			 | 
			 | 
			
			 | 
			
			        //-------------------------------------------------------------------------------------- | 
			
		
		
	
		
			
			 | 
			 | 
			
			 | 
			
			        if (v2.x < 0) v2.x += PI*2; | 
			
		
		
	
		
			
			 | 
			 | 
			
			 | 
			
			        if (v2.y < 0) v2.y += PI*2; | 
			
		
		
	
		
			
			 | 
			 | 
			
			 | 
			
			        if (v2.z < 0) v2.z += PI*2; | 
			
		
		
	
		
			
			 | 
			 | 
			
			 | 
			
			
 | 
			
		
		
	
		
			
			 | 
			 | 
			
			 | 
			
			        if (!IsKeyDown(KEY_SPACE)) | 
			
		
		
	
		
			
			 | 
			 | 
			
			 | 
			
			        { | 
			
		
		
	
		
			
			 | 
			 | 
			
			 | 
			
			            v1.x += 0.01f; | 
			
		
		
	
		
			
			 | 
			 | 
			
			 | 
			
			            v1.y += 0.03f; | 
			
		
		
	
		
			
			 | 
			 | 
			
			 | 
			
			            v1.z += 0.05f; | 
			
		
		
	
		
			
			 | 
			 | 
			
			 | 
			
			        } | 
			
		
		
	
		
			
			 | 
			 | 
			
			 | 
			
			
 | 
			
		
		
	
		
			
			 | 
			 | 
			
			 | 
			
			        if (v1.x > PI*2) v1.x -= PI*2; | 
			
		
		
	
		
			
			 | 
			 | 
			
			 | 
			
			        if (v1.y > PI*2) v1.y -= PI*2; | 
			
		
		
	
		
			
			 | 
			 | 
			
			 | 
			
			        if (v1.z > PI*2) v1.z -= PI*2; | 
			
		
		
	
		
			
			 | 
			 | 
			
			 | 
			
			
 | 
			
		
		
	
		
			
			 | 
			 | 
			
			 | 
			
			        q1 = QuaternionFromEuler(v1.x, v1.y, v1.z); | 
			
		
		
	
		
			
			 | 
			 | 
			
			 | 
			
			        m1 = MatrixRotateZYX(v1); | 
			
		
		
	
		
			
			 | 
			 | 
			
			 | 
			
			        m2 = QuaternionToMatrix(q1); | 
			
		
		
	
		
			
			 | 
			 | 
			
			 | 
			
			
 | 
			
		
		
	
		
			
			 | 
			 | 
			
			 | 
			
			        q1 = QuaternionFromMatrix(m1); | 
			
		
		
	
		
			
			 | 
			 | 
			
			 | 
			
			        m3 = QuaternionToMatrix(q1); | 
			
		
		
	
		
			
			 | 
			 | 
			
			 | 
			
			
 | 
			
		
		
	
		
			
			 | 
			 | 
			
			 | 
			
			        v2 = QuaternionToEuler(q1);     // Angles returned in radians | 
			
		
		
	
		
			
			 | 
			 | 
			
			 | 
			
			
 | 
			
		
		
	
		
			
			 | 
			 | 
			
			 | 
			
			        m4 = MatrixRotateZYX(v2); | 
			
		
		
	
		
			
			 | 
			 | 
			
			 | 
			
			        //-------------------------------------------------------------------------------------- | 
			
		
		
	
		
			
			 | 
			 | 
			
			 | 
			
			
 | 
			
		
		
	
		
			
			 | 
			 | 
			
			 | 
			
			        // Draw | 
			
		
		
	
		
			
			 | 
			 | 
			
			 | 
			
			        //---------------------------------------------------------------------------------- | 
			
		
		
	
		
			
			 | 
			 | 
			
			 | 
			
			        BeginDrawing(); | 
			
		
		
	
		
			
			 | 
			 | 
			
			 | 
			
			
 | 
			
		
		
	
		
			
			 | 
			 | 
			
			 | 
			
			            ClearBackground(RAYWHITE); | 
			
		
		
	
		
			
			 | 
			 | 
			
			 | 
			
			
 | 
			
		
		
	
		
			
			 | 
			 | 
			
			 | 
			
			            BeginMode3D(camera); | 
			
		
		
	
		
			
			 | 
			 | 
			
			 | 
			
			
 | 
			
		
		
	
		
			
			 | 
			 | 
			
			 | 
			
			                model.transform = m1; | 
			
		
		
	
		
			
			 | 
			 | 
			
			 | 
			
			                DrawModel(model, (Vector3){ -1, 0, 0 }, 1.0f, RED); | 
			
		
		
	
		
			
			 | 
			 | 
			
			 | 
			
			
 | 
			
		
		
	
		
			
			 | 
			 | 
			
			 | 
			
			                model.transform = m2; | 
			
		
		
	
		
			
			 | 
			 | 
			
			 | 
			
			                DrawModel(model, (Vector3){ 1, 0, 0 }, 1.0f, RED); | 
			
		
		
	
		
			
			 | 
			 | 
			
			 | 
			
			
 | 
			
		
		
	
		
			
			 | 
			 | 
			
			 | 
			
			                model.transform = m3; | 
			
		
		
	
		
			
			 | 
			 | 
			
			 | 
			
			                DrawModel(model, (Vector3){ 0, 0, 0 }, 1.0f, RED); | 
			
		
		
	
		
			
			 | 
			 | 
			
			 | 
			
			
 | 
			
		
		
	
		
			
			 | 
			 | 
			
			 | 
			
			                model.transform = m4; | 
			
		
		
	
		
			
			 | 
			 | 
			
			 | 
			
			                DrawModel(model, (Vector3){ 0, 0, -1 }, 1.0f, RED); | 
			
		
		
	
		
			
			 | 
			 | 
			
			 | 
			
			
 | 
			
		
		
	
		
			
			 | 
			 | 
			
			 | 
			
			                DrawGrid(10, 1.0f); | 
			
		
		
	
		
			
			 | 
			 | 
			
			 | 
			
			
 | 
			
		
		
	
		
			
			 | 
			 | 
			
			 | 
			
			            EndMode3D(); | 
			
		
		
	
		
			
			 | 
			 | 
			
			 | 
			
			
 | 
			
		
		
	
		
			
			 | 
			 | 
			
			 | 
			
			            DrawText(TextFormat("%2.3f", v1.x), 20, 20, 20, (v1.x == v2.x)? GREEN: BLACK); | 
			
		
		
	
		
			
			 | 
			 | 
			
			 | 
			
			            DrawText(TextFormat("%2.3f", v1.y), 20, 40, 20, (v1.y == v2.y)? GREEN: BLACK); | 
			
		
		
	
		
			
			 | 
			 | 
			
			 | 
			
			            DrawText(TextFormat("%2.3f", v1.z), 20, 60, 20, (v1.z == v2.z)? GREEN: BLACK); | 
			
		
		
	
		
			
			 | 
			 | 
			
			 | 
			
			
 | 
			
		
		
	
		
			
			 | 
			 | 
			
			 | 
			
			            DrawText(TextFormat("%2.3f", v2.x), 200, 20, 20, (v1.x == v2.x)? GREEN: BLACK); | 
			
		
		
	
		
			
			 | 
			 | 
			
			 | 
			
			            DrawText(TextFormat("%2.3f", v2.y), 200, 40, 20, (v1.y == v2.y)? GREEN: BLACK); | 
			
		
		
	
		
			
			 | 
			 | 
			
			 | 
			
			            DrawText(TextFormat("%2.3f", v2.z), 200, 60, 20, (v1.z == v2.z)? GREEN: BLACK); | 
			
		
		
	
		
			
			 | 
			 | 
			
			 | 
			
			
 | 
			
		
		
	
		
			
			 | 
			 | 
			
			 | 
			
			        EndDrawing(); | 
			
		
		
	
		
			
			 | 
			 | 
			
			 | 
			
			        //---------------------------------------------------------------------------------- | 
			
		
		
	
		
			
			 | 
			 | 
			
			 | 
			
			    } | 
			
		
		
	
		
			
			 | 
			 | 
			
			 | 
			
			
 | 
			
		
		
	
		
			
			 | 
			 | 
			
			 | 
			
			    // De-Initialization | 
			
		
		
	
		
			
			 | 
			 | 
			
			 | 
			
			    //-------------------------------------------------------------------------------------- | 
			
		
		
	
		
			
			 | 
			 | 
			
			 | 
			
			    UnloadModel(model);   // Unload model data (mesh and materials) | 
			
		
		
	
		
			
			 | 
			 | 
			
			 | 
			
			
 | 
			
		
		
	
		
			
			 | 
			 | 
			
			 | 
			
			    CloseWindow();        // Close window and OpenGL context | 
			
		
		
	
		
			
			 | 
			 | 
			
			 | 
			
			    //-------------------------------------------------------------------------------------- | 
			
		
		
	
		
			
			 | 
			 | 
			
			 | 
			
			
 | 
			
		
		
	
		
			
			 | 
			 | 
			
			 | 
			
			    return 0; | 
			
		
		
	
		
			
			 | 
			 | 
			
			 | 
			
			} |