Esempio n. 1
0
        public void Render(Transformation3D camera)
        {
            GL.Clear(ClearBufferMask.ColorBufferBit | ClearBufferMask.DepthBufferBit);

            var cam = camera.CalcLocalToWorldColumnMajorMatrix();

            plane.Draw(cam);
            visualSmoke.Render(cam);
            visualWaterfall.Render(cam);
            visualExplosion.Render(cam);
        }
        public void Render(IEnumerable <IBody> bodies, float time, Transformation3D camera)
        {
            GL.Enable(EnableCap.DepthTest);
            GL.Enable(EnableCap.Blend);
            GL.BlendFunc(BlendingFactor.SrcAlpha, BlendingFactor.OneMinusSrcAlpha);
            if (shaderProgram is null)
            {
                return;
            }
            var instancePositions = new List <Vector3>();
            var instanceScale     = new List <float>();

            foreach (var body in bodies)
            {
                instancePositions.Add(body.Location);
                instanceScale.Add((float)Math.Pow(body.Mass, 0.33f));
            }
            geometryBody.SetAttribute(shaderProgram.GetResourceLocation(ShaderResourceType.Attribute, "instancePosition"), instancePositions.ToArray(), VertexAttribPointerType.Float, 3, true);
            geometryBody.SetAttribute(shaderProgram.GetResourceLocation(ShaderResourceType.Attribute, "instanceScale"), instanceScale.ToArray(), VertexAttribPointerType.Float, 1, true);

            GL.Clear(ClearBufferMask.ColorBufferBit | ClearBufferMask.DepthBufferBit);
            shaderProgram.Activate();
            shaderProgram.Uniform("time", time);
            shaderProgram.Uniform("camera", camera.CalcLocalToWorldColumnMajorMatrix());
            geometryBody.Draw(instancePositions.Count);
            shaderProgram.Deactivate();

            floorShaderProgram.Activate();
            floorShaderProgram.Uniform("time", time);
            floorShaderProgram.Uniform("floorColor", new Vector4(0, .5f, .5f, 1f));
            floorShaderProgram.Uniform("camera", camera.CalcLocalToWorldColumnMajorMatrix());
            floor.Draw();

            floorShaderProgram.Uniform("floorColor", new Vector4(0, 0, 1, 0.5f));
            waterCube.Draw();
            floorShaderProgram.Deactivate();
            GL.Disable(EnableCap.Blend);
            GL.Disable(EnableCap.DepthTest);
        }
Esempio n. 3
0
        private void DrawObject(VAO geom, ITexture envMap, ITexture materialTex, Transformation3D camera, Vector3 cameraPosition)
        {
            shaderProgram.Activate();

            GL.ActiveTexture(TextureUnit.Texture0 + 0);
            envMap.Activate();
            shaderProgram.Uniform("envMap", 0);
            GL.ActiveTexture(TextureUnit.Texture0 + 1);
            materialTex.Activate();
            shaderProgram.Uniform("materialTex", 1);

            shaderProgram.Uniform("camera", camera.CalcLocalToWorldColumnMajorMatrix());
            shaderProgram.Uniform("cameraPosition", cameraPosition);

            geom.Draw();

            GL.ActiveTexture(TextureUnit.Texture0 + 0);
            envMap.Deactivate();
            GL.ActiveTexture(TextureUnit.Texture0 + 1);
            materialTex.Deactivate();

            shaderProgram.Deactivate();
        }