ソースを参照

Continue quat

Miloslav Číž 4 年 前
コミット
d401e02e3e
2 ファイル変更20 行追加24 行削除
  1. 12 24
      test_sdl.c
  2. 8 0
      tinyphysicsengine.h

+ 12 - 24
test_sdl.c

@@ -26,37 +26,25 @@ S3L_Index cubeTriangles[] = { S3L_CUBE_TRIANGLES };
 
 
 int main()
 int main()
 {
 {
-TPE_Vec4 a, b, axis, r;
-a.x = TPE_FRACTIONS_PER_UNIT / 2;
-a.y = TPE_FRACTIONS_PER_UNIT;
-a.z = TPE_FRACTIONS_PER_UNIT;
-a.w = TPE_FRACTIONS_PER_UNIT;
+TPE_Vec4 a, b, r, r2, r3 axis;
 
 
-b.x = 0;
-b.y = TPE_FRACTIONS_PER_UNIT;
-b.z = TPE_FRACTIONS_PER_UNIT / 2;
-b.w = 0;
 
 
-axis.x = TPE_FRACTIONS_PER_UNIT;
-axis.y = TPE_FRACTIONS_PER_UNIT;
-axis.z = 0;
-axis.w = 0;
+TPE_setVec4(&axis,512,0,0,0);
 
 
-TPE_Unit angle = TPE_FRACTIONS_PER_UNIT / 2;
+TPE_rotationToQuaternion(axis,128,&r);
 
 
-TPE_rotationToQuaternion(axis,angle,&r);
-TPE_PRINTF_VEC4(r);
+TPE_setVec4(&axis,0,512,0,0);
+TPE_rotationToQuaternion(axis,128,&r2);
 
 
-axis.x = 0;
-axis.y = 0;
-axis.z = 0;
-axis.w = 0;
-angle = 0;
+TPE_quaternionMultiply(r,r2,&r3);
+
+TPE_setVec4(&axis,512,0,0,0);
+TPE_rotationToQuaternion(axis,128,&r);
+TPE_quaternionMultiply(r3,r,&r2);
+
+TPE_PRINTF_VEC4(r2);
 
 
-TPE_quaternionToRotation(r,&axis,&angle);
 
 
-TPE_PRINTF_VEC4(axis);
-printf("%d\n",angle);
 
 
   SDL_Window *window = SDL_CreateWindow("test", SDL_WINDOWPOS_UNDEFINED, SDL_WINDOWPOS_UNDEFINED, S3L_RESOLUTION_X, S3L_RESOLUTION_Y, SDL_WINDOW_SHOWN); 
   SDL_Window *window = SDL_CreateWindow("test", SDL_WINDOWPOS_UNDEFINED, SDL_WINDOWPOS_UNDEFINED, S3L_RESOLUTION_X, S3L_RESOLUTION_Y, SDL_WINDOW_SHOWN); 
   SDL_Renderer *renderer = SDL_CreateRenderer(window,-1,0);
   SDL_Renderer *renderer = SDL_CreateRenderer(window,-1,0);

+ 8 - 0
tinyphysicsengine.h

@@ -106,6 +106,14 @@ void TPE_initVec4(TPE_Vec4 *v)
   v->w = 0;
   v->w = 0;
 }
 }
 
 
+void TPE_setVec4(TPE_Vec4 *v, TPE_Unit x, TPE_Unit y, TPE_Unit z, TPE_Unit w)
+{
+  v->x = x;
+  v->y = y;
+  v->z = z;
+  v->w = w;
+}
+
 TPE_Unit TPE_wrap(TPE_Unit value, TPE_Unit mod)
 TPE_Unit TPE_wrap(TPE_Unit value, TPE_Unit mod)
 {
 {
   return value >= 0 ? (value % mod) : (mod + (value % mod) - 1);
   return value >= 0 ? (value % mod) : (mod + (value % mod) - 1);