コード例 #1
0
        public void Draw()
        {
            Gl.glClear(Gl.GL_COLOR_BUFFER_BIT | Gl.GL_DEPTH_BUFFER_BIT);
            Shader3D.UseShader();

            /*WaterShader.UseShader();*/

            //water motion

            /*if (reverse)
             *  t -= 0.0002f;
             * else
             *  t += 0.0002f;
             * if (t > 0.2f)
             *  reverse = true;
             * if (t < 0)
             *  reverse = false;
             * Gl.glUniform1f(WaterTimeID, t);*/

            Gl.glUniformMatrix4fv(projID, 1, Gl.GL_FALSE, camera.GetProjectionMatrix().to_array());
            Gl.glUniformMatrix4fv(viewID, 1, Gl.GL_FALSE, camera.GetViewMatrix().to_array());
            Gl.glUniformMatrix4fv(transID, 1, Gl.GL_FALSE, scaleMatrix.to_array());

            //SKYBOX START
            GPU.BindBuffer(SkyboxBufferID);
            Gl.glEnableVertexAttribArray(0);
            Gl.glVertexAttribPointer(0, 3, Gl.GL_FLOAT, Gl.GL_FALSE, 8 * sizeof(float), IntPtr.Zero);
            Gl.glEnableVertexAttribArray(1);
            Gl.glVertexAttribPointer(1, 3, Gl.GL_FLOAT, Gl.GL_FALSE, 8 * sizeof(float), (IntPtr)(3 * sizeof(float)));

            Gl.glEnableVertexAttribArray(2);
            Gl.glVertexAttribPointer(2, 2, Gl.GL_FLOAT, Gl.GL_FALSE, 8 * sizeof(float), (IntPtr)(6 * sizeof(float)));

            FrontTexture.Bind();
            Gl.glDrawArrays(Gl.GL_TRIANGLES, 0, 6);

            BottomTexture.Bind();
            Gl.glDrawArrays(Gl.GL_TRIANGLES, 18, 6);

            BackTexture.Bind();
            Gl.glDrawArrays(Gl.GL_TRIANGLES, 6, 6);

            LeftTexture.Bind();
            Gl.glDrawArrays(Gl.GL_TRIANGLES, 30, 6);

            RightTexture.Bind();
            Gl.glDrawArrays(Gl.GL_TRIANGLES, 24, 6);

            TopTexture.Bind();
            Gl.glDrawArrays(Gl.GL_TRIANGLES, 12, 6);
            //SKYBOX END

            //WATER START
            mat4 WaterModel = MathHelper.MultiplyMatrices(new List <mat4>()
            {
                glm.translate(new mat4(1), new vec3(-30, -65, -100)),
                glm.scale(new mat4(1), new vec3(2.5f, 0.6f, 0.6f))
            });

            Gl.glUniformMatrix4fv(transID, 1, Gl.GL_FALSE, WaterModel.to_array());

            GPU.BindBuffer(WaterBufferID);
            Gl.glEnableVertexAttribArray(0);
            Gl.glVertexAttribPointer(0, 3, Gl.GL_FLOAT, Gl.GL_FALSE, 5 * sizeof(float), IntPtr.Zero);

            Gl.glEnableVertexAttribArray(2);
            Gl.glVertexAttribPointer(2, 2, Gl.GL_FLOAT, Gl.GL_FALSE, 5 * sizeof(float), (IntPtr)(3 * sizeof(float)));
            WaterTexture.Bind();
            Gl.glEnable(Gl.GL_BLEND);
            Gl.glBlendFunc(Gl.GL_SRC_ALPHA, Gl.GL_ONE_MINUS_SRC_ALPHA);

            Gl.glDrawArrays(Gl.GL_TRIANGLE_STRIP, 0, TerrainImage.Height / 4 * TerrainImage.Width / 4);

            Gl.glDisable(Gl.GL_BLEND);

            /*WaterTexture.Bind();
             * Gl.glEnable(Gl.GL_BLEND);
             * Gl.glBlendFunc(Gl.GL_SRC_ALPHA, Gl.GL_ONE_MINUS_SRC_ALPHA);
             * ground.Draw(transID);
             * Gl.glDisable(Gl.GL_BLEND);*/

            //WATER END

            //TREE START
            for (int i = 0; i < 4500 - 3; i += 100)
            {
                //tree.scalematrix = glm.scale(new mat4(1), new vec3(2f, 2.5f, 2f));
                tree.transmatrix = glm.translate(new mat4(1), new vec3(TreeVertices[i], -1 * TreeVertices[i + 1], TreeVertices[i + 2]));
                tree.Draw(transID);
            }
            //TREE END

            //GRASS START
            mat4 GrassModel = MathHelper.MultiplyMatrices(new List <mat4>()
            {
                glm.translate(new mat4(1), new vec3(-30, -65, -100)),
                glm.scale(new mat4(1), new vec3(1.5f, .3f, .3f))
            });

            Gl.glUniformMatrix4fv(transID, 1, Gl.GL_FALSE, GrassModel.to_array());

            GPU.BindBuffer(GrassBufferID);
            Gl.glEnableVertexAttribArray(0);
            Gl.glVertexAttribPointer(0, 3, Gl.GL_FLOAT, Gl.GL_FALSE, 5 * sizeof(float), IntPtr.Zero);

            Gl.glEnableVertexAttribArray(2);
            Gl.glVertexAttribPointer(2, 2, Gl.GL_FLOAT, Gl.GL_FALSE, 5 * sizeof(float), (IntPtr)(3 * sizeof(float)));
            GrassTexture.Bind();

            for (int i = 0; i < GrassVertices.Count;)
            {
                Gl.glDrawArrays(Gl.GL_TRIANGLES, i, 5);
                i += 5;
            }
            //GRASS END

            //TERRAIN START
            mat4 model = MathHelper.MultiplyMatrices(new List <mat4>()
            {
                glm.translate(new mat4(1), new vec3(-30, -65, -100)), glm.scale(new mat4(1), new vec3(0.9f, 0.6f, 0.6f))
            });                                                                                                                                                                      //b3ml tranformations 3l terrain

            Gl.glUniformMatrix4fv(transID, 1, Gl.GL_FALSE, model.to_array());

            GPU.BindBuffer(TerrainBufferID);
            Gl.glEnableVertexAttribArray(0);
            Gl.glVertexAttribPointer(0, 3, Gl.GL_FLOAT, Gl.GL_FALSE, 5 * sizeof(float), IntPtr.Zero);

            Gl.glEnableVertexAttribArray(2);
            Gl.glVertexAttribPointer(2, 2, Gl.GL_FLOAT, Gl.GL_FALSE, 5 * sizeof(float), (IntPtr)(3 * sizeof(float)));
            BottomTexture.Bind();
            Gl.glDrawArrays(Gl.GL_TRIANGLE_STRIP, 0, TerrainImage.Height * TerrainImage.Width);

            Gl.glEnable(Gl.GL_BLEND);
            Gl.glBlendFunc(Gl.GL_SOURCE0_ALPHA, Gl.GL_ONE_MINUS_SRC_ALPHA);
            //TERRAIN END

            Gl.glDisableVertexAttribArray(0);
            Gl.glDisableVertexAttribArray(1);
        }
