private static void ResetBody(RigidBody body) { if (body != null) { body.AngularVelocity = JVector.Zero; body.LinearVelocity = JVector.Zero; body.Update(); } }
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(); }