Beispiel #1
0
        public void ShaderChanged(string name, Shader shader)
        {
            if (ShaderName != name)
            {
                return;
            }
            this.shader = shader;
            if (ReferenceEquals(shader, null))
            {
                return;
            }
            Mesh mesh = Obj2Mesh.FromObj(Resourcen.suzanne);

            geometry = VAOLoader.FromMesh(mesh, shader);

            //per instance attributes
            var          rnd               = new Random(12);
            Func <float> Rnd01             = () => (float)rnd.NextDouble();
            Func <float> RndCoord          = () => (Rnd01() - 0.5f) * 35.0f;
            var          instancePositions = new Vector3[particelCount];

            for (int i = 0; i < particelCount; ++i)
            {
                instancePositions[i] = new Vector3(RndCoord(), RndCoord(), RndCoord());
            }
            geometry.SetAttribute(shader.GetAttributeLocation("instancePosition"), instancePositions, VertexAttribPointerType.Float, 3, true);
        }
Beispiel #2
0
        public MainVisual()
        {
            Camera.FarClip  = 50f;
            Camera.Distance = 4f;
            Camera.FovY     = 90f;

            suzanne.BackfaceCulling = true;
            suzanne.SetInputTexture(Resources.TextureDiffuse);
            suzanne.UpdateMeshShader(Obj2Mesh.FromObj(Resourcen.suzanne), Resources.ShaderDefault);
            suzanne.ZBufferTest = true;

            copyQuad.BackfaceCulling = false;
            copyQuad.SetInputTexture("tex", imageBase);
            copyQuad.UpdateMeshShader(null, Resources.ShaderCopy);
            copyQuad.ZBufferTest = false;

            var delta      = 3f;
            var extend     = 10f * delta;
            var translates = new List <Vector3>();

            for (float x = -extend; x <= extend; x += delta)
            {
                for (float y = -extend; y <= extend; y += delta)
                {
                    for (float z = -extend; z <= extend; z += delta)
                    {
                        translates.Add(new Vector3(x, y, z));
                    }
                }
            }
            suzanne.UpdateInstanceAttribute("translate", translates.ToArray());
            suzanne.InstanceCount = translates.Count;
        }
Beispiel #3
0
        private void UpdateGeometry(Shader shader)
        {
            Mesh mesh     = new Mesh();
            var  roomSize = 8;
            var  plane    = Meshes.CreateQuad(roomSize, roomSize, 2, 2);
            var  xform    = new Transformation();

            xform.TranslateGlobal(0, -roomSize / 2, 0);
            mesh.Add(plane.Transform(xform));
            xform.RotateZGlobal(90f);
            mesh.Add(plane.Transform(xform));
            xform.RotateZGlobal(90f);
            mesh.Add(plane.Transform(xform));
            xform.RotateZGlobal(90f);
            mesh.Add(plane.Transform(xform));
            xform.RotateYGlobal(90f);
            mesh.Add(plane.Transform(xform));
            xform.RotateYGlobal(180f);
            mesh.Add(plane.Transform(xform));

            var sphere = Meshes.CreateSphere(1);

            mesh.Add(sphere);
            var suzanne = Obj2Mesh.FromObj(Resourcen.suzanne);

            mesh.Add(suzanne.Transform(System.Numerics.Matrix4x4.CreateTranslation(2, 2, -2)));
            geometry = VAOLoader.FromMesh(mesh, shader);
        }
Beispiel #4
0
        private void UpdateMesh(Shader shader)
        {
            Mesh mesh = Obj2Mesh.FromObj(Resourcen.suzanne);

            geometry = VAOLoader.FromMesh(mesh, shader);

            //per instance attributes
            var          rnd               = new Random(12);
            Func <float> Rnd01             = () => (float)rnd.NextDouble();
            Func <float> RndCoord          = () => (Rnd01() - 0.5f) * 8.0f;
            var          instancePositions = new Vector3[particelCount];

            for (int i = 0; i < particelCount; ++i)
            {
                instancePositions[i] = new Vector3(RndCoord(), RndCoord(), RndCoord());
            }
            geometry.SetAttribute(shader.GetAttributeLocation("instancePosition"), instancePositions, VertexAttribPointerType.Float, 3, true);

            Func <float> RndSpeed       = () => (Rnd01() - 0.5f);
            var          instanceSpeeds = new Vector3[particelCount];

            for (int i = 0; i < particelCount; ++i)
            {
                instanceSpeeds[i] = new Vector3(RndSpeed(), RndSpeed(), RndSpeed());
            }
            geometry.SetAttribute(shader.GetAttributeLocation("instanceSpeed"), instanceSpeeds, VertexAttribPointerType.Float, 3, true);
        }