コード例 #2
0
        public void Initialize()
        {
            string projectPath = Directory.GetParent(Environment.CurrentDirectory).Parent.FullName;

            Shader3D    = new Shader(projectPath + "\\Shaders\\SimpleVertexShader.vertexshader", projectPath + "\\Shaders\\SimpleFragmentShader.fragmentshader");
            WaterShader = new Shader(projectPath + "\\Shaders\\WaterVertexShader.vertexshader", projectPath + "\\Shaders\\WaterFragmentShader.fragmentshader");

            //SkyBox
            BackTexture   = new Texture(projectPath + "\\Textures\\back.jpg", 3, false);
            BottomTexture = new Texture(projectPath + "\\Textures\\bottom.jpg", 4, false);
            FrontTexture  = new Texture(projectPath + "\\Textures\\front.jpg", 5, false);
            LeftTexture   = new Texture(projectPath + "\\Textures\\left.jpg", 6, false);
            RightTexture  = new Texture(projectPath + "\\Textures\\right.jpg", 7, false);
            TopTexture    = new Texture(projectPath + "\\Textures\\top.jpg", 8, false);

            Gl.glClearColor(0, 0, 0.4f, 1);

            float[] SkyboxVertices =
            {
                // front
                -1, -1,  1, 1, 0, 1, 0, 0,        //0
                -1,  1,  1, 1, 0, 1, 0, 1,        //1
                1,  -1,  1, 1, 0, 1, 1, 0,        //2

                1,  -1,  1, 1, 0, 1, 1, 0,        //3
                1,   1,  1, 1, 0, 1, 1, 1,        //4
                -1,  1,  1, 1, 0, 1, 0, 1,        //5

                // back
                -1,  1, -1, 1, 0, 1, 0, 1,         //6
                -1, -1, -1, 1, 0, 1, 0, 0,         //7
                1,  -1, -1, 1, 0, 1, 1, 0,         //8

                1,  -1, -1, 1, 0, 1, 1, 0,         //9
                -1,  1, -1, 1, 0, 1, 0, 1,         //10
                1,   1, -1, 1, 0, 1, 1, 1,         //11

                // top
                -1,  1,  1, 1, 0, 1, 0, 0,         //12
                1,   1,  1, 1, 0, 1, 1, 0,         //13
                -1,  1, -1, 1, 0, 1, 0, 1,         //14

                1,   1,  1, 1, 0, 1, 1, 0,         //15
                -1,  1, -1, 1, 0, 1, 0, 1,         //16
                1,   1, -1, 1, 0, 1, 1, 1,         //17

                // bottom
                -1, -1,  1, 1, 0, 1, 0, 0,         //18
                1,  -1,  1, 1, 0, 1, 1, 0,         //19
                -1, -1, -1, 1, 0, 1, 0, 1,         //20

                1,  -1,  1, 1, 0, 1, 1, 0,         //21
                -1, -1, -1, 1, 0, 1, 0, 1,         //22
                1,  -1, -1, 1, 0, 1, 1, 1,         //23

                // right
                1,  -1,  1, 1, 0, 1, 0, 0,         //24
                1,   1,  1, 1, 0, 1, 0, 1,         //25
                1,   1, -1, 1, 0, 1, 1, 1,         //26

                1,   1, -1, 1, 0, 1, 1, 1,         //27
                1,  -1,  1, 1, 0, 1, 0, 0,         //28
                1,  -1, -1, 1, 0, 1, 1, 0,         //29

                // left
                -1, -1,  1, 1, 0, 1, 1, 0,       //30
                -1, -1, -1, 1, 0, 1, 0, 0,       //31
                -1,  1, -1, 1, 0, 1, 0, 1,       //32

                -1,  1, -1, 1, 0, 1, 0, 1,       //33
                -1, -1,  1, 1, 0, 1, 1, 0,       //34
                -1,  1,  1, 1, 0, 1, 1, 1,       //35
            };

            //Terrain
            TerrainImage    = (Bitmap)Bitmap.FromFile("heightMap.jpg");
            heights         = new float[TerrainImage.Width, TerrainImage.Height];
            TerrainVertices = new List <float>();
            float h_size = TerrainImage.Height;
            float w_size = TerrainImage.Width;
            Color pixel;
            int   x, y;

            for (x = 0; x < TerrainImage.Width; x++)
            {
                for (y = 0; y < TerrainImage.Height; y++)
                {
                    pixel         = TerrainImage.GetPixel(x, y); //get pixel di btrg3 el height"color" bta3 el pixel
                    heights[x, y] = pixel.R;                     //bakhod el R component, kan momken akhod g,b bs msh fr2a 3shan hya grey scale
                }
            }

            for (int i = 0; i < TerrainImage.Width - 1; i++)                // blef 3la TerrainImage, btl3 el pixel wl neighbours
            {                                                               // kda el list di feha vertices(x,y,z) w uv
                for (int j = 0; j < TerrainImage.Height - 1; j++)
                {
                    TerrainVertices.Add(i);
                    TerrainVertices.Add(heights[i, j] / 4);
                    TerrainVertices.Add(j);
                    TerrainVertices.Add(0);
                    TerrainVertices.Add(1);

                    TerrainVertices.Add(i + 1);
                    TerrainVertices.Add(heights[i + 1, j] / 4);
                    TerrainVertices.Add(j);
                    TerrainVertices.Add(1);
                    TerrainVertices.Add(1);

                    TerrainVertices.Add(i);
                    TerrainVertices.Add(heights[i, j + 1] / 4);
                    TerrainVertices.Add(j);
                    TerrainVertices.Add(0);
                    TerrainVertices.Add(0);

                    TerrainVertices.Add(i + 1);
                    TerrainVertices.Add(heights[i + 1, j + 1] / 4);
                    TerrainVertices.Add(j + 1);
                    TerrainVertices.Add(1);
                    TerrainVertices.Add(0);

                    ////////////////////////////repeted SkyboxVertices 3shan arsm square m7taga six vertices msh 4 bs


                    TerrainVertices.Add(i);
                    TerrainVertices.Add(heights[i, j] / 4);
                    TerrainVertices.Add(j);
                    TerrainVertices.Add(0);
                    TerrainVertices.Add(0);

                    TerrainVertices.Add(i + 1);
                    TerrainVertices.Add(heights[i, j] / 4);
                    TerrainVertices.Add(j);
                    TerrainVertices.Add(1);
                    TerrainVertices.Add(1);
                }
            }

            scaleMatrix = glm.scale(new mat4(1), new vec3(50, 50, 50));

            //grass
            GrassTexture  = new Texture(projectPath + "\\Textures\\grass.jpg", 10, false);
            GrassVertices = new List <float>();
            for (int i = 0; i < TerrainImage.Width - 1; i++)   // blef 3la TerrainImage, btl3 el pixel wl neighbours
            {                                                  // kda el list di feha vertices(x,y,z) w uv
                for (int j = 0; j < TerrainImage.Height - 1; j++)
                {
                    GrassVertices.Add(i);
                    GrassVertices.Add(heights[i, j] / 4);
                    GrassVertices.Add(j);
                    GrassVertices.Add(0);
                    GrassVertices.Add(1);

                    GrassVertices.Add(i + 1);
                    GrassVertices.Add(heights[i + 1, j] / 4);
                    GrassVertices.Add(j);
                    GrassVertices.Add(1);
                    GrassVertices.Add(1);

                    GrassVertices.Add(i);
                    GrassVertices.Add(heights[i, j + 1] / 4);
                    GrassVertices.Add(j);
                    GrassVertices.Add(0);
                    GrassVertices.Add(0);

                    GrassVertices.Add(i + 1);
                    GrassVertices.Add(heights[i + 1, j + 1] / 4);
                    GrassVertices.Add(j + 1);
                    GrassVertices.Add(1);
                    GrassVertices.Add(0);

                    GrassVertices.Add(i);
                    GrassVertices.Add(heights[i, j] / 4);
                    GrassVertices.Add(j);
                    GrassVertices.Add(0);
                    GrassVertices.Add(0);

                    GrassVertices.Add(i + 1);
                    GrassVertices.Add(heights[i, j] / 4);
                    GrassVertices.Add(j);
                    GrassVertices.Add(1);
                    GrassVertices.Add(1);
                    j += 8;
                }
                i += 8;
            }

            //Tree
            tree = new Model3D();
            tree.LoadFile(projectPath + "\\ModelFiles\\static\\tree", 11, "Tree.obj");

            TreeVertices = new List <float>();
            for (int i = 0; i < TerrainImage.Width / 4; i++)
            {
                for (int j = 0; j < TerrainImage.Height / 4; j++)
                {
                    TreeVertices.Add(i);
                    TreeVertices.Add(heights[i, j] / 4);
                    TreeVertices.Add(j);

                    TreeVertices.Add(i + 1);
                    TreeVertices.Add(heights[i + 1, j] / 4);
                    TreeVertices.Add(j);

                    TreeVertices.Add(i);
                    TreeVertices.Add(heights[i, j + 1] / 4);
                    TreeVertices.Add(j);
                }
            }


            //Water
            List <float> WaterVertices = new List <float>();

            for (int i = 0; i < TerrainImage.Width / 4; i++)   // blef 3la TerrainImage, btl3 el pixel wl neighbours
            {                                                  // kda el list di feha vertices(x,y,z) w uv
                for (int j = 0; j < TerrainImage.Height / 4; j++)
                {
                    WaterVertices.Add(i);
                    WaterVertices.Add(heights[i, j] / 4);
                    WaterVertices.Add(j);
                    WaterVertices.Add(0);
                    WaterVertices.Add(1);

                    WaterVertices.Add(i + 1);
                    WaterVertices.Add(heights[i + 1, j] / 4);
                    WaterVertices.Add(j);
                    WaterVertices.Add(1);
                    WaterVertices.Add(1);

                    WaterVertices.Add(i);
                    WaterVertices.Add(heights[i, j + 1] / 4);
                    WaterVertices.Add(j);
                    WaterVertices.Add(0);
                    WaterVertices.Add(0);

                    WaterVertices.Add(i + 1);
                    WaterVertices.Add(heights[i + 1, j + 1] / 4);
                    WaterVertices.Add(j + 1);
                    WaterVertices.Add(1);
                    WaterVertices.Add(0);

                    WaterVertices.Add(i);
                    WaterVertices.Add(heights[i, j] / 4);
                    WaterVertices.Add(j);
                    WaterVertices.Add(0);
                    WaterVertices.Add(0);

                    WaterVertices.Add(i + 1);
                    WaterVertices.Add(heights[i, j] / 4);
                    WaterVertices.Add(j);
                    WaterVertices.Add(1);
                    WaterVertices.Add(1);
                }
            }

            WaterTexture = new Texture(projectPath + "\\Textures\\water.PNG", 2);
            WaterTimeID  = Gl.glGetUniformLocation(Shader3D.ID, "t");

            //ground
            //ground = new Ground(256, 256, 0, 8);

            //Camera
            camera = new Camera();
            camera.Reset(0, 5, 5, 0, 0, 0, 0, 1, 0);
            ProjectionMatrix = camera.GetProjectionMatrix();
            ViewMatrix       = camera.GetViewMatrix();

            //Transformations and Shader Configurations
            transID = Gl.glGetUniformLocation(Shader3D.ID, "model");
            projID  = Gl.glGetUniformLocation(Shader3D.ID, "projection");
            viewID  = Gl.glGetUniformLocation(Shader3D.ID, "view");
            DataID  = Gl.glGetUniformLocation(Shader3D.ID, "data");
            vec2 data = new vec2(100, 50);

            Gl.glUniform2fv(DataID, 1, data.to_array());

            //Light
            int  LightPositionID = Gl.glGetUniformLocation(Shader3D.ID, "LightPosition_worldspace");
            vec3 lightPosition   = new vec3(1.0f, 20f, 4.0f);

            Gl.glUniform3fv(LightPositionID, 1, lightPosition.to_array());

            //setup the ambient light component.
            AmbientLightID = Gl.glGetUniformLocation(Shader3D.ID, "ambientLight");
            vec3 ambientLight = new vec3(0.2f, 0.18f, 0.01f);

            Gl.glUniform3fv(AmbientLightID, 1, ambientLight.to_array());

            //setup the eye position.
            EyePositionID = Gl.glGetUniformLocation(Shader3D.ID, "EyePosition_worldspace");

            SkyboxBufferID  = GPU.GenerateBuffer(SkyboxVertices);
            TerrainBufferID = GPU.GenerateBuffer(TerrainVertices.ToArray());
            GrassBufferID   = GPU.GenerateBuffer(GrassVertices.ToArray());
            WaterBufferID   = GPU.GenerateBuffer(WaterVertices.ToArray());

            Gl.glEnable(Gl.GL_DEPTH_TEST);
            Gl.glDepthFunc(Gl.GL_LESS);
        }
