Exemplo n.º 1
0
    void OnMouseUp()
    {
        transform.localScale = new Vector3(1f, 1f, 1f);

        if (id == 1 && PlayerPrefs.GetString(Sphere1.gameObject.name) == "Open")
        {
            mainSphere.GetComponent <MeshRenderer>().material = Sphere1.GetComponent <MeshRenderer>().material;
        }
        else if (id == 2 && PlayerPrefs.GetString(Sphere2.gameObject.name) == "Open")
        {
            mainSphere.GetComponent <MeshRenderer>().material = Sphere2.GetComponent <MeshRenderer>().material;
        }
        else if (id == 3 && PlayerPrefs.GetString(Sphere3.gameObject.name) == "Open")
        {
            mainSphere.GetComponent <MeshRenderer>().material = Sphere3.GetComponent <MeshRenderer>().material;
        }
        else if (id == 4 && PlayerPrefs.GetString(Sphere4.gameObject.name) == "Open")
        {
            mainSphere.GetComponent <MeshRenderer>().material = Sphere4.GetComponent <MeshRenderer>().material;
        }
        else if (id == 5 && PlayerPrefs.GetString(Sphere5.gameObject.name) == "Open")
        {
            mainSphere.GetComponent <MeshRenderer>().material = Sphere5.GetComponent <MeshRenderer>().material;
        }
    }
Exemplo n.º 2
0
 private void Update()
 {
     if (Player.lose == false)
     {
         player.gameObject.GetComponent <Rigidbody2D>().velocity -= player.gameObject.GetComponent <Rigidbody2D>().velocity;
     }
     if (SelectNowSphere.id == 1 && PlayerPrefs.GetString(Sphere1.gameObject.name) == "Open")
     {
         mainSphere.GetComponent <MeshRenderer>().material = Sphere1.GetComponent <MeshRenderer>().material;
     }
     else if (SelectNowSphere.id == 2 && PlayerPrefs.GetString(Sphere2.gameObject.name) == "Open")
     {
         mainSphere.GetComponent <MeshRenderer>().material = Sphere2.GetComponent <MeshRenderer>().material;
     }
     else if (SelectNowSphere.id == 3 && PlayerPrefs.GetString(Sphere3.gameObject.name) == "Open")
     {
         mainSphere.GetComponent <MeshRenderer>().material = Sphere3.GetComponent <MeshRenderer>().material;
     }
     else if (SelectNowSphere.id == 4 && PlayerPrefs.GetString(Sphere4.gameObject.name) == "Open")
     {
         mainSphere.GetComponent <MeshRenderer>().material = Sphere4.GetComponent <MeshRenderer>().material;
     }
     else if (SelectNowSphere.id == 5 && PlayerPrefs.GetString(Sphere5.gameObject.name) == "Open")
     {
         mainSphere.GetComponent <MeshRenderer>().material = Sphere5.GetComponent <MeshRenderer>().material;
     }
 }
Exemplo n.º 3
0
        private void FormMain_Load(object sender, EventArgs e)
        {
            var position = new vec3(-0.2f, 0, 1) * 14;
            var center   = new vec3(0, 0, 0);
            var up       = new vec3(0, 1, 0);
            var camera   = new Camera(position, center, up, CameraType.Perspective, this.winGLCanvas1.Width, this.winGLCanvas1.Height);

            this.scene = new Scene(camera);
            var rootNode = new GroupNode();

            this.scene.RootNode = rootNode;
            {
                var sphere   = new Sphere2();//(1, 40, 80);
                var filename = Path.Combine(System.Windows.Forms.Application.StartupPath, "sphere2.obj_");
                sphere.DumpObjFile(filename, "sphere2");
                var          parser = new ObjVNFParser(false, true);
                ObjVNFResult result = parser.Parse(filename);
                if (result.Error != null)
                {
                    Console.WriteLine("Error: {0}", result.Error);
                }
                else
                {
                    ObjVNFMesh mesh  = result.Mesh;
                    var        model = new ObjVNF(mesh);
                    // render rows*column number of spheres with varying metallic/roughness values scaled by rows and columns respectively
                    for (int row = 0; row < nrRows; ++row)
                    {
                        for (int col = 0; col < nrColumns; ++col)
                        {
                            var node = PBRNode.Create(model, model.GetSize(),
                                                      ObjVNF.strPosition, ObjVNF.strTexCoord, ObjVNF.strNormal, ObjVNF.strTangent);
                            node.Metallic = (float)row / (float)nrRows;
                            // we clamp the roughness to 0.025 - 1.0 as perfectly smooth surfaces (roughness of 0.0) tend to look a bit off
                            // on direct lighting.
                            node.Roughness     = glm.clamp((float)col / (float)nrColumns, 0.05f, 1.0f);
                            node.WorldPosition = new vec3(
                                (col - (nrColumns / 2)) * spacing,
                                (row - (nrRows / 2)) * spacing,
                                0.0f);
                            rootNode.Children.Add(node);
                        }
                    }
                }
            }

            var list            = new ActionList();
            var transformAction = new TransformAction(scene);

            list.Add(transformAction);
            var renderAction = new RenderAction(scene);

            list.Add(renderAction);
            this.actionList = list;

            var manipulater = new FirstPerspectiveManipulater();

            manipulater.Bind(camera, this.winGLCanvas1);
        }
