// We actually use our own Quad Data so ignore the input
        public void bindModelData(WorldObject worldObject)
        {
            GL.BindVertexArray(worldObject.mesh.vertexArrayObject);

            // Set the types of buffer data
            GL.BindBuffer(BufferTarget.ArrayBuffer, worldObject.mesh.vertexBufferObject);
            GL.VertexAttribPointer(positionLocation, 3, VertexAttribPointerType.Float, false, 0, 0);

            GL.BindBuffer(BufferTarget.ArrayBuffer, worldObject.mesh.normalBufferObject);
            GL.VertexAttribPointer(normalLocation, 3, VertexAttribPointerType.Float, false, 0, 0);

            GL.BindBuffer(BufferTarget.ElementArrayBuffer, worldObject.mesh.indexBufferObject);

            GL.BindBuffer(BufferTarget.ArrayBuffer, worldObject.mesh.texcoordsBuffer);
            GL.VertexAttribPointer(texcoordsLocation, 2, VertexAttribPointerType.Float, true, 0, 0);

            GL.BindVertexArray(0);
        }
Exemple #2
0
        // Render Objects into the ShadowMap
        public void render(WorldObject worldObject, Matrix4 viewMatrix)
        {
            // Activate the states for the buffers etc.
            GL.BindVertexArray(worldObject.mesh.vertexArrayObject);

            GL.BindTexture(TextureTarget.Texture2D, -1);

            // Enable the model data
            GL.EnableVertexAttribArray(positionLocation);
            GL.EnableVertexAttribArray(normalLocation);

            // Upload Parameters
            uploadParameters(worldObject.modelMatrix, viewMatrix);

            // Render Object
            GL.DrawElements(BeginMode.Triangles, worldObject.mesh.indices.Count, DrawElementsType.UnsignedInt, 0);

            // Clean Up
            GL.BindVertexArray(0);
            GL.DisableVertexAttribArray(positionLocation);
            GL.DisableVertexAttribArray(normalLocation);
        }
 // We actually use our own Quad Data so ignore the input
 public void bindModelData(WorldObject sun)
 {
     GL.BindVertexArray(vertexArrayObject);
     GL.BindBuffer(BufferTarget.ArrayBuffer, vbo_fbo_vertices);
     GL.VertexAttribPointer(
       positionLocation,  // attribute
       3,                  // number of elements per vertex, here (x,y,z)
       VertexAttribPointerType.Float,           // the type of each element
       false,           // take our values as-is
       0,                  // no extra data between each position
       0                   // offset of first element
     );
     GL.BindBuffer(BufferTarget.ArrayBuffer, tbo_fbo_texcoords);
     GL.VertexAttribPointer(
       texcoordsLocation,  // attribute
       2,                  // number of elements per vertex, here (x,y)
       VertexAttribPointerType.Float,           // the type of each element
       true,           // take our values as-is
       0,                  // no extra data between each position
       0                   // offset of first element
     );
     GL.BindVertexArray(0);
 }
        private void uploadParameters(WorldObject worldObject, Matrix4 viewMatrix, Matrix4 projectionMatrix, Matrix4 depthViewProjectionMatrix, Vector3 lightDirection)
        {
            // Matrices for Shader
            Matrix4 mv = worldObject.modelMatrix * viewMatrix;
            Matrix4 mvp = mv * projectionMatrix;
            Matrix4 mNormal = Utility.getNormalMatrix(mv);

            GL.UniformMatrix4(mvpLocation, false, ref mvp);
            GL.UniformMatrix4(viewModelLocation, false, ref mv);
            GL.UniformMatrix4(normalMatrixLocation, false, ref mNormal);

            // Set Light Direction
            GL.Uniform3(lightDirectionLocation, Vector3.Transform(lightDirection, viewMatrix.ClearTranslation()));

            // Compute the MVP matrix from the light's point of view (and add a bias)
            Matrix4 depthMVP = worldObject.modelMatrix * depthViewProjectionMatrix * biasMatrix;

            GL.UniformMatrix4(depthBiasMVPLocation, false, ref depthMVP);
            GL.Uniform1(shadowMapLocation, 0);
            GL.Uniform1(textureLocation, 1);

            GL.Uniform1(useStratifiedPoissonSamplingLocation, useStratifiedPoissonSampling);
            if(worldObject.mesh.isTextured == true)
                GL.Uniform1(useModelTextureLocation, 1f);
            else GL.Uniform1(useModelTextureLocation, 0f);

            // Phong
            GL.Uniform3(diffuseLocation, worldObject.diffuse);
            GL.Uniform3(ambientLocation, worldObject. ambient);
            GL.Uniform3(specularLocation, worldObject.specular);
            GL.Uniform1(shininessLocation, worldObject.shininess);
        }
        public void render(WorldObject worldObject, Matrix4 viewMatrix, Matrix4 projectionMatrix, Matrix4 depthViewProjectionMatrix, Vector3 lightDirection, int shadowMapTexture)
        {
            // Activate the states for the buffers etc.
            GL.BindVertexArray(worldObject.mesh.vertexArrayObject);

            GL.ActiveTexture(TextureUnit.Texture0);
            GL.BindTexture(TextureTarget.Texture2D, shadowMapTexture);

            GL.ActiveTexture(TextureUnit.Texture1);
            GL.BindTexture(TextureTarget.Texture2D, worldObject.mesh.textureID);

            // Enable the model data
            GL.EnableVertexAttribArray(positionLocation);
            GL.EnableVertexAttribArray(normalLocation);
            GL.EnableVertexAttribArray(texcoordsLocation);

            // Upload Parameters
            uploadParameters(worldObject, viewMatrix, projectionMatrix, depthViewProjectionMatrix, lightDirection);

            // Render Object
            GL.DrawElements(BeginMode.Triangles, worldObject.mesh.indices.Count, DrawElementsType.UnsignedInt, 0);

            // Clean Up
            GL.BindVertexArray(0);
            GL.BindTexture(TextureTarget.Texture2D, -1);
            GL.ActiveTexture(TextureUnit.Texture0);
            GL.BindTexture(TextureTarget.Texture2D, -1);
            GL.DisableVertexAttribArray(positionLocation);
            GL.DisableVertexAttribArray(normalLocation);
            GL.DisableVertexAttribArray(texcoordsLocation);
        }