コード例 #3
0
        public void Initialize()
        {
            string projectPath = Directory.GetParent(Environment.CurrentDirectory).Parent.FullName;

            sh            = new Shader(projectPath + "\\Shaders\\SimpleVertexShader.vertexshader", projectPath + "\\Shaders\\SimpleFragmentShader.fragmentshader");
            d             = new Texture(projectPath + "\\Textures\\skybox\\bottom.jpg", 1, true);
            u             = new Texture(projectPath + "\\Textures\\skybox\\top.jpg", 2, true);
            l             = new Texture(projectPath + "\\Textures\\skybox\\left.jpg", 3, true);
            r             = new Texture(projectPath + "\\Textures\\skybox\\right.jpg", 4, true);
            f             = new Texture(projectPath + "\\Textures\\skybox\\front.jpg", 5, true);
            b             = new Texture(projectPath + "\\Textures\\skybox\\back.jpg", 6, true);
            groundTexture = new Texture(projectPath + "\\Textures\\ground.jpg", 7, true);
            shoot         = new Texture(projectPath + "\\Textures\\gunshot.png", 8, true);
            cam           = new Camera();
            cam.Reset(0, 34, 55, 0, 0, 0, 0, 1, 0);

            float[] square =
            {
                -1, 0,  1, 1, 0, 0, 0, 0,
                1,  0,  1, 1, 0, 0, 1, 0,
                -1, 0, -1, 1, 0, 0, 0, 1,

                1,  0,  1, 1, 0, 0, 1, 0,
                -1, 0, -1, 1, 0, 0, 0, 1,
                1,  0, -1, 1, 0, 0, 1, 1
            };
            skyboxBuffer_ID = GPU.GenerateBuffer(square);

            up = MathHelper.MultiplyMatrices(new List <mat4> {
                glm.rotate(3.1412f, new vec3(1, 0, 0)),
                glm.translate(new mat4(1), new vec3(0, 1, 0))
            });

            down = glm.translate(new mat4(1), new vec3(0, -1, 0));
            // Dclare Matrices For transformation edges
            front = MathHelper.MultiplyMatrices(new List <mat4> {
                glm.rotate(90.0f / 180.0f * 3.1412f, new vec3(1, 0, 0)),
                glm.translate(new mat4(1), new vec3(0, 0, -1))
            });
            left = MathHelper.MultiplyMatrices(new List <mat4> {
                glm.rotate(90.0f / 180.0f * 3.1412f, new vec3(1, 0, 0)),
                glm.rotate(90.0f / 180.0f * 3.1412f, new vec3(0, 1, 0)),
                glm.translate(new mat4(1), new vec3(-1, 0, 0))
            });
            back = MathHelper.MultiplyMatrices(new List <mat4> {
                glm.rotate(90.0f / 180.0f * 3.1412f, new vec3(1, 0, 0)),
                glm.rotate(3.1412f, new vec3(0, 1, 0)),
                glm.translate(new mat4(1), new vec3(0, 0, 1))
            });
            right = MathHelper.MultiplyMatrices(new List <mat4> {
                glm.rotate(90.0f / 180.0f * 3.1412f, new vec3(1, 0, 0)),
                glm.rotate(-90.0f / 180.0f * 3.1412f, new vec3(0, 1, 0)),
                glm.translate(new mat4(1), new vec3(1, 0, 0))
            });

            ground = MathHelper.MultiplyMatrices(new List <mat4>
            {
                glm.scale(new mat4(1), new vec3(6000, 6000, 6000)),
                glm.translate(new mat4(1), new vec3(0, -45, 0))
            });
            building = new Model3D();
            building.LoadFile(projectPath + "\\ModelFiles\\static\\building", 1, "Building 02.obj");
            building.scalematrix = glm.scale(new mat4(1), new vec3(30, 30, 30));
            building.transmatrix = glm.translate(new mat4(1), new vec3(1, 1, 1));

            car = new Model3D();
            car.LoadFile(projectPath + "\\ModelFiles\\static\\car", 3, "dpv.obj");
            car.scalematrix = glm.scale(new mat4(1), new vec3(0.15f, 0.25f, 0.15f));
            car.transmatrix = glm.translate(new mat4(1), new vec3(-150, -45.0f, 0.5f));
            car.rotmatrix   = glm.rotate(3.1412f, new vec3(0, 1, 0));

            tree = new Model3D();
            tree.LoadFile(projectPath + "\\ModelFiles\\static\\tree", 2, "Tree.obj");
            tree.scalematrix = glm.scale(new mat4(1), new vec3(50, 50, 50));
            tree.transmatrix = glm.translate(new mat4(1), new vec3(-240, -45.0f, 0.5f));
            tree.rotmatrix   = glm.rotate(3.1412f, new vec3(0, 1, 0));

            Blade = new md2(projectPath + "\\ModelFiles\\animated\\md2\\blade\\Blade.md2");
            Blade.StartAnimation(animType.STAND);
            Blade.rotationMatrix    = glm.rotate((float)((-90.0f / 180) * Math.PI), new vec3(1, 0, 0));
            Blade.scaleMatrix       = glm.scale(new mat4(1), new vec3(0.8f, 0.8f, 0.8f));
            Blade.TranslationMatrix = glm.translate(new mat4(1), new vec3(20, 19, -20));

            zombie = new md2LOL(projectPath + "\\ModelFiles\\animated\\md2LOL\\zombie.md2");
            zombie.StartAnimation(animType_LOL.STAND);
            zombie.rotationMatrix = glm.rotate((float)((-90.0f / 180) * Math.PI), new vec3(1, 0, 0));
            zombie.scaleMatrix    = glm.scale(new mat4(1), new vec3(0.8f, 0.8f, 0.8f));


            spider = new Model3D();
            spider.LoadFile(projectPath + "\\ModelFiles\\static\\spider", 4, "spider.obj");
            spider.transmatrix = glm.translate(new mat4(1), new vec3(240, 0.0f, 0));
            spider.rotmatrix   = glm.rotate((float)((-90.0f / 180) * Math.PI), new vec3(0, 1, 0));

            HandsWGun = new Model3D();
            HandsWGun.LoadFile(projectPath + "\\ModelFiles\\hands with gun", 8, "gun.obj");
            HandsWGun.scalematrix = glm.scale(new mat4(1), new vec3(0.2f, 0.2f, 0.2f));

            bulletModel = new Model3D();
            bulletModel.LoadFile(projectPath + "\\ModelFiles\\static\\bullet", 8, "bullet.obj");


            sh.UseShader();
            Gl.glClearColor(0, 0, 0.4f, 1);



            ProjectionMatrix = cam.GetProjectionMatrix();
            ViewMatrix       = cam.GetViewMatrix();

            modelID = Gl.glGetUniformLocation(sh.ID, "model");
            projID  = Gl.glGetUniformLocation(sh.ID, "projection");
            viewID  = Gl.glGetUniformLocation(sh.ID, "view");

            sh.UseShader();

            c = timer;
        }
