protected override void OnRenderFrame(FrameEventArgs e) { // called once per frame; render rayTracer.Tick(); if (terminated) { Exit(); return; } // convert Game.screen to OpenGL texture GL.BindTexture(TextureTarget.Texture2D, screenID); GL.TexImage2D(TextureTarget.Texture2D, 0, PixelInternalFormat.Rgba, rayTracer.screen.width, rayTracer.screen.height, 0, OpenTK.Graphics.OpenGL.PixelFormat.Bgra, PixelType.UnsignedByte, rayTracer.screen.pixels ); // clear window contents GL.Clear(ClearBufferMask.ColorBufferBit); // setup camera GL.MatrixMode(MatrixMode.Modelview); GL.LoadIdentity(); GL.MatrixMode(MatrixMode.Projection); GL.LoadIdentity(); // draw screen filling quad GL.Begin(PrimitiveType.Quads); GL.TexCoord2(0.0f, 1.0f); GL.Vertex2(-1.0f, -1.0f); GL.TexCoord2(1.0f, 1.0f); GL.Vertex2(1.0f, -1.0f); GL.TexCoord2(1.0f, 0.0f); GL.Vertex2(1.0f, 1.0f); GL.TexCoord2(0.0f, 0.0f); GL.Vertex2(-1.0f, 1.0f); GL.End(); // tell OpenTK we're done rendering SwapBuffers(); }
// tick: renders one frame public void Tick() { // scene.lights[0].position += new Vector3(1f,0,0); raytracer.Tick(); KeyboardState keystate = Keyboard.GetState(); if (keystate.IsKeyDown(Key.Number1)) { raytracer.aa = 1; } if (keystate.IsKeyDown(Key.Number2)) { raytracer.aa = 2; } if (keystate.IsKeyDown(Key.Number3)) { raytracer.aa = 3; } if (keystate.IsKeyDown(Key.Left)) { cam.xRotation -= 8; if (cam.xRotation < 0) cam.xRotation += 360; cam.UpdateScreen(); } if (keystate.IsKeyDown(Key.Right)) { cam.xRotation += 8; if (cam.xRotation > 359) cam.xRotation -= 360; cam.UpdateScreen(); } if (keystate.IsKeyDown(Key.Up)) { cam.yRotation -= 8; if (cam.yRotation < 0) cam.yRotation += 360; if (cam.yRotation > 90 && cam.yRotation < 270) cam.yRotation = 270; cam.UpdateScreen(); } if (keystate.IsKeyDown(Key.Down)) { cam.yRotation += 8; if (cam.yRotation > 359) cam.yRotation -= 360; if (cam.yRotation > 90 && cam.yRotation < 270) cam.yRotation = 90; cam.UpdateScreen(); } if (keystate.IsKeyDown(Key.W)) { cam.position += 0.1f * Vector3.Normalize(new Vector3(cam.direction.X, 0, cam.direction.Z)); } if (keystate.IsKeyDown(Key.D)) { cam.position += 0.1f * Vector3.Normalize(new Vector3(cam.right.X, 0, cam.right.Z)); } if (keystate.IsKeyDown(Key.A)) { cam.position += 0.1f * Vector3.Normalize(new Vector3(cam.left.X, 0, cam.left.Z)); } if (keystate.IsKeyDown(Key.S)) { cam.position -= 0.1f * Vector3.Normalize(new Vector3(cam.direction.X, 0, cam.direction.Z)); } if (keystate.IsKeyDown(Key.Space)) { cam.position.Y -= 0.15f; } if (keystate.IsKeyDown(Key.ShiftLeft)) { cam.position.Y += 0.15f; } if (keystate.IsKeyDown(Key.R)) { cam.Initialize(); } if (keystate.IsKeyDown(Key.F)) { if (cam.fov < 179) { cam.fov++; cam.UpdateScreen(); } } if (keystate.IsKeyDown(Key.G)) { if (cam.fov > 0) { cam.fov--; cam.UpdateScreen(); } } if (keystate.IsKeyDown(Key.T)) { Console.WriteLine("TestOutput"); } }