Example #1
0
        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());
        }
Example #2
0
        // 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);
            }
        }
Example #3
0
        // 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); */
            }
        }