Beispiel #5
0
        private void UpdateGeometry(Shader shader)
        {
            Mesh mesh = new Mesh();

            //mesh.Add(Meshes.CreateSphere(.7f, 3));
            mesh.Add(Obj2Mesh.FromObj(Resourcen.suzanne));
            geometry = VAOLoader.FromMesh(mesh, shader);
        }
Beispiel #6
0
        private void UpdateGeometry(Shader shader)
        {
            var mesh   = new Mesh();
            var sphere = Meshes.CreateSphere(1, 4);

            mesh.Add(sphere);
            var suzanne = Obj2Mesh.FromObj(Resourcen.suzanne);

            mesh.Add(suzanne.Transform(System.Numerics.Matrix4x4.CreateTranslation(2, 2, -2)));
            geometry = VAOLoader.FromMesh(mesh, shader);
        }
Beispiel #7
0
        public void ShaderChanged(string name, Shader shader)
        {
            if (ShaderName != name)
            {
                return;
            }
            this.shader = shader;
            if (ReferenceEquals(shader, null))
            {
                return;
            }
            Mesh mesh = Obj2Mesh.FromObj(Resourcen.suzanne);

            geometry = VAOLoader.FromMesh(mesh, shader);
        }
        public FileDrawable(string fileName, RenderDevice renderer)
        {
            byte[]      bytes = File.ReadAllBytes(fileName);
            DefaultMesh mesh  = Obj2Mesh.FromObj(bytes);

            indices = renderer.CopyToVideoRAM(mesh.IDs.ToArray());
            List <Vector3> positions = mesh.Position;
            List <Vector3> normals   = mesh.Normal;

            attributePosition = renderer.CopyToVideoRAM(positions.ToArray());

            var normalsAsColors = normals.Select(n => new Vector4(n, 1));

            attributeColor = renderer.CopyToVideoRAM(normalsAsColors.ToArray());
        }
Beispiel #9
0
        public MainVisual()
        {
            const string path      = "../../";
            const string pathMedia = path + "media/";

            shader = ShaderLoader.FromFiles(path + "vertex.glsl", path + "fragment.glsl");

            //load geometry
            Mesh mesh = Obj2Mesh.FromObj(pathMedia + "suzanne.obj");

            geometry.SetAttribute(shader.GetAttributeLocation("position"), mesh.positions.ToArray(), VertexAttribPointerType.Float, 3);
            geometry.SetAttribute(shader.GetAttributeLocation("normal"), mesh.normals.ToArray(), VertexAttribPointerType.Float, 3);
            //geometry.SetAttribute(shader.GetAttributeLocation("uv"), mesh.uvs.ToArray(), VertexAttribPointerType.Float, 2);
            geometry.SetID(mesh.ids.ToArray(), PrimitiveType.Triangles);

            GL.PolygonMode(MaterialFace.FrontAndBack, PolygonMode.Line);             //draw wireframe

            //texDiffuse = TextureLoader.FromFile(pathMedia + "capsule0.jpg");
        }
Beispiel #10
0
        public void ShaderChanged(string name, Shader shader)
        {
            if (ShaderName != name)
            {
                return;
            }
            this.shader = shader;
            if (ReferenceEquals(shader, null))
            {
                return;
            }
            Mesh mesh = Obj2Mesh.FromObj(Resourcen.suzanne);

            geometryBody = VAOLoader.FromMesh(mesh, shader);

            var plane = Meshes.CreateQuad(100, 100, 10, 10);
            var xForm = new Transformation();

            xForm.TranslateLocal(0, -20, 0);
            geometryPlane = VAOLoader.FromMesh(plane.Transform(xForm), shader);
            //for AMD graphics cards
            geometryPlane.SetAttribute(shader.GetAttributeLocation("instancePosition"), new Vector3[] { Vector3.Zero }, VertexAttribPointerType.Float, 3, true);
            geometryPlane.SetAttribute(shader.GetAttributeLocation("instanceScale"), new float[] { 1 }, VertexAttribPointerType.Float, 1, true);
        }
 /// <summary>
 /// Meshes the specified resources.
 /// </summary>
 /// <param name="resources">The resources.</param>
 /// <returns></returns>
 /// <exception cref="ArgumentException">No elements</exception>
 public static DefaultMesh DefaultMesh(IEnumerable <NamedStream> resources)
 {
     return(Obj2Mesh.FromObj(ByteBuffer(resources)));
 }
