Nevar pievienot vairāk kā 25 tēmas Tēmai ir jāsākas ar burtu vai ciparu, tā var saturēt domu zīmes ('-') un var būt līdz 35 simboliem gara.

131 rinda
4.3 KiB

  1. /*******************************************************************************************
  2. *
  3. * raylib [core] example - quat conversions
  4. *
  5. * Welcome to raylib!
  6. *
  7. * generally you should really stick to eulers OR quats...
  8. * This tests that various conversions are equivilant.
  9. *
  10. * You can find all basic examples on [C:\raylib\raylib\examples] directory and
  11. * raylib official webpage: [www.raylib.com]
  12. *
  13. * Enjoy using raylib. :)
  14. *
  15. * This example has been created using raylib 1.0 (www.raylib.com)
  16. * raylib is licensed under an unmodified zlib/libpng license (View raylib.h for details)
  17. *
  18. * Copyright (c) 2013-2020 Ramon Santamaria (@raysan5)
  19. *
  20. ********************************************************************************************/
  21. #include "raylib.h"
  22. #include "raymath.h"
  23. #ifndef PI2
  24. #define PI2 PI*2
  25. #endif
  26. int main(void)
  27. {
  28. // Initialization
  29. //--------------------------------------------------------------------------------------
  30. const int screenWidth = 800;
  31. const int screenHeight = 450;
  32. InitWindow(screenWidth, screenHeight, "raylib [core] example - quat conversions");
  33. Camera3D camera = { 0 };
  34. camera.position = (Vector3){ 0.0f, 10.0f, 10.0f }; // Camera position
  35. camera.target = (Vector3){ 0.0f, 0.0f, 0.0f }; // Camera looking at point
  36. camera.up = (Vector3){ 0.0f, 1.0f, 0.0f }; // Camera up vector (rotation towards target)
  37. camera.fovy = 45.0f; // Camera field-of-view Y
  38. camera.type = CAMERA_PERSPECTIVE; // Camera mode type
  39. Mesh msh = GenMeshCylinder(.2, 1, 32);
  40. Model mod = LoadModelFromMesh(msh);
  41. SetTargetFPS(60); // Set our game to run at 60 frames-per-second
  42. //--------------------------------------------------------------------------------------
  43. Quaternion q1;
  44. Matrix m1,m2,m3,m4;
  45. Vector3 v1,v2;
  46. // Main game loop
  47. while (!WindowShouldClose()) // Detect window close button or ESC key
  48. {
  49. // Update
  50. if (!IsKeyDown(KEY_SPACE)) {
  51. v1.x += 0.01;
  52. v1.y += 0.03;
  53. v1.z += 0.05;
  54. }
  55. if (v1.x > PI2) v1.x-=PI2;
  56. if (v1.y > PI2) v1.y-=PI2;
  57. if (v1.z > PI2) v1.z-=PI2;
  58. q1 = QuaternionFromEuler(v1.x, v1.y, v1.z);
  59. m1 = MatrixRotateZYX(v1);
  60. m2 = QuaternionToMatrix(q1);
  61. q1 = QuaternionFromMatrix(m1);
  62. m3 = QuaternionToMatrix(q1);
  63. v2 = QuaternionToEuler(q1);
  64. v2.x*=DEG2RAD; v2.y*=DEG2RAD; v2.z*=DEG2RAD;
  65. m4 = MatrixRotateZYX(v2);
  66. // Draw
  67. //----------------------------------------------------------------------------------
  68. BeginDrawing();
  69. ClearBackground(RAYWHITE);
  70. BeginMode3D(camera);
  71. mod.transform = m1;
  72. DrawModel(mod, (Vector3){-1,0,0},1.0,RED);
  73. mod.transform = m2;
  74. DrawModel(mod, (Vector3){1,0,0},1.0,RED);
  75. mod.transform = m3;
  76. DrawModel(mod, (Vector3){0,0,0},1.0,RED);
  77. mod.transform = m4;
  78. DrawModel(mod, (Vector3){0,0,-1},1.0,RED);
  79. DrawGrid(10, 1.0f);
  80. EndMode3D();
  81. if (v2.x<0) v2.x+=PI2;
  82. if (v2.y<0) v2.y+=PI2;
  83. if (v2.z<0) v2.z+=PI2;
  84. Color cx,cy,cz;
  85. cx=cy=cz=BLACK;
  86. if (v1.x == v2.x) cx = GREEN;
  87. if (v1.y == v2.y) cy = GREEN;
  88. if (v1.z == v2.z) cz = GREEN;
  89. DrawText(TextFormat("%2.3f",v1.x),20,20,20,cx);
  90. DrawText(TextFormat("%2.3f",v1.y),20,40,20,cy);
  91. DrawText(TextFormat("%2.3f",v1.z),20,60,20,cz);
  92. DrawText(TextFormat("%2.3f",v2.x),200,20,20,cx);
  93. DrawText(TextFormat("%2.3f",v2.y),200,40,20,cy);
  94. DrawText(TextFormat("%2.3f",v2.z),200,60,20,cz);
  95. EndDrawing();
  96. //----------------------------------------------------------------------------------
  97. }
  98. // De-Initialization
  99. //--------------------------------------------------------------------------------------
  100. CloseWindow(); // Close window and OpenGL context
  101. //--------------------------------------------------------------------------------------
  102. return 0;
  103. }