コード例 #4
0
        public void Initialize()
        {
            string projectPath = Directory.GetParent(Environment.CurrentDirectory).Parent.FullName;

            sh = new Shader(projectPath + "\\Shaders\\SimpleVertexShader.vertexshader", projectPath + "\\Shaders\\SimpleFragmentShader.fragmentshader");

            //tex1 = new Texture(projectPath + "\\Textures\\grass_mix_d.jpg", 2);
            tex1 = new Texture(projectPath + "\\Textures\\ground_cracks2v_d.jpg", 2);

            tex     = new Texture(projectPath + "\\Textures\\crate.jpg", 3);
            textri2 = new Texture(projectPath + "\\Textures\\crate.jpg", 4);


            //m = new md2LOL(projectPath + "\\ModelFiles\\animated\\md2LOL\\fiora.md2"); //bytl3 ghreb!!!!!!!!!!
            m = new md2LOL(projectPath + "\\ModelFiles\\zombie.md2");
            m.StartAnimation(animType_LOL.STAND);
            m.rotationMatrix    = glm.rotate((float)((-90.0f / 180) * Math.PI), new vec3(1, 0, 0));
            m.scaleMatrix       = glm.scale(new mat4(1), new vec3(0.8f, 0.8f, 0.8f));
            m.TranslationMatrix = glm.translate(new mat4(1), new vec3(15, 1, 20));

            // enemy2 = new md2LOL(projectPath + "\\ModelFiles\\animated\\md2LOL\\zombie1.md2");
            enemy2 = new md2LOL(projectPath + "\\ModelFiles\\zombie.md2");
            enemy2.StartAnimation(animType_LOL.STAND);
            enemy2.rotationMatrix    = glm.rotate((float)((-90.0f / 180) * Math.PI), new vec3(1, 0, 0));
            enemy2.scaleMatrix       = glm.scale(new mat4(1), new vec3(0.8f, 0.8f, 0.8f));
            enemy2.TranslationMatrix = glm.translate(new mat4(1), new vec3(30, 1, 20));

            //building PROBLEM HERE
            building = new Model3D();
            building.LoadFile(projectPath + "\\ModelFiles\\static\\building", 5, "Building 02.obj");
            building.scalematrix = glm.scale(new mat4(1), new vec3(20, 20, 30));
            building.transmatrix = glm.translate(new mat4(1), new vec3(200, 40, -300));

            //tree
            tree = new Model3D();
            tree.LoadFile(projectPath + "\\ModelFiles\\static\\tree", 6, "Tree.obj");
            tree.scalematrix = glm.scale(new mat4(1), new vec3(5f, 10f, 5f));
            tree.transmatrix = glm.translate(new mat4(1), new vec3(-70, 10, 1));

            //spider
            spider = new Model3D();
            spider.LoadFile(projectPath + "\\ModelFiles\\static\\spider", 7, "spider.obj");
            spider.scalematrix = glm.scale(new mat4(1), new vec3(0.099f, 0.099f, 0.099f));
            spider.transmatrix = glm.translate(new mat4(1), new vec3(-70, 2, 1));

            //jeep
            jeep = new Model3D();
            jeep.LoadFile(projectPath + "\\ModelFiles\\static\\car", 8, "dpv.obj");
            jeep.scalematrix = glm.scale(new mat4(1), new vec3(0.1f, 0.1f, 0.1f));
            jeep.transmatrix = glm.translate(new mat4(1), new vec3(-50, 5, 1));
            jeep.rotmatrix   = glm.rotate((float)((1 / 180) * Math.PI), new vec3(1, 0, 0));

            //house
            house = new Model3D();
            house.LoadFile(projectPath + "\\ModelFiles\\static\\house", 9, "house.obj");
            house.scalematrix = glm.scale(new mat4(1), new vec3(9, 9, 9));
            house.transmatrix = glm.translate(new mat4(1), new vec3(-60, 10, -45));


            // skybox
            Downtex  = new Texture(projectPath + "\\Textures\\nottingham_dn.jpg", 2); //ground
            Uptex    = new Texture(projectPath + "\\Textures\\nottingham_up.jpg", 3); //up
            Fronttex = new Texture(projectPath + "\\Textures\\nottingham_ft.jpg", 4); //front
            Righttex = new Texture(projectPath + "\\Textures\\nottingham_rt.jpg", 5); //right
            Backtex  = new Texture(projectPath + "\\Textures\\nottingham_bk.jpg", 6); ///back
            Lefttex  = new Texture(projectPath + "\\Textures\\nottingham_lf.jpg", 7); //left



            //define normal for each vertex
            float[] ground =
            {
                -10.0f, 0.0f,  10.0f,
                0,         0,      1,
                0,         1,
                0,         1,      0,

                10.0f,  0.0f, -10.0f,
                0,         0,      1,
                1,         0,
                0,         1,      0,


                -10.0f, 0.0f, -10.0f,
                0,         0,      1,
                0,         0,
                0,         1,      0,

                10.0f,  0.0f,  10.0f,
                0,         0,      1,
                1,         1,
                0,         1,      0,

                -10.0f, 0.0f,  10.0f,
                0,         0,      1,
                0,         1,
                0,         1,      0,

                10.0f,  0.0f, -10.0f,
                0,         0,      1,
                1,         0,
                0,         1,      0,
            };
            vertexBufferID = GPU.GenerateBuffer(ground);

            //skybox

            Gl.glClearColor(1.0f, 1.0f, 1.0f, 1);

            float[] myCube =
            {
                //ground
                -10.0f, -1.0f,-10.0f, //0
                1,          0, 0,
                0,          1, 0,

                -10.0f, -1.0f,10.0f, //1
                1,          0, 0,
                0,          1, 0,

                10.0f,  -1.0f,10.0f,//2
                1,          0, 0,
                0,          1, 0,

                10.0f,  -1.0f,-10.0f,//3
                1,          0, 0,
                0,          1, 0,

                //roof
                -10.0f,  9.0f,-10.0f,//4
                1,          0, 0,
                0,          1, 0,

                -10.0f,  9.0f,10.0f,//10
                1,          0, 0,
                0,          1, 0,

                10.0f,   9.0f,10.0f,//6
                1,          0, 0,
                0,          1, 0,

                10.0f,   9.0f,-10.0f,//7
                1,          0, 0,
                0,          1, 0,

                //back
                -10.0f, -1.0f,-10.0f, //8
                1,          0, 0,
                0,          1, 0,

                -10.0f,  9.0f,-10.0f,//10
                1,          0, 0,
                0,          1, 0, //normal

                10.0f,   9.0f,-10.0f,//9
                1,          0, 0,
                0,          1, 0,

                10.0f,  -1.0f,-10.0f,//11
                1,          0, 0,
                0,          1, 0,

                //right
                10.0f,  -1.0f,-10.0f,//12
                1,          0, 0,
                0,          1, 0,

                10.0f,   9.0f,-10.0f,//14
                1,          0, 0,
                0,          1, 0,

                10.0f,   9.0f,10.0f,//13
                1,          0, 0,
                0,          1, 0,

                10.0f,  -1.0f,10.0f,//110
                1,          0, 0,
                0,          1, 0,

                //front
                -10.0f, -1.0f,10.0f, //8
                1,          0, 0,
                0,          1, 0,

                10.0f,  -1.0f,10.0f,//11
                1,          0, 0,
                0,          1, 0,

                10.0f,   9.0f,10.0f,//10
                1,          0, 0,
                0,          1, 0,

                -10.0f,  9.0f,10.0f,//9
                1,          0, 0,
                0,          1, 0,

                //left
                -10.0f, -1.0f,-10.0f,  //20
                1,          0, 0,
                0,          1, 0,

                -10.0f, -1.0f,10.0f,//23
                1,          0, 0,
                0,          1, 0,

                -10.0f,  9.0f,10.0f,//21
                1,          0, 0,
                0,          1, 0,

                -10.0f,  9.0f,-10.0f,//22
                1,          0, 0,
                0,          1, 0,
            };


            float[] CubeCoord =
            {
                //down

                1, 0,
                0, 0,
                0, 1,
                1, 1,
                /////22222   up

                0, 0,
                1, 0,
                1, 1,
                0, 1,
                /////333333  BACK

                0, 1,
                0, 0,
                1, 0,
                1, 1,

                /////444444  right
                0, 1,
                0, 0,
                1, 0,
                1, 1,

                /////555555 front


                1, 1,
                0, 1,
                0, 0,
                1, 0,


                /////66666   left
                1, 1,
                0, 1,
                0, 0,
                1, 0,
            };



            SkyboxBufferID = GPU.GenerateBuffer(myCube);
            cubeCoordID    = GPU.GenerateBuffer(CubeCoord);

            //triangle
            float[] TrianleCoord =
            {
                0, 0,
                1, 1,
                0, 1,
            };

            float[] triangle =
            {
                -1.0f, -1.0f, 0.0f,
                0,         0,    0,
                1.0f,  -1.0f, 0.0f,
                0,         0,    0,
                0.0f,   1.0f, 0.0f,
                0,         0,    0,
            };

            vertexBufferID2 = GPU.GenerateBuffer(triangle);
            TriangleCoordID = GPU.GenerateBuffer(TrianleCoord);

            //2nd triangle
            //triangle
            float[] TrianleCoord2 =
            {
                0, 0,
                1, 1,
                0, 1,
            };

            float[] triangle2 =
            {
                -1.0f, -1.0f, 0.0f,
                0,         0,    0,
                1.0f,  -1.0f, 0.0f,
                0,         0,    0,
                0.0f,   1.0f, 0.0f,
                0,         0,    0,
            };

            vertexBuffer2ID2 = GPU.GenerateBuffer(triangle2);
            TriangleCoord2ID = GPU.GenerateBuffer(TrianleCoord2);


            Gl.glClearColor(0, 0, 0.4f, 1);

            cam = new Camera();
            cam.Reset(0, 34, 100, 0, 0, 0, 0, 1, 0);

            ProjectionMatrix = cam.GetProjectionMatrix();
            ViewMatrix       = cam.GetViewMatrix();

            transID = Gl.glGetUniformLocation(sh.ID, "trans"); //7ala m7l l model kman fl vertex shader
            projID  = Gl.glGetUniformLocation(sh.ID, "projection");
            viewID  = Gl.glGetUniformLocation(sh.ID, "view");
            //modelID = Gl.glGetUniformLocation(sh.ID, "model");

            modelmatrix = glm.scale(new mat4(1), new vec3(50, 50, 50)) * glm.translate(new mat4(1), new vec3(1, 1, 1)); //here! zombies
            // modelmatrix2 = glm.scale(new mat4(1), new vec3(15,15,15)) * glm.translate(new mat4(1), new vec3(80, 100, -100)); //wooden triangle1

            sh.UseShader();

            //get location of specular and attenuation then send their values
            //get location of light position and send its value
            //setup the ambient light component.
            //setup the eye position.

            camposID = Gl.glGetUniformLocation(sh.ID, "campos");

            Gl.glEnable(Gl.GL_DEPTH_TEST);
            Gl.glDepthFunc(Gl.GL_LESS);
        }