Beispiel #12
0
        public void ShaderChanged(string name, Shader shader)
        {
            if (ShaderName == name)
            {
                this.shaderObject = shader;
                if (ReferenceEquals(shader, null))
                {
                    return;
                }

                // cloud
                // cloud needs to be translated higher to "get" the (beginning) light from below
                Mesh cloudMesh = Obj2Mesh.FromObj(Resourcen.cloud);
                this.cloud = VAOLoader.FromMesh(cloudMesh, shader);
                // table
                Mesh tableClothMesh = Obj2Mesh.FromObj(Resourcen.tableCloth);
                this.tableCloth = VAOLoader.FromMesh(tableClothMesh, shader);
                // table top
                Mesh tableMesh = Obj2Mesh.FromObj(Resourcen.table);
                this.table = VAOLoader.FromMesh(tableMesh, shader);
                // candle
                Mesh candleMesh = Obj2Mesh.FromObj(Resourcen.candle);
                this.candle = VAOLoader.FromMesh(candleMesh, shader);
                // plate
                Mesh plateMesh = Obj2Mesh.FromObj(Resourcen.plate);
                this.plate = VAOLoader.FromMesh(plateMesh, shader);
                // grape plate
                var xform = new Transformation();
                xform.ScaleGlobal(new System.Numerics.Vector3(.8f));
                Mesh grapePlateMesh = Obj2Mesh.FromObj(Resourcen.plate);
                this.grapePlate = VAOLoader.FromMesh(grapePlateMesh.Transform(xform), shader);
                // wine bottle
                Mesh wineBottleMesh = Obj2Mesh.FromObj(Resourcen.wineBottle);
                this.wineBottle = VAOLoader.FromMesh(wineBottleMesh, shader);
                // wine bottle label
                Mesh wineBottleLabelMesh = Obj2Mesh.FromObj(Resourcen.wineBottleLabel);
                this.wineBottleLabel = VAOLoader.FromMesh(wineBottleLabelMesh, shader);
                // wine bottle shutter
                Mesh wineBottleShutterMesh = Obj2Mesh.FromObj(Resourcen.wineBottleShutter);
                this.wineBottleShutter = VAOLoader.FromMesh(wineBottleShutterMesh, shader);
                // grapes
                Mesh grapesMesh = Obj2Mesh.FromObj(Resourcen.grapes);
                this.grapes = VAOLoader.FromMesh(grapesMesh, shader);
                // knife left
                Mesh knifeLeftMesh = Obj2Mesh.FromObj(Resourcen.knife);
                this.knifeLeft = VAOLoader.FromMesh(knifeLeftMesh, shader);
                // knife right
                var xform_ = new Transformation();
                xform_.RotateYGlobal(180f);
                Mesh knifeRightMesh = Obj2Mesh.FromObj(Resourcen.knife);
                this.knifeRight = VAOLoader.FromMesh(knifeRightMesh.Transform(xform_), shader);
                // fork left
                Mesh forkLeftMesh = Obj2Mesh.FromObj(Resourcen.fork);
                this.forkLeft = VAOLoader.FromMesh(forkLeftMesh, shader);
                // fork right
                Mesh forkRightMesh = Obj2Mesh.FromObj(Resourcen.fork);
                this.forkRight = VAOLoader.FromMesh(forkRightMesh.Transform(xform_), shader);
                // environment sphere
                var sphere    = Meshes.CreateSphere(6, 4);
                var envSphere = sphere.SwitchTriangleMeshWinding();
                this.environment = VAOLoader.FromMesh(envSphere, shader);
            }
            else if (ShaderShadowName == name)
            {
                this.shaderShadow = shader;
                if (ReferenceEquals(shaderObject, null))
                {
                    return;
                }
            }
        }