Exemplo n.º 4
0
 public void Reset()
 {
     V1    = 0f;
     V2    = 0f;
     Po1.x = x1i; Po2.x = x2i;
     Sphere1.GetComponent <Transform>().position = Po1;
     Sphere2.GetComponent <Transform>().position = Po2;
 }
Exemplo n.º 5
0
 // Start is called before the first frame update
 void Start()
 {
     Sphere1 = GameObject.Find("Sphere_A");
     Sphere2 = GameObject.Find("Sphere_B");
     Po1     = Sphere1.GetComponent <Transform>().position;
     Po2     = Sphere2.GetComponent <Transform>().position;
     R       = 10f;
     x1i     = Po1.x; x2i = Po2.x;
     V1      = 0;
     V2      = 0;
 }
Exemplo n.º 6
0
    void OnMouseUp()
    {
        BuySound.Play();
        transform.localScale = new Vector3(1f, 1f, 1f);

        if (PlayerPrefs.GetInt("Coins") >= 40 && SelectNowSphere.id == 1)
        {
            PlayerPrefs.SetString(Sphere1.GetComponent <SelectSphere>().nowSphere, "Open");

            mainSphere.GetComponent <MeshRenderer>().material = Sphere1.GetComponent <MeshRenderer>().material;

            PlayerPrefs.SetInt("Coins", PlayerPrefs.GetInt("Coins") - 40);
            selectBtn.SetActive(true);
            gameObject.SetActive(false);
        }
        else if (PlayerPrefs.GetInt("Coins") >= 150 && SelectNowSphere.id == 2)
        {
            PlayerPrefs.SetString(Sphere2.GetComponent <SelectSphere>().nowSphere, "Open");
            mainSphere.GetComponent <MeshRenderer>().material = Sphere2.GetComponent <MeshRenderer>().material;

            PlayerPrefs.SetInt("Coins", PlayerPrefs.GetInt("Coins") - 150);
            selectBtn.SetActive(true);
            gameObject.SetActive(false);
        }
        else if (PlayerPrefs.GetInt("Coins") >= 150 && SelectNowSphere.id == 3)
        {
            PlayerPrefs.SetString(Sphere3.GetComponent <SelectSphere>().nowSphere, "Open");
            mainSphere.GetComponent <MeshRenderer>().material = Sphere3.GetComponent <MeshRenderer>().material;

            PlayerPrefs.SetInt("Coins", PlayerPrefs.GetInt("Coins") - 150);
            selectBtn.SetActive(true);
            gameObject.SetActive(false);
        }
        else if (PlayerPrefs.GetInt("Coins") >= 150 && SelectNowSphere.id == 4)
        {
            PlayerPrefs.SetString(Sphere4.GetComponent <SelectSphere>().nowSphere, "Open");
            mainSphere.GetComponent <MeshRenderer>().material = Sphere4.GetComponent <MeshRenderer>().material;

            PlayerPrefs.SetInt("Coins", PlayerPrefs.GetInt("Coins") - 150);
            selectBtn.SetActive(true);
            gameObject.SetActive(false);
        }
        else if (PlayerPrefs.GetInt("Coins") >= 150 && SelectNowSphere.id == 5)
        {
            PlayerPrefs.SetString(Sphere5.GetComponent <SelectSphere>().nowSphere, "Open");
            mainSphere.GetComponent <MeshRenderer>().material = Sphere5.GetComponent <MeshRenderer>().material;
            // PlayerPrefs.SetString("Now", Sphere5.GetComponent<SelectSphere>().nowSphere);
            PlayerPrefs.SetInt("Coins", PlayerPrefs.GetInt("Coins") - 150);
            selectBtn.SetActive(true);
            gameObject.SetActive(false);
        }
    }