コード例 #5
0
        public void Draw()
        {
            Gl.glUniformMatrix4fv(projID, 1, Gl.GL_FALSE, ProjectionMatrix.to_array());

            Gl.glClear(Gl.GL_COLOR_BUFFER_BIT | Gl.GL_DEPTH_BUFFER_BIT);
            sh.UseShader();
            // FOR DONW SQUARE
            Gl.glBindBuffer(Gl.GL_ARRAY_BUFFER, skyboxBuffer_ID);
            //FOR POSITION
            Gl.glEnableVertexAttribArray(0);
            Gl.glVertexAttribPointer(0, 3, Gl.GL_FLOAT, Gl.GL_FALSE, 8 * sizeof(float), (IntPtr)(0 * sizeof(float)));
            //FOR COLOR
            Gl.glEnableVertexAttribArray(1);
            Gl.glVertexAttribPointer(1, 3, Gl.GL_FLOAT, Gl.GL_FALSE, 8 * sizeof(float), (IntPtr)(3 * sizeof(float)));
            // FOR TEXTURE
            Gl.glEnableVertexAttribArray(2);
            Gl.glVertexAttribPointer(2, 2, Gl.GL_FLOAT, Gl.GL_FALSE, 8 * sizeof(float), (IntPtr)(6 * sizeof(float)));

            Gl.glUniformMatrix4fv(projID, 1, Gl.GL_FALSE, ProjectionMatrix.to_array());
            float[] viewmat = cam.GetViewMatrix().to_array();
            viewmat[12] = 0;
            viewmat[13] = 0;
            viewmat[14] = 0;
            viewmat[15] = 1;
            Gl.glUniformMatrix4fv(viewID, 1, Gl.GL_FALSE, viewmat);

            u.Bind();
            Gl.glUniformMatrix4fv(modelID, 1, Gl.GL_FALSE, up.to_array());
            Gl.glDrawArrays(Gl.GL_TRIANGLES, 0, 6);

            d.Bind();
            Gl.glUniformMatrix4fv(modelID, 1, Gl.GL_FALSE, down.to_array());
            Gl.glDrawArrays(Gl.GL_TRIANGLES, 0, 6);

            l.Bind();
            Gl.glUniformMatrix4fv(modelID, 1, Gl.GL_FALSE, left.to_array());
            Gl.glDrawArrays(Gl.GL_TRIANGLES, 0, 6);

            r.Bind();
            Gl.glUniformMatrix4fv(modelID, 1, Gl.GL_FALSE, right.to_array());
            Gl.glDrawArrays(Gl.GL_TRIANGLES, 0, 6);

            f.Bind();
            Gl.glUniformMatrix4fv(modelID, 1, Gl.GL_FALSE, front.to_array());
            Gl.glDrawArrays(Gl.GL_TRIANGLES, 0, 6);

            b.Bind();
            Gl.glUniformMatrix4fv(modelID, 1, Gl.GL_FALSE, back.to_array());
            Gl.glDrawArrays(Gl.GL_TRIANGLES, 0, 6);

            Gl.glUniformMatrix4fv(viewID, 1, Gl.GL_FALSE, ViewMatrix.to_array());
            Gl.glUniform3fv(EyePositionID, 1, cam.GetCameraPosition().to_array());
            //ground
            Gl.glEnable(Gl.GL_DEPTH_TEST);

            groundTexture.Bind();
            Gl.glUniformMatrix4fv(modelID, 1, Gl.GL_FALSE, ground.to_array());
            Gl.glDrawArrays(Gl.GL_TRIANGLES, 0, 6);

            playerPos    = cam.GetCameraTarget();
            playerPos.y -= 2.8f;

            HandsWGun.transmatrix = glm.translate(new mat4(1), playerPos);
            HandsWGun.rotmatrix   = MathHelper.MultiplyMatrices(new List <mat4>()
            {
                glm.rotate(-cam.mAngleY, new vec3(1, 0, 0)),
                glm.rotate(3.1412f + cam.mAngleX, new vec3(0, 1, 0))
            });


            spider.Draw(modelID);
            building.Draw(modelID);
            car.Draw(modelID);
            Blade.Draw(modelID);
            zombie.Draw(modelID);
            tree.Draw(modelID);
            HandsWGun.Draw(modelID);

            Gl.glBindBuffer(Gl.GL_ARRAY_BUFFER, skyboxBuffer_ID);

            Gl.glEnableVertexAttribArray(0);
            Gl.glVertexAttribPointer(0, 3, Gl.GL_FLOAT, Gl.GL_FALSE, 8 * sizeof(float), (IntPtr)(0 * sizeof(float)));
            //FOR COLOR
            Gl.glEnableVertexAttribArray(1);
            Gl.glVertexAttribPointer(1, 3, Gl.GL_FLOAT, Gl.GL_FALSE, 8 * sizeof(float), (IntPtr)(3 * sizeof(float)));
            // FOR TEXTURE
            Gl.glEnableVertexAttribArray(2);
            Gl.glVertexAttribPointer(2, 2, Gl.GL_FLOAT, Gl.GL_FALSE, 8 * sizeof(float), (IntPtr)(6 * sizeof(float)));


            shoot.Bind();
            vec3 shootpos = cam.GetCameraTarget();

            shootpos.y -= 1.5f;
            shootpos   += cam.GetLookDirection() * 8;

            Gl.glUniformMatrix4fv(modelID, 1, Gl.GL_FALSE, MathHelper.MultiplyMatrices(new List <mat4>()
            {
                glm.rotate(cam.mAngleX, new vec3(0, 1, 0)), glm.rotate((float)c / 10, new vec3(0, 0, 1)),
                glm.translate(new mat4(1), shootpos)
            }).to_array());
            Gl.glEnable(Gl.GL_BLEND);
            Gl.glBlendFunc(Gl.GL_SRC_ALPHA, Gl.GL_ONE_MINUS_SRC_ALPHA);
            if (draw)
            {
                Gl.glDrawArrays(Gl.GL_TRIANGLES, 0, 6);
                c--;
                if (c < 0)
                {
                    c    = timer;
                    draw = false;
                }
            }
            Gl.glDisable(Gl.GL_BLEND);

            Gl.glDisable(Gl.GL_DEPTH_TEST);


            vec3 zombiePosition;

            zombiePosition.x = zombie.TranslationMatrix[3].x;
            zombiePosition.y = zombie.TranslationMatrix[3].y;
            zombiePosition.z = zombie.TranslationMatrix[3].z;

            vec3 zombieRotation = new vec3(0, -1, 0);

            zombieRotation = zombie.rotationMatrix.to_mat3() * zombieRotation;

            vec3 camposition = cam.GetCameraPosition();

            vec3 zombieDirection = camposition - zombiePosition;

            zombieDirection   = glm.normalize(zombieDirection);
            zombieDirection.y = 0;
            double distance = Math.Sqrt(Math.Pow(camposition.x - zombiePosition.x, 2) +
                                        Math.Pow(camposition.y - zombiePosition.y, 2) +
                                        Math.Pow(camposition.z - zombiePosition.z, 2));

            if (distance < Enemy_range_Run && distance > Enemy_range_Attack)
            {
                if (zombie.animSt.type != animType_LOL.RUN)
                {
                    zombie.StartAnimation(animType_LOL.RUN);
                }
                zombie.TranslationMatrix = glm.translate(zombie.TranslationMatrix, zombieDirection * zombieSpeed);
            }
            else if (distance < Enemy_range_Attack)
            {
                if (zombie.animSt.type != animType_LOL.ATTACK1)
                {
                    zombie.StartAnimation(animType_LOL.ATTACK1);
                }
            }
            else
            {
                if (zombie.animSt.type == animType_LOL.RUN)
                {
                    zombie.StartAnimation(animType_LOL.STAND);
                }
            }
            vec3 crossProduct = glm.cross(zombieRotation, zombieDirection);

            if (crossProduct.y != 0)
            {
                if (crossProduct.y > 0)
                {
                    zombie.rotationMatrix = glm.rotate(zombie.rotationMatrix, (float)(5.0 / 180.0 * Math.PI), new vec3(0, 0, 1));
                }
                else
                {
                    zombie.rotationMatrix = glm.rotate(zombie.rotationMatrix, (float)(-5.0 / 180.0 * Math.PI), new vec3(0, 0, 1));
                }
            }
            for (int i = 0; i < bullets.Count; i++)
            {
                bullets[i].Draw(modelID);
            }
        }
