Miloslav Ciz 4 лет назад
Родитель
Сommit
52fc20917c
2 измененных файлов с 13 добавлено и 6 удалено
  1. 3 3
      test_sdl.c
  2. 10 3
      tinyphysicsengine.h

+ 3 - 3
test_sdl.c

@@ -349,8 +349,8 @@ int main()
 //  addBody(TPE_SHAPE_CAPSULE,256,0,0);
 //addBody(TPE_SHAPE_CAPSULE,300,1024,0);
 
-  addBody(TPE_SHAPE_CUBOID,500,1500,500);
-  addBody(TPE_SHAPE_CUBOID,5000,512,5000);
+  addBody(TPE_SHAPE_CUBOID,3000,3000,3000);
+  addBody(TPE_SHAPE_CUBOID,15000,512,15000);
 
 bodies[0].body.mass = TPE_FRACTIONS_PER_UNIT * 3;
 bodies[1].body.mass = TPE_INFINITY;
@@ -537,7 +537,7 @@ TPE_vec3Add
         scene.camera.transform.rotation.y -= SHIFT_STEP;
     }
 
-#define SHIFT_STEP 10
+#define SHIFT_STEP 50
 
     if (state[SDL_SCANCODE_L])
       bodies[1].body.position.x += SHIFT_STEP;

+ 10 - 3
tinyphysicsengine.h

@@ -677,15 +677,22 @@ void _TPE_getCapsuleCyllinderEndpoints(const TPE_Body *body,
 void _TPE_cutLineSegmentByPlanes(TPE_Vec4 center, TPE_Vec4 sideOffset, 
   TPE_Vec4 lineStart, TPE_Vec4 lineDir, TPE_Unit *t1, TPE_Unit *t2)
 {
+  // we shift the center to [0,0,0] to simplify and prevent overflows
+
+  lineStart = TPE_vec3Minus(lineStart,center);
+
+//center = TPE_vec4(0,0,0,0);
+
+
   TPE_Unit da = TPE_vec3DotProductPlain(sideOffset,lineStart);
 
   TPE_Vec4 dc;
 
   dc.z = 0;
 
-  // TODO: dor(d,dc) could be cached for all sides between calls to save recomputing
+  // TODO: dot(d,dc) could be cached for all sides between calls to save recomputing
 
-  dc = TPE_vec3Plus(center,sideOffset);
+  dc = sideOffset;
 
   TPE_Unit denom = TPE_nonZero(TPE_vec3DotProductPlain(sideOffset,lineDir));
 
@@ -696,7 +703,7 @@ void _TPE_cutLineSegmentByPlanes(TPE_Vec4 center, TPE_Vec4 sideOffset,
 
   tAntiOverflow(tA)  
 
-  dc = TPE_vec3Minus(center,sideOffset);
+  TPE_vec3MultiplyPlain(sideOffset,-1,&dc);
 
   tAntiOverflow(tB)