public void Render(Matrix4 Tcamera, Matrix4 Tview, RenderTarget target) { this.rTarget = target; target.Bind(); foreach (Mesh mesh in renderTree) { mesh.Render(shader, mesh.location, mesh.location, Tcamera * Tview, mesh.texture); } target.Unbind(); postQuad.Render(postShader, target.GetTextureID()); }
// tick for OpenGL rendering code public void RenderGL() { // measure frame duration timer.Reset(); timer.Start(); // prepare matrix for vertex shader float angle90degrees = PI / 2; Matrix4 turretRotation = new Matrix4( new Vector4((float)Math.Cos(turret_rot), 0, (float)Math.Sin(turret_rot), 0), new Vector4(0, 1, 0, 0), new Vector4(-(float)Math.Sin(turret_rot), 0, (float)Math.Cos(turret_rot), 0), new Vector4(0, 0, 0, 1)); turret.local = Matrix4.CreateScale(.125f) * Matrix4.CreateTranslation(new Vector3(0, -2.0f, 0)) * Matrix4.CreateFromAxisAngle(new Vector3(0, 1, 0), 0) * turretRotation; floor.local = Matrix4.CreateScale(4.0f) * Matrix4.CreateFromAxisAngle(new Vector3(0, 1, 0), 0); Matrix4 camRotation = new Matrix4( new Vector4((float)Math.Cos(cam_rot), 0, (float)Math.Sin(cam_rot), 0), new Vector4(0, 1, 0, 0), new Vector4(-(float)Math.Sin(cam_rot), 0, (float)Math.Cos(cam_rot), 0), new Vector4(0, 0, 0, 1)); Matrix4 Tcamera = Matrix4.CreateTranslation(new Vector3(cam_x, cam_y - 14.5f, cam_z)) * Matrix4.CreateFromAxisAngle(new Vector3(1, 0, 0), angle90degrees); Matrix4 Tview = Matrix4.CreatePerspectiveFieldOfView(1.2f, 1.3f, .1f, 1000); Vector3 viewPos = -Tcamera.ExtractTranslation(); // post-production stuff if (useRenderTarget) { // enable render target target.Bind(); // render scene to render target scene.Render(world, shader, camRotation * Tcamera * Tview, viewPos); // render quad target.Unbind(); quad.Render(postproc, target.GetTextureID()); } else { // render scene directly to the screen scene.Render(world, shader, camRotation * Tcamera * Tview, viewPos); } }
// tick for OpenGL rendering code public void RenderGL() { // measure frame duration float frameDuration = timer.ElapsedMilliseconds; timer.Reset(); timer.Start(); // prepare matrix for vertex shader float angle90degrees = PI / 2; Vector3 cameraPos = new Vector3(0, 50f, 0); int cameraID = GL.GetUniformLocation(shader.programID, "cameraPos"); GL.UseProgram(shader.programID); GL.Uniform3(cameraID, cameraPos); Matrix4 Tcar = Matrix4.CreateScale(0.5f) * Matrix4.CreateRotationY(10f) * Matrix4.CreateTranslation(new Vector3(0, 0, 0)) * Matrix4.CreateFromAxisAngle(new Vector3(0, 1, 0), 9 + 0) * Matrix4.CreateTranslation(new Vector3(0, 0, 0)); Matrix4 Tflag = Matrix4.CreateScale(0.08f) * Tcar * Matrix4.CreateTranslation(new Vector3(0, 2, 0)); Matrix4 toWorld = Tflag; Matrix4 Tfloor = Matrix4.CreateScale(4.0f) * Matrix4.CreateFromAxisAngle(new Vector3(0, 1, 0), 0); Matrix4 Tcamera = Matrix4.CreateTranslation(-cameraPos) * Matrix4.CreateFromAxisAngle(new Vector3(1, 0, 0), angle90degrees); Matrix4 Tview = Matrix4.CreatePerspectiveFieldOfView(1.2f, 1.3f, .1f, 1000); // defining the model view matrix for the mesh object flag.modelViewMatrix = Tflag * Tcamera * Tview; flag.toWorld = toWorld; car.modelViewMatrix = Tcar * Tcamera * Tview; car.toWorld = toWorld; floor.modelViewMatrix = Tfloor * Tcamera * Tview; floor.toWorld = toWorld; SceneGraph floor_sg = new SceneGraph(floor); floor_sg.pos = new Vector3(0, 0, 0); floor_sg.rotation = a; floor_sg.scale = new Vector3(4, 2, 2); // update rotation a += 0.0005f * frameDuration; if (a > 2 * PI) { a -= 2 * PI; } b = a * a; if (a > 6 * PI) { a -= 10 * PI; } if (useRenderTarget) { // enable render target target.Bind(); // render scene via Scenegraph floor_sg.Render(Tcamera * Tview); // render scene to render target /* * flag.Render(shader, Tflag * Tcamera * Tview, toWorld, dark); * car.Render( shader, Tcar*Tcamera*Tview, toWorld, silver); * floor.Render( shader, Tfloor * Tcamera * Tview, toWorld, wood ); */ // render quad target.Unbind(); quad.Render(postproc, target.GetTextureID()); } else { // render scene via SceneGraph floor_sg.Render(Tcamera); // render scene directly to the /* * flag.Render(shader, Tflag * Tcamera * Tview, toWorld, dark); * car.Render(shader, Tcar * Tcamera * Tview, toWorld, silver); * floor.Render(shader, Tfloor * Tcamera * Tview, toWorld, wood); */ } }