コード例 #6
0
        public void Update()
        {
            //update view and projection matrix
            cam.UpdateViewMatrix();
            ViewMatrix       = cam.GetViewMatrix();
            ProjectionMatrix = cam.GetProjectionMatrix();

            //Keyframes
            if (GraphicsForm.runAnimation == true)
            {
                int startKeyFrame = GraphicsForm.startFrame;
                int endKeyFrame   = GraphicsForm.endFrame;// startKeyFrame + 1;
                time = startKeyFrame;

                interpolatedList = new List <float>();
                time            += speed;

                time %= endKeyFrame;
                float alpha = (time - startKeyFrame) / (endKeyFrame - startKeyFrame);

                //to fill the main keyframes list just one time
                if (initialzeList == 1)
                {
                    foreach (KeyFrame keyFrame in GraphicsForm.vertexKeyFramesDict.Values)
                    {
                        tempKeyFrameList = new List <float>();
                        foreach (List <float> l in keyFrame.verticesDict.Values)
                        {
                            tempKeyFrameList.AddRange(l);
                        }

                        int numOfFrames = keyFrame.numOfInterpolatedFrames;
                        Tuple <int, List <float> > t = new Tuple <int, List <float> >(numOfFrames, tempKeyFrameList);
                        mainKeyFrameList.Add(t);
                    }
                    initialzeList = 0;
                }

                //to fill the interpolated list with the start, interpolated, end frames
                for (int i = startKeyFrame; i < endKeyFrame; i++)
                {
                    //ba7ot al start bta3e ele howa(0,0,0...)
                    interpolatedList.AddRange(mainKeyFrameList[i].Item2);
                    int count = mainKeyFrameList[i].Item2.Count;
                    //Item1: num of required interpolated frames
                    for (int j = 0; j < mainKeyFrameList[i + 1].Item1; j++)
                    {
                        int indx = 0;
                        for (; indx < mainKeyFrameList[i + 1].Item2.Count; indx++)
                        {
                            float interpolatedValue = (alpha * (mainKeyFrameList[i + 1].Item2[indx] - mainKeyFrameList[i].Item2[indx])) + mainKeyFrameList[i].Item2[indx];
                            interpolatedList.Add(interpolatedValue);
                        }

                        time += speed;
                        time %= endKeyFrame;
                        alpha = (time - startKeyFrame) / (endKeyFrame - startKeyFrame);
                    }
                }
                interpolatedList.AddRange(mainKeyFrameList[endKeyFrame].Item2);
            }
        }
コード例 #7
0
        public void Initialize()
        {
            string projectPath = Directory.GetParent(Environment.CurrentDirectory).Parent.FullName;

            sh = new Shader(projectPath + "\\Shaders\\SimpleVertexShader.vertexshader", projectPath + "\\Shaders\\SimpleFragmentShader.fragmentshader");
            Gl.glClearColor(0.6f, 0.6f, 0.6f, 1);

            float[] backGroundVertices =
            {
                //plane
                -2.0f,  0.0f,  2.0f,
                1.0f,   1.0f,  1.0f, //color w
                -2.0f,  0.0f, -2.0f,
                1.0f,   1.0f,  1.0f, //color w
                2.0f,   0.0f, -2.0f,
                1.0f,   1.0f,  1.0f, //color w
                2.0f,   0.0f,  2.0f,
                1.0f,   1.0f,  1.0f, //color w

                //Axis
                //x
                -2.0f,  0.0f,  0.0f,
                1.0f,   0.0f,  0.0f, //R
                2.0f,   0.0f,  0.0f,
                1.0f,   0.0f,  0.0f, //R

                //y
                0.0f,  -2.0f,  0.0f,
                0.0f,   1.0f,  0.0f, //G
                0.0f,   2.0f,  0.0f,
                0.0f,   1.0f,  0.0f, //G

                //z
                0.0f,   0.0f,  2.0f,
                0.0f,   0.0f,  1.0f, //B
                0.0f,   0.0f, -2.0f,
                0.0f,   0.0f,  1.0f, //B
            };
            sh.UseShader();

            planeBufferID = GPU.GenerateBuffer(backGroundVertices);
            vertexID      = GPU.GenerateBuffer(verts.ToArray());


            transID = Gl.glGetUniformLocation(sh.ID, "trans");
            projID  = Gl.glGetUniformLocation(sh.ID, "projection");
            viewID  = Gl.glGetUniformLocation(sh.ID, "view");

            DataID          = Gl.glGetUniformLocation(sh.ID, "data");
            EyePositionID   = Gl.glGetUniformLocation(sh.ID, "EyePosition_worldspace");
            AmbientLightID  = Gl.glGetUniformLocation(sh.ID, "ambientLight");
            DiffuseLightID  = Gl.glGetUniformLocation(sh.ID, "diffuseLight");
            SpecularLightID = Gl.glGetUniformLocation(sh.ID, "specularLight");

            LightPosID     = Gl.glGetUniformLocation(sh.ID, "LightPosition_worldspace");
            checkTextureID = Gl.glGetUniformLocation(sh.ID, "checkTextureOut");
            checkLightID   = Gl.glGetUniformLocation(sh.ID, "checkLightOut");

            cam = new Camera();
            cam.Reset(0, 2, 5, 0, 0, 0, 0, 1, 0);

            ProjectionMatrix = cam.GetProjectionMatrix();
            ViewMatrix       = cam.GetViewMatrix();



            // Model matrix: apply transformations to the model
            List <mat4> transformations = new List <mat4>();

            transformations.Add(glm.scale(new mat4(1), new vec3(1, 2, 1)));
            transformations.Add(glm.rotate(-30.0f / 180 * 3.14f, new vec3(0, 1, 0)));
            ModelMatrix = MathHelper.MultiplyMatrices(transformations);
        }