Exemple #6
0
        protected override void OnLoad(EventArgs e)
        {
            base.OnLoad(e);

            inputManager = new InputManager(this, camera);

            phongShader = new PhongShader(FileManager.getMediaFile("phongVS.glsl"), FileManager.getMediaFile("phongFS.glsl"));
            postProcessShader = new PostProcessShader(FileManager.getMediaFile("postProcessVS.glsl"), FileManager.getMediaFile("postProcessFS.glsl"));
            volumetricLightingShader = new VolumetricLightingShader(FileManager.getMediaFile("volumetricLightingVS.glsl"), FileManager.getMediaFile("volumetricLightingFS.glsl"));
            blurShader = new PostProcessShader(FileManager.getMediaFile("gaussianBlurVS.glsl"), FileManager.getMediaFile("gaussianBlurFS.glsl"));
            blurShader2 = new PostProcessShader(FileManager.getMediaFile("gaussianBlurVS.glsl"), FileManager.getMediaFile("gaussianBlurFS.glsl"));
            shadowMapShader = new DepthMapShader(FileManager.getMediaFile("depthMapVS.glsl"), FileManager.getMediaFile("depthMapFS.glsl"));
            depthMapShader = new DepthMapShader(FileManager.getMediaFile("depthMapVS.glsl"), FileManager.getMediaFile("depthMapFS.glsl"), screenWidth, screenHeight);
            shadowMappingShader = new ShadowMappingShader(FileManager.getMediaFile("shadowMappingVS.glsl"), FileManager.getMediaFile("shadowMappingFS.glsl"));
            blackShader = new PhongShader(FileManager.getMediaFile("blackVS.glsl"), FileManager.getMediaFile("blackFS.glsl"));
            whiteShader = new PhongShader(FileManager.getMediaFile("whiteVS.glsl"), FileManager.getMediaFile("whiteFS.glsl"));

            // Load Models
            sun.loadModelFromFile("sun.3ds");
            sun.position = new Vector3(20f, 30f, -70f);
            sun.scale = new Vector3(2f);
            sun.update();

            monkey.loadModelFromFile("monkey.3ds");
            monkey.position = new Vector3(20f, 4f, 2f);
            monkey.update();
            monkey.diffuse = new Vector3(0.1f, 0.1f, 0.8f);
            monkey.ambient = new Vector3(0.05f, 0.05f, 0.4f);

            magicBox.loadModelFromFile("magicBox.3ds");
            magicBox.position = new Vector3(20f, 6f, 0f);
            magicBox.scale = new Vector3(5f);
            magicBox.update();
            magicBox.diffuse = new Vector3(0.2f, 0.2f, 0f);
            magicBox.ambient = new Vector3(0.1f, 0.1f, 0f);
            // No Specular for the magicBox
            magicBox.specular = new Vector3(0f);
            magicBox.shininess = 1f;

            //Load floor
            floor.loadModelFromFile("floor.3ds");
            floor.position = new Vector3(0f, 0f, -10f);
            // Scale the Floor (and the texCoords)
            floor.scale = new Vector3(1000f, 1f, 1000f);
            //floor.scale = new Vector3(0.05f, 0.05f, 0.05f);
               // floor.rotation = new Vector3(45, 0, 0);
             for (int i = 0; i < floor.mesh.textureCoordinates.Count; i++)
              floor.mesh.textureCoordinates[i] *= 200f;
             floor.mesh.updateTextureCoordinates();
            floor.update();
            // No Specular for floor
            floor.specular = new Vector3(0f);
            floor.shininess = 1f;

            //Load trees
            Random random = new Random();
            for (int x = 0; x < 2; x++)
            {
                for (int z = 0; z < 10; z++)
                {
                    WorldObject tree = new WorldObject();
                    tree.loadModelFromFile("tree.3ds");
                    tree.position = new Vector3((x * 10f) - 5f, 0f, -z * 6f);
                    tree.scale = new Vector3(2f);
                    tree.rotation = new Vector3(0f, (float)(random.NextDouble() * Math.PI * 2.0), 0f);
                    tree.update();
                    tree.diffuse = new Vector3(0.6f, 0.3f, 0f);
                    tree.ambient = new Vector3(0.3f, 0.15f, 0f);
                    trees.Add(tree);
                }
            }

            // Move initial Position of the Camera away from origin
            camera.Position += new Vector3(10f, 10f, 10f);

            // Hide Mouse Cursor
            CursorVisible = false;
        }