Exemplo n.º 7
0
    // Update is called once per frame
    void Update()
    {
        if (Mathf.Abs(Po1.x - Po2.x) <= (R))
        {
            V1 = Vc1; V2 = Vc2;
        }


        Po1.x = Po1.x + Time.fixedDeltaTime * V1;
        Po2.x = Po2.x + Time.fixedDeltaTime * V2;


        Sphere1.GetComponent <Transform>().position = Po1;
        Sphere2.GetComponent <Transform>().position = Po2;
    }
Exemplo n.º 8
0
    void Update()
    {
        PosEsf1 = gameObject.GetComponent <Transform>().position;
        if (Input.GetKey(KeyCode.UpArrow) && (PosEsf1.z + Rad) < LimU)
        {
            if (Mathf.Abs(Mathf.Sqrt(Mathf.Pow((PosEsf1.x - PosEsf2.x), 2) + Mathf.Pow((PosEsf1.z - PosEsf2.z), 2))) > (Rad2)) //si las esferas no se tocan
            {
                V1z = V1z + 1f;
            }
            else //si si se tocan
            {
                if (LimU >= (PosEsf2.z + Rad) && (PosEsf2.z > PosEsf1.z)) //revisar si no se tocan contra pared
                {
                    V2z       = (((1 + e) * M1) / (M1 + M2)) * V1z;
                    PosEsf2.z = PosEsf2.z + Time.fixedDeltaTime * V2z;

                    PosEsf1.z = PosEsf1.z + 1f;
                }


                if (PosEsf2.z < PosEsf1.z)
                {
                    PosEsf1.z = PosEsf1.z + 1f;
                    V1z       = V1z + 1f;
                }
            }
        }

        if (Input.GetKey(KeyCode.DownArrow) && (PosEsf1.z - Rad) > LimD)
        {
            if (Mathf.Abs(Mathf.Sqrt(Mathf.Pow((PosEsf1.x - PosEsf2.x), 2) + Mathf.Pow((PosEsf1.z - PosEsf2.z), 2))) > (Rad2))
            {
                PosEsf1.z = PosEsf1.z - 1f;
            }
            else
            {
                if (LimD <= (PosEsf2.z - Rad) && (PosEsf2.z < PosEsf1.z))
                {
                    PosEsf2.z = PosEsf2.z - 1f;
                    PosEsf1.z = PosEsf1.z - 1f;
                }
                if (PosEsf2.z > PosEsf1.z)
                {
                    PosEsf1.z = PosEsf1.z - 1f;
                }
            }
        }

        if (Input.GetKey(KeyCode.RightArrow) && (PosEsf1.x + Rad) < LimR)
        {
            if (Mathf.Abs(Mathf.Sqrt(Mathf.Pow((PosEsf1.z - PosEsf2.z), 2) + Mathf.Pow((PosEsf1.x - PosEsf2.x), 2))) > (Rad2))
            {
                PosEsf1.x = PosEsf1.x + 0.05f;
            }
            else
            {
                if (LimR >= (PosEsf2.x + Rad) && (PosEsf2.x > PosEsf1.x))
                {
                    PosEsf2.x = PosEsf2.x + 0.05f;
                    PosEsf1.x = PosEsf1.x + 0.05f;
                }
                if (PosEsf2.x < PosEsf1.x)
                {
                    PosEsf1.x = PosEsf1.x + 0.05f;
                }
            }
        }
        if (Input.GetKey(KeyCode.LeftArrow) && (PosEsf1.x - Rad) > LimL)
        {
            if (Mathf.Abs(Mathf.Sqrt(Mathf.Pow((PosEsf1.z - PosEsf2.z), 2) + Mathf.Pow((PosEsf1.x - PosEsf2.x), 2))) > (Rad2))
            {
                PosEsf1.x = PosEsf1.x - 0.05f;
            }
            else
            {
                if (LimL <= (PosEsf2.x - Rad) && (PosEsf2.x < PosEsf1.x))
                {
                    PosEsf2.x = PosEsf2.x - 0.05f;
                    PosEsf1.x = PosEsf1.x - 0.05f;
                }
                if (PosEsf2.x > PosEsf1.x)
                {
                    PosEsf1.x = PosEsf1.x - 0.05f;
                }
            }
        }

        if (Input.GetKey(KeyCode.W))
        {
            LimU = LimU + 0.05f;
            LimD = LimD + 0.05f;
            if (LimD >= (PosEsf1.z - Rad))
            {
                PosEsf1.z = LimD + Rad;
                if (Mathf.Abs(Mathf.Sqrt(Mathf.Pow((PosEsf1.z - PosEsf2.z), 2) + Mathf.Pow((PosEsf1.x - PosEsf2.x), 2))) <= (Rad2))
                {
                    PosEsf2.z = PosEsf1.z + Rad2;
                }
            }
            if (LimD >= (PosEsf2.z - Rad))
            {
                PosEsf2.z = LimD + Rad;
                if (Mathf.Abs(Mathf.Sqrt(Mathf.Pow((PosEsf1.z - PosEsf2.z), 2) + Mathf.Pow((PosEsf1.x - PosEsf2.x), 2))) <= (Rad2))
                {
                    PosEsf1.z = PosEsf2.z + Rad2;
                }
            }
        }
        if (Input.GetKey(KeyCode.S))
        {
            LimU = LimU - 0.05f;
            LimD = LimD - 0.05f;
            if (LimU <= (PosEsf1.z + Rad))
            {
                PosEsf1.z = LimU - Rad;
                if (Mathf.Abs(Mathf.Sqrt(Mathf.Pow((PosEsf1.z - PosEsf2.z), 2) + Mathf.Pow((PosEsf1.x - PosEsf2.x), 2))) <= (Rad2))
                {
                    PosEsf2.z = PosEsf1.z - Rad2;
                }
            }
            if (LimU <= (PosEsf2.z + Rad))
            {
                PosEsf2.z = LimU - Rad;
                if (Mathf.Abs(Mathf.Sqrt(Mathf.Pow((PosEsf1.z - PosEsf2.z), 2) + Mathf.Pow((PosEsf1.x - PosEsf2.x), 2))) <= (Rad2))
                {
                    PosEsf1.z = PosEsf2.z - Rad2;
                }
            }
        }
        if (Input.GetKey(KeyCode.D))
        {
            LimR = LimR + 0.05f;
            LimL = LimL + 0.05f;
            if (LimL >= (PosEsf1.x - Rad))
            {
                PosEsf1.x = LimL + Rad;
                if (Mathf.Abs(Mathf.Sqrt(Mathf.Pow((PosEsf1.z - PosEsf2.z), 2) + Mathf.Pow((PosEsf1.x - PosEsf2.x), 2))) <= (Rad2))
                {
                    PosEsf2.x = PosEsf1.x + Rad2;
                }
            }
            if (LimL >= (PosEsf2.x - Rad))
            {
                PosEsf2.x = LimL + Rad;
                if (Mathf.Abs(Mathf.Sqrt(Mathf.Pow((PosEsf1.z - PosEsf2.z), 2) + Mathf.Pow((PosEsf1.x - PosEsf2.x), 2))) <= (Rad2))
                {
                    PosEsf1.x = PosEsf2.x + Rad2;
                }
            }
        }

        if (Input.GetKey(KeyCode.A))
        {
            LimR = LimR - 0.05f;
            LimL = LimL - 0.05f;
            if (LimR <= (PosEsf1.x + Rad))
            {
                PosEsf1.x = LimR - Rad;
                if (Mathf.Abs(Mathf.Sqrt(Mathf.Pow((PosEsf1.z - PosEsf2.z), 2) + Mathf.Pow((PosEsf1.x - PosEsf2.x), 2))) <= (Rad2))
                {
                    PosEsf2.x = PosEsf1.x - Rad2;
                }
            }
            if (LimR <= (PosEsf2.x + Rad))
            {
                PosEsf2.x = LimR - Rad;
                if (Mathf.Abs(Mathf.Sqrt(Mathf.Pow((PosEsf1.z - PosEsf2.z), 2) + Mathf.Pow((PosEsf1.x - PosEsf2.x), 2))) <= (Rad2))
                {
                    PosEsf1.x = PosEsf2.x - Rad2;
                }
            }
        }


        gameObject.GetComponent <Transform>().position = PosEsf1;



        Sphere2.GetComponent <Transform>().position = PosEsf2;
    }
