示例#1
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);
        }
示例#2
0
 public void ShaderChanged(string name, Shader shader)
 {
     if (ShaderName == name)
     {
         this.shader = shader;
         if (ReferenceEquals(shader, null))
         {
             return;
         }
         Mesh mesh   = Meshes.CreateQuad(10, 10, 10, 10);
         var  sphere = Meshes.CreateSphere(0.5f, 2);
         sphere.SetConstantUV(new System.Numerics.Vector2(0.5f, 0.5f));
         var xform = new Transformation();
         xform.TranslateLocal(0, 2, -2);
         mesh.Add(sphere.Transform(xform));
         xform.TranslateGlobal(0, 0, 2);
         mesh.Add(sphere.Transform(xform));
         xform.TranslateGlobal(2, 0, -1);
         mesh.Add(sphere.Transform(xform));
         geometry = VAOLoader.FromMesh(mesh, shader);
     }
     else if (ShaderDepthName == name)
     {
         this.shaderDepth = shader;
         if (ReferenceEquals(shaderDepth, null))
         {
             return;
         }
         //todo: radeon cards make errors with geometry bound to one shader and use in other shaders because of binding id changes
     }
 }
示例#3
0
        public VisualPlane()
        {
            var sVertex   = Encoding.UTF8.GetString(Resourcen.plane_vert);
            var sFragment = Encoding.UTF8.GetString(Resourcen.plane_frag);

            shdPlane = ShaderLoader.FromStrings(sVertex, sFragment);
            var mesh = Meshes.CreateQuad(2, 2, 1, 1);

            plane = VAOLoader.FromMesh(mesh, shdPlane);
        }
示例#4
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);
        }