コード例 #8
0
ファイル: Window.cs プロジェクト: scikodot/manipus-2
        protected void ShowCore(FrameEventArgs e)
        {
            // workspace viewport
            GL.Viewport((int)(0.25 * Width), 0, (int)(0.75 * Width), Height);

            GL.Enable(EnableCap.DepthTest);  // TODO: fix depth test so that it doesn't hide objects behind alpha-fragments

            // clearing viewport
            GL.Enable(EnableCap.ScissorTest);
            GL.Scissor((int)(0.25 * Width), 0, (int)(0.75 * Width), Height);
            GL.ClearColor(0.2f, 0.3f, 0.3f, 1.0f);
            GL.Clear(ClearBufferMask.ColorBufferBit | ClearBufferMask.DepthBufferBit | ClearBufferMask.StencilBufferBit);
            GL.Disable(EnableCap.ScissorTest);

            // attaching shader
            _shader.Use();

            // set view and projection matrices;
            // these matrices come pre-transposed, so there's no need to transpose them again (see VertexShader file)
            _shader.SetMatrix4("view", _camera.GetViewMatrix(), false);
            _shader.SetMatrix4("projection", _camera.GetProjectionMatrix(), false);

            // set general properties
            _shader.SetVector3("viewPos", _camera.Position);

            // set directional light properties
            _shader.SetVector3("dirLight[0].direction", new Vector3(1.0f, 0.0f, 0.0f));
            _shader.SetVector3("dirLight[1].direction", new Vector3(0.0f, -1.0f, 0.0f));
            _shader.SetVector3("dirLight[2].direction", new Vector3(0.0f, 0.0f, -1.0f));
            for (int i = 0; i < 3; i++)
            {
                _shader.SetVector3($"dirLight[{i}].ambient", new Vector3(0.05f, 0.05f, 0.05f));
                _shader.SetVector3($"dirLight[{i}].diffuse", new Vector3(0.75f, 0.75f, 0.75f));
                _shader.SetVector3($"dirLight[{i}].specular", new Vector3(0.5f, 0.5f, 0.5f));
            }

            // setup line shader
            lineShader.Use();
            lineShader.SetMatrix4("view", _camera.GetViewMatrix(), false);
            lineShader.SetMatrix4("projection", _camera.GetProjectionMatrix(), false);
            lineShader.SetVector3("color", Vector3.One);

            Matrix4 model;

            if (ManipLoaded)
            {
                // obstacles & colliders
                if (obstacles.Contains(null))
                {
                    for (int i = 0; i < obstacles.Length; i++)
                    {
                        obstacles[i] = new Entity(lineShader, GL_Convert(Manager.Obstacles[i].Data, Vector4.One));

                        switch (Manager.Obstacles[i].Collider.Shape)
                        {
                        case ColliderShape.Box:
                            boundings[i] = new Entity(lineShader, GL_Convert(Manager.Obstacles[i].Collider.Data, new Vector4(Vector3.UnitY, 1.0f)), new uint[]
                            {
                                0, 1, 2, 3, 0, 4, 5, 1, 5, 6, 2, 6, 7, 3, 7, 4
                            });
                            break;

                        case ColliderShape.Sphere:
                            boundings[i] = new Entity(lineShader, GL_Convert(Manager.Obstacles[i].Collider.Data, new Vector4(Vector3.UnitY, 1.0f)));
                            lon[i]       = new Entity(lineShader, GL_Convert(Manager.Obstacles[i].Collider.Data, new Vector4(Vector3.UnitY, 1.0f)), ((Sphere)Manager.Obstacles[i].Collider).indicesLongitude);
                            break;
                        }
                    }
                }
                else
                {
                    float dt;
                    if (forward)
                    {
                        dt = (float)e.Time;
                        if (time > 1)
                        {
                            forward = false;
                        }
                    }
                    else
                    {
                        dt = -(float)e.Time;
                        if (time < -1)
                        {
                            forward = true;
                        }
                    }
                    time += dt;

                    model = Matrix4.Identity * Matrix4.CreateTranslation(time, 0, 0);
                    for (int i = 0; i < obstacles.Length; i++)
                    {
                        Manager.Obstacles[i].Move(Vector3.UnitX, dt);

                        obstacles[i].Display(model, () =>
                        {
                            GL.DrawArrays(PrimitiveType.Points, 0, Manager.Obstacles[i].Data.Length);
                        });

                        if (Dispatcher.WorkspaceBuffer.ObstBuffer[i].ShowBounding)
                        {
                            boundings[i].Display(model, Manager.Obstacles[i].Collider.Draw);
                            lon[i].Display(model, ((Sphere)Manager.Obstacles[i].Collider).DrawLongitudes);
                        }
                    }
                }

                for (int j = 0; j < Manager.Manipulators.Length; j++)
                {
                    Manipulator manip = Manager.Manipulators[j];

                    // goal
                    if (goal[j] == null)
                    {
                        if (manip.States["Goal"])
                        {
                            List <Vector3> MainAttr = new List <Vector3> {
                                manip.GoodAttractors[0].Center
                            };
                            MainAttr.AddRange(manip.GoodAttractors[0].Area);
                            goal[j] = new Entity(lineShader, GL_Convert(MainAttr.ToArray(), new Vector4(1.0f, 1.0f, 0.0f, 1.0f)));
                        }
                    }
                    else
                    {
                        model = Matrix4.Identity;
                        goal[j].Display(model, () =>
                        {
                            GL.PointSize(5);
                            GL.DrawArrays(PrimitiveType.Points, 0, 1);
                            GL.PointSize(1);
                            GL.DrawArrays(PrimitiveType.Points, 1, manip.GoodAttractors[0].Area.Length);
                        });
                    }

                    // path
                    if (manip.States["Path"] && manip.Path != null)
                    {
                        int count = manip.Path.Count;
                        path[j] = new Entity(lineShader, GL_Convert(manip.Path.ToArray(), new Vector4(Vector3.UnitX, 1.0f)));

                        model = Matrix4.Identity;
                        path[j].Display(model, () =>
                        {
                            GL.DrawArrays(PrimitiveType.LineStrip, 0, count);
                        });
                    }

                    // random tree
                    if (manip.Tree != null)
                    {
                        // block the manager thread while updating tree
                        Dispatcher.ThreadHandle.Reset();

                        // add all elements from addition buffer to the hash set
                        var add = new List <Logic.PathPlanning.Tree.Node>(manip.Tree.AddBuffer);
                        tree[j].UnionWith(add);
                        manip.Tree.AddBuffer.Clear();

                        // delete all elements contained in deletion buffer from the hash set
                        var del = new List <Logic.PathPlanning.Tree.Node>(manip.Tree.DelBuffer);
                        tree[j].ExceptWith(del);
                        manip.Tree.DelBuffer.Clear();

                        // unblock the manager thread to continue calculations
                        Dispatcher.ThreadHandle.Set();
                    }

                    if (Dispatcher.WorkspaceBuffer.JointBuffer[j].ShowTree)
                    {
                        model = Matrix4.Identity;
                        foreach (var node in tree[j])
                        {
                            if (node.Entity == null)
                            {
                                node.Entity = CreateTreeBranch(node.p, node.Parent.p);
                            }

                            node.Entity.Display(model, () =>
                            {
                                GL.DrawArrays(PrimitiveType.LineStrip, 0, 2);
                            });
                        }
                    }

                    // draw manipulator configuration if its model is loaded properly
                    if (ManipLoaded)
                    {
                        manip.Draw(_shader);
                    }
                }
            }

            // workspace grid
            model = Matrix4.Identity;
            grid.Display(model, () =>
            {
                GL.DrawArrays(PrimitiveType.LineStrip, 0, 2);
                GL.DrawArrays(PrimitiveType.LineStrip, 2, 2);
            });
            for (int i = 1; i < 11; i++)
            {
                model = Matrix4.CreateTranslation(Vector3.UnitZ * i);
                grid.Display(model, () => { GL.DrawArrays(PrimitiveType.LineStrip, 0, 2); });
                model = Matrix4.CreateTranslation(Vector3.UnitZ * -i);
                grid.Display(model, () => { GL.DrawArrays(PrimitiveType.LineStrip, 0, 2); });

                model = Matrix4.CreateTranslation(Vector3.UnitX * i);
                grid.Display(model, () => { GL.DrawArrays(PrimitiveType.LineStrip, 2, 2); });
                model = Matrix4.CreateTranslation(Vector3.UnitX * -i);
                grid.Display(model, () => { GL.DrawArrays(PrimitiveType.LineStrip, 2, 2); });
            }

            model = Matrix4.Identity;
            gridFloor.Display(model, () =>
            {
                // the workspace grid rendering is done lastly, because it's common to render all transparent objects at last
                //
                // the blending function is determined as follows:
                // Color = SourceColor * SourceFactor + DestColor * DestFactor,
                // where
                //     SourceColor - color of the currently rendering fragment,
                //     SourceFactor - its factor,
                //     DestColor - color of the already rendered fragment (the one in the color buffer),
                //     DestFactor - its factor.
                //
                // so, to render transparent floor, we take SourceFactor as source's alpha (floor's alpha) and DestFactor as the remainder of the source's alpha
                // (the visible amount of the opaque object behind the floor)
                GL.Enable(EnableCap.Blend);
                GL.BlendFunc(BlendingFactor.SrcAlpha, BlendingFactor.OneMinusSrcAlpha);

                GL.DrawElements(BeginMode.Triangles, 7, DrawElementsType.UnsignedInt, 0);

                GL.Disable(EnableCap.Blend);
            });

            //ImGui.ShowDemoWindow();

            base.OnRenderFrame(e);
        }
コード例 #9
0
ファイル: Renderer.cs プロジェクト: mohamedalaam/fps
        public void Initialize()
        {
            string projectPath = Directory.GetParent(Environment.CurrentDirectory).Parent.FullName;

            sh = new Shader(projectPath + "\\Shaders\\SimpleVertexShader.vertexshader", projectPath + "\\Shaders\\SimpleFragmentShader.fragmentshader");

            tex   = new Texture(projectPath + "\\Textures\\crate.jpg", 0);
            down  = new Texture(projectPath + "\\Textures\\down.jpg", 1);
            right = new Texture(projectPath + "\\Textures\\right.jpg", 2);
            left  = new Texture(projectPath + "\\Textures\\left.jpg", 3);
            up    = new Texture(projectPath + "\\Textures\\up.jpg", 4);
            front = new Texture(projectPath + "\\Textures\\front.jpg", 5);
            back  = new Texture(projectPath + "\\Textures\\back.jpg", 6);
            tex1  = new Texture(projectPath + "\\Textures\\Ground.jpg", 2);

            m = new md2LOL(projectPath + "\\ModelFiles\\zombie.md2");
            m.StartAnimation(animType_LOL.RUN);
            m.rotationMatrix    = glm.rotate((float)((-90.0f / 180) * Math.PI), new vec3(1, 0, 0));
            m.scaleMatrix       = glm.scale(new mat4(1), new vec3(0.0093f, 0.0093f, 0.0093f));
            m.TranslationMatrix = glm.translate(new mat4(1), new vec3(0, -2, 5));
            ////define normal for each vertex
            m2 = new md2LOL(projectPath + "\\ModelFiles\\wolf.md2");
            m2.StartAnimation(animType_LOL.ATTACK1);
            m2.rotationMatrix    = glm.rotate((float)((-90.0f / 180) * Math.PI), new vec3(1, 0, 0));
            m2.scaleMatrix       = glm.scale(new mat4(1), new vec3(0.008f, 0.008f, 0.008f));
            m2.TranslationMatrix = glm.translate(new mat4(1), new vec3(-2, -2, 5));


            Gl.glClearColor(0, 0, 0, 1);
            float ground = 1;


            float[] skybox =
            {
                -ground, -ground, -ground, 0, 0,
                ground,  -ground, -ground, 1, 0,
                ground,  ground,  -ground, 1, 1,

                -ground, -ground, -ground, 0, 0,
                -ground, ground,  -ground, 0, 1,
                ground,  ground,  -ground, 1, 1
            };
            float[] verts =
            {
                -1.0f, -1.0f, 0.0f,

                0,         0,
                1.0f,  -1.0f, 0.0f,

                1,         0,
                0.0f,   1.0f, 0.0f,

                0.5f, 1
            };

            vertexBufferID  = GPU.GenerateBuffer(skybox);
            vertexBufferID2 = GPU.GenerateBuffer(verts);

            scaleMat = glm.scale(new mat4(1), new vec3(200f, 200f, 200f));

            cam = new Camera();

            ProjectionMatrix = cam.GetProjectionMatrix();
            ViewMatrix       = cam.GetViewMatrix();
            transID          = Gl.glGetUniformLocation(sh.ID, "model");
            projID           = Gl.glGetUniformLocation(sh.ID, "projection");
            viewID           = Gl.glGetUniformLocation(sh.ID, "view");

            leftmatrix = MathHelper.MultiplyMatrices(new List <mat4>()
            {
                glm.rotate(90.0f / 180.0f * 3.1412f, new vec3(0, 1, 0)),
                glm.translate(new mat4(1), new vec3(0, 0, 0)),
                scaleMat
            });

            rightmatrix = MathHelper.MultiplyMatrices(new List <mat4>()
            {
                glm.rotate(270f / 180.0f * 3.1412f, new vec3(0, 1, 0)),
                glm.translate(new mat4(1), new vec3(0, 0, 0)),
                scaleMat
            });

            upmatrix = MathHelper.MultiplyMatrices(new List <mat4>()
            {
                glm.rotate(90 / 180.0f * 3.1412f, new vec3(1, 0, 0)),
                glm.translate(new mat4(1), new vec3(0, 0, 0)),
                scaleMat
            });

            backmatrix = MathHelper.MultiplyMatrices(new List <mat4>()
            {
                glm.rotate(180f / 180f * 3.1412f, new vec3(0, 1, 0)),
                glm.translate(new mat4(1), new vec3(0, 0, 0)),
                scaleMat
            });

            groundmatrix = MathHelper.MultiplyMatrices(new List <mat4>()
            {
                glm.rotate(90f / 180.0f * 3.1412f, new vec3(1, 0, 0)),
                glm.translate(new mat4(1), new vec3(0, -2, 0)),
                scaleMat
            });

            //Gl.glClearColor(0, 0, 0.4f, 1);

            //cam = new Camera();
            cam.Reset(0, -1.75f, 0, 0, 0, 0, 0, 0, 0);

            ProjectionMatrix = cam.GetProjectionMatrix();
            ViewMatrix       = cam.GetViewMatrix();



            modelmatrix = glm.scale(new mat4(1), new vec3(50, 50, 50));

            tree = new Model3D();
            tree.LoadFile(projectPath + "\\ModelFiles\\tree", 6, "Tree.obj");
            tree.scalematrix = glm.scale(new mat4(1), new vec3(0.1f, 0.1f, 0.1f));
            tree.transmatrix = glm.translate(new mat4(1), new vec3(0.6f, -2, 0.4f));

            //tree2 = new Model3D();
            //tree2.LoadFile(projectPath + "\\ModelFiles\\Tree1", 6, "Tree1.obj");
            //tree2.scalematrix = glm.scale(new mat4(1), new vec3(30, 30, 30));

            treee3 = new Model3D();
            treee3.LoadFile(projectPath + "\\ModelFiles\\Wolf Rigged and Game Ready", 6, "Wolf.fbx");
            treee3.scalematrix = glm.scale(new mat4(1), new vec3(0.1f, 0.1f, 0.1f));
            treee3.transmatrix = glm.translate(new mat4(1), new vec3(-0.6f, -2, 0.4f));
            treee3.rotmatrix   = glm.rotate((float)((-180.0f / 180) * Math.PI), new vec3(1, 0, 0));


            //car = new Model3D();
            //car.LoadFile(projectPath + "\\ModelFiles\\car", 6, "dpv.obj");
            //car.scalematrix = glm.scale(new mat4(1), new vec3(15, 1, 15));

            cottage = new Model3D();
            cottage.LoadFile(projectPath + "\\ModelFiles\\House", 6, "house.obj");
            cottage.scalematrix = glm.scale(new mat4(1), new vec3(0.1f, 0.1f, 0.1f));

            cottage.transmatrix = glm.translate(new mat4(1), new vec3(-0.6f, -2f, 0.4f));

            jeep = new Model3D();
            jeep.LoadFile(projectPath + "\\ModelFiles\\jeep", 9, "jeep1.3ds");
            jeep.scalematrix = glm.scale(new mat4(1), new vec3(0.05f, 0.05f,
                                                               0.05f));
            jeep.transmatrix = glm.translate(new mat4(1), new vec3(1f, -2f, 1f));
            jeep.rotmatrix   = glm.rotate((float)((-90.0f / 180) * Math.PI), new vec3(1, 0, 0));

            //jeep2 = new Model3D();
            //jeep2.LoadFile(projectPath + "\\ModelFiles\\jeep", 10, "jeep1.3ds");
            //jeep2.scalematrix = glm.scale(new mat4(1), new vec3(5, 5, 5));
            //jeep2.transmatrix = glm.translate(new mat4(1), new vec3(-80, 1, 180));
            //jeep2.rotmatrix = glm.rotate((float)((-90.0f / 180) * Math.PI), new vec3(1, 0, 0));

            //get location of specular and attenuation then send their values
            //get location of light position and send its value
            //setup the ambient light component.
            //setup the eye position.

            Gl.glEnable(Gl.GL_DEPTH_TEST);
            Gl.glDepthFunc(Gl.GL_LESS);
        }