Exemplo n.º 9
0
 void Start()
 {
     Sphere2 = GameObject.Find("Esf2");
     PosEsf2 = Sphere2.GetComponent <Transform>().position;
     V1x     = 0; V1z = 0; V2x = 0; V2z = 0; M1 = 1; M2 = 1;
 }
Exemplo n.º 10
0
        private void FormMain_Load(object sender, EventArgs e)
        {
            var position = new vec3(-0.2f, 0, 1) * 14;
            var center   = new vec3(0, 0, 0);
            var up       = new vec3(0, 1, 0);
            var camera   = new Camera(position, center, up, CameraType.Perspective, this.winGLCanvas1.Width, this.winGLCanvas1.Height);

            this.scene = new Scene(camera);
            var rootNode = new GroupNode();

            this.scene.RootNode = rootNode;

            Texture albedoMap    = GetTexture(@"Textures\albedo.png", 0);
            Texture normalMap    = GetTexture(@"Textures\normal.png", 1);
            Texture metallicMap  = GetTexture(@"Textures\metallic.png", 2);
            Texture roughnessMap = GetTexture(@"Textures\roughness.png", 3);
            Texture aoMap        = GetTexture(@"Textures\ao.png", 4);

            {
                var sphere   = new Sphere2(); // Sphere(1, 40, 80);
                var filename = Path.Combine(System.Windows.Forms.Application.StartupPath, "sphere2.obj_");
                sphere.DumpObjFile(filename, "sphere2");
                var          parser = new ObjVNFParser(false, true);
                ObjVNFResult result = parser.Parse(filename);
                if (result.Error != null)
                {
                    Console.WriteLine("Error: {0}", result.Error);
                }
                else
                {
                    ObjVNFMesh mesh  = result.Mesh;
                    var        model = new ObjVNF(mesh);
                    // render rows*column number of spheres with varying metallic/roughness values scaled by rows and columns respectively
                    for (int row = 0; row < nrRows; ++row)
                    {
                        for (int col = 0; col < nrColumns; ++col)
                        {
                            var node = PBRNode.Create(model, model.GetSize(),
                                                      ObjVNF.strPosition, ObjVNF.strTexCoord, ObjVNF.strNormal);
                            node.AlbedoMap     = albedoMap;
                            node.NormalMap     = normalMap;
                            node.MetallicMap   = metallicMap;
                            node.RoughnessMap  = roughnessMap;
                            node.AOMap         = aoMap;
                            node.WorldPosition = new vec3(
                                (col - (nrColumns / 2)) * spacing,
                                (row - (nrRows / 2)) * spacing,
                                0.0f);
                            rootNode.Children.Add(node);
                        }
                    }
                }
            }

            var list            = new ActionList();
            var transformAction = new TransformAction(scene);

            list.Add(transformAction);
            var renderAction = new RenderAction(scene);

            list.Add(renderAction);
            this.actionList = list;

            var manipulater = new FirstPerspectiveManipulater();

            manipulater.Bind(camera, this.winGLCanvas1);
        }
Exemplo n.º 11
0
        private void FormMain_Load(object sender, EventArgs e)
        {
            var position = new vec3(9.3968f, -0.7408f, 2.9288f);
            var center   = new vec3(-0.0710f, -2.2829f, 1.3023f);
            var up       = new vec3(0, 1, 0);
            var camera   = new Camera(position, center, up, CameraType.Perspective, this.winGLCanvas1.Width, this.winGLCanvas1.Height);

            this.scene = new Scene(camera);
            var rootNode = new GroupNode();

            this.scene.RootNode = rootNode;

            Texture texBRDF = LoadBRDFTexture();

            texBRDF.TextureUnitIndex = 2;
            Texture prefilterMap = LoadPrefilterMap();

            prefilterMap.TextureUnitIndex = 1;
            Texture irradianceMap = LoadIrradianceMap();

            irradianceMap.TextureUnitIndex = 0;
            Texture envCubemap = LoadEnvCubeMap();
            Texture texHDR     = LoadHDRTexture("environment.hdr");

            {
                var node = CubemapNode.Create(envCubemap, texHDR);
                rootNode.Children.Add(node);
            }
            {
                var node = IrradianceNode.Create(irradianceMap, envCubemap);
                rootNode.Children.Add(node);
            }
            {
                var node = PrefilterNode.Create(prefilterMap, envCubemap);
                rootNode.Children.Add(node);
            }
            {
                var node = BRDFNode.Create(texBRDF);
                rootNode.Children.Add(node);
            }
            {
                var textureGroups = new string[] { "cerberus", "cerberus", "gold", "grass", "plastic", "rock", "rusted_iron", "wall", "wood" };
                var models        = new ObjVNF[textureGroups.Length];
                {
                    var          filename = Path.Combine(System.Windows.Forms.Application.StartupPath, "cerberus.obj_");
                    var          parser   = new ObjVNFParser(false, false);
                    ObjVNFResult result   = parser.Parse(filename);
                    if (result.Error != null)
                    {
                        MessageBox.Show(string.Format("Error: {0}", result.Error));
                        return;
                    }
                    ObjVNFMesh mesh = result.Mesh;
                    // scale it to 0.1 percent.
                    for (int i = 0; i < mesh.vertexes.Length; i++)
                    {
                        mesh.vertexes[i] = mesh.vertexes[i] / 10;
                    }
                    //// Dump texture coordinates' layout.
                    //{
                    //    vec2[] texCoords = mesh.texCoords;
                    //    int polygon = (mesh.faces[0] is ObjVNFTriangle) ? 3 : 4;
                    //    int index = 0;
                    //    var indices = new uint[polygon * mesh.faces.Length];
                    //    foreach (var face in mesh.faces) {
                    //        foreach (var vertexIndex in face.VertexIndexes()) {
                    //            indices[index++] = vertexIndex;
                    //        }
                    //    }
                    //    var bmp = TexCoordAnalyzer.DumpLines(texCoords, indices, 1024);
                    //    bmp.Save("cerberus.texCoords.png");
                    //}
                    var model = new ObjVNF(mesh);
                    models[0] = model;
                }
                {
                    var sphere   = new Sphere2();//(1, 40, 80);
                    var filename = Path.Combine(System.Windows.Forms.Application.StartupPath, "sphere2.obj_");
                    sphere.DumpObjFile(filename, "sphere2");
                    var          parser = new ObjVNFParser(false, true);
                    ObjVNFResult result = parser.Parse(filename);
                    if (result.Error != null)
                    {
                        MessageBox.Show(string.Format("Error: {0}", result.Error));
                        return;
                    }
                    ObjVNFMesh mesh  = result.Mesh;
                    var        model = new ObjVNF(mesh);
                    for (int i = 1; i < textureGroups.Length; i++)
                    {
                        models[i] = model;
                    }
                }

                for (int i = 0; i < textureGroups.Length; i++)
                {
                    ObjVNF model = models[i];
                    string group = textureGroups[i];
                    var    node  = PBRNode.Create(model, model.GetSize(),
                                                  ObjVNF.strPosition, ObjVNF.strTexCoord, ObjVNF.strNormal);
                    node.IrradianceMap = irradianceMap;
                    node.PrefilterMap  = prefilterMap;
                    node.texBRDF       = texBRDF;
                    Texture albedo = GetTexture(string.Format(@"Textures\{0}\albedo.png", group), 3);
                    node.AlbedoMap = albedo;
                    Texture ao = GetTexture(string.Format(@"Textures\{0}\ao.png", group), 4);
                    node.AOMap = ao;
                    Texture metallic = GetTexture(string.Format(@"Textures\{0}\metallic.png", group), 5);
                    node.MetallicMap = metallic;
                    Texture normal = GetTexture(string.Format(@"Textures\{0}\normal.png", group), 6);
                    node.NormalMap = normal;
                    Texture roughness = GetTexture(string.Format(@"Textures\{0}\roughness.png", group), 7);
                    node.RoughnessMap = roughness;
                    if (i == 0)
                    {
                        node.WorldPosition = new vec3(0, -5, 0);
                    }
                    else
                    {
                        node.WorldPosition = new vec3(
                            0.0f,
                            0.0f,
                            ((textureGroups.Length / 2.0f) - i) * spacing);
                    }
                    rootNode.Children.Add(node);
                }
            }
            {
                var backgroundNode = BackgroundNode.Create(envCubemap);
                rootNode.Children.Add(backgroundNode);
            }

            var list            = new ActionList();
            var transformAction = new TransformAction(scene);

            list.Add(transformAction);
            var renderAction = new RenderAction(scene);

            list.Add(renderAction);
            this.actionList = list;

            var manipulater = new FirstPerspectiveManipulater();

            manipulater.Bind(camera, this.winGLCanvas1);
        }