private static void ResetBody(RigidBody body)
 {
     if (body != null)
     {
         body.AngularVelocity = JVector.Zero;
         body.LinearVelocity  = JVector.Zero;
         body.Update();
     }
 }
예제 #2
0
        private void Timer_Tick(object sender, EventArgs e)
        {
            // update
            elapsedTime = currentTime;
            currentTime = DateTime.Now;
            float dt = (float)(currentTime - elapsedTime).TotalSeconds;

            if (dt < 0.0f)
            {
                dt = 0.0f;
            }
            if (dt > (1.0f / 10.0f))
            {
                dt = (1.0f / 10.0f);
            }                                                 // min. 10fps

            GL.Clear(ClearBufferMask.ColorBufferBit | ClearBufferMask.DepthBufferBit);

            Matrix4 m_world     = Matrix4.Identity;
            Matrix4 m_view      = Matrix4.LookAt(new Vector3(2, 6, 15), new Vector3(0, 2, 0), new Vector3(0, 1, 0));
            Matrix4 m_modelview = Matrix4.Mult(m_world, m_view);
            Matrix4 m_proj      = Matrix4.CreatePerspectiveFieldOfView((float)Math.PI / 2.0f, (float)glControl.Width / (float)glControl.Height, 0.05f, 1000.0f);

            GL.MatrixMode(MatrixMode.Projection);
            GL.LoadMatrix(ref m_proj);

            GL.MatrixMode(MatrixMode.Modelview);
            GL.LoadMatrix(ref m_modelview);

            float step = 1.0f / 500.0f;;

            for (float i = 0; i < dt; i += step)
            {
                rigidBody.Update(step);

                // collision detection and response
                List <Hit> listHits1 = new List <Hit>();
                Physics.CollisionDetection.RigidBodyAndPlane(rigidBody, plane, ref listHits1);
                Physics.CollisionResponse.Apply(rigidBody, listHits1, step);

                // draw hits
                //Physics.CollisionDetection.DrawHits(listHits1);
            }

            plane.Draw();
            rigidBody.Draw();

            glControl.SwapBuffers();
        }