Exemplo n.º 1
0
        public INode CreateTree(Vector3 position)
        {
            TriangleMesh sphereMesh = new TriangleMesh();

            TriangleMeshFactory.CreateSphere(sphereMesh, 1.0f, sphereResolution);
            TriangleMeshNode sphereNode = new TriangleMeshNode(sphereMesh);

            sphereNode.ShowNormals = false;
            sphereNode.SetColor(Color.DarkGreen);
            ScaleNode sphereScale = new ScaleNode(new Vector3(treeSize / 1.5f, treeSize / 1.5f, treeSize / 1.5f));

            sphereScale.AddChild(sphereNode);
            TranslationNode sphereTranslation = new TranslationNode(new Vector3(0, 1.5f * treeSize, 0));

            sphereTranslation.AddChild(sphereScale);

            TriangleMesh cubeMesh = new TriangleMesh();

            TriangleMeshFactory.CreateCube(cubeMesh, 1.0f);
            TriangleMeshNode cubeNode = new TriangleMeshNode(cubeMesh);

            cubeNode.SetColor(Color.Brown);
            ScaleNode cubeScale = new ScaleNode(new Vector3(treeSize / 3.0f, treeSize, treeSize / 3.0f));

            cubeScale.AddChild(cubeNode);
            TranslationNode cubeTranslation = new TranslationNode(new Vector3(0, treeSize / 2.0f, 0));

            cubeTranslation.AddChild(cubeScale);

            TranslationNode treeNode = new TranslationNode(position);

            treeNode.AddChild(sphereTranslation);
            treeNode.AddChild(cubeTranslation);
            return(treeNode);
        }
Exemplo n.º 2
0
        private void CreateSimpleScene()
        {
            // Plane
            TriangleMesh planeMesh = new TriangleMesh();

            TriangleMeshFactory.CreateSquare(planeMesh, 2);
            TriangleMeshNode planeMeshNode = new TriangleMeshNode(planeMesh);

            planeMeshNode.SetColor(Color.Green);
            GetRoot().AddChild(planeMeshNode);

            // Sphere
            TriangleMesh mesh = new TriangleMesh();

            TriangleMeshFactory.CreateSphere(mesh, 0.25f, 10);
            TriangleMeshNode meshNode = new TriangleMeshNode(mesh);

            meshNode.SetColor(Color.Red);
            TranslationNode translationNode =
                new TranslationNode(new Vector3(0.5f, 0.5f, 0.5f));

            translationNode.AddChild(meshNode);
            GetRoot().AddChild(translationNode);

            GetRoot().LightPosition = new Vector3(0.25f, 1, 0.25f);
            GetRoot().Animated      = false;
        }
Exemplo n.º 3
0
        public Helicopter(Vector3 scale, Vector3 offset)
        {
            ScaleNode scaleNode = new ScaleNode(scale);

            scaleNode.AddChild(CreateCabin(new Vector3(0, 0, 0)));
            scaleNode.AddChild(CreateBase(new Vector3(0, -0.19f, 0)));
            scaleNode.AddChild(CreateBack(new Vector3(0, 0.1f, 0.35f)));
            scaleNode.AddChild(CreateRotor(new Vector3(0, 0.2f, 0)));
            scaleNode.AddChild(CreateBackRotor(new Vector3(-0.05f, 0.1f, 0.65f)));

            TranslationNode offsetNode = new TranslationNode(offset);

            offsetNode.AddChild(scaleNode);

            //TriangleMesh dummyCubeMesh = new TriangleMesh();
            //TriangleMeshFactory.CreateCube(dummyCubeMesh, 1.0f);
            //TriangleMeshNode dummyCubeMeshNode = new TriangleMeshNode(dummyCubeMesh);
            //dummyCubeMeshNode.SetColor(Color.Aqua);
            //ScaleNode dummyCubeScale = new ScaleNode(new Vector3(0.2f, 0.2f, 0.2f));
            //dummyCubeScale.AddChild(dummyCubeMeshNode);
            //offsetNode.AddChild(dummyCubeScale);


            AddChild(offsetNode);
        }
Exemplo n.º 4
0
        private INode CreateBack(Vector3 offset)
        {
            INode           backBar    = CreateBar(new Vector3(0.1f, 0.1f, 0.7f), Color.Red);
            TranslationNode offsetNode = new TranslationNode(offset);

            offsetNode.AddChild(backBar);
            return(offsetNode);
        }
Exemplo n.º 5
0
        private INode CreateObject()
        {
            InnerNode objectNode = new InnerNode();

            TriangleMesh mesh        = new TriangleMesh();
            double       randomValue = random.NextDouble();

            if (randomValue < 1 / 3.0)
            {
                TriangleMeshFactory.CreateSphere(mesh, 0.25f, 10);
            }
            else if (randomValue < 2 / 3.0)
            {
                TriangleMeshFactory.CreateCube(mesh, 0.25f);
            }
            else
            {
                ObjReader reader = new ObjReader();
                reader.Read("meshes/cow.obj", mesh);
            }

            TriangleMeshNode meshNode = new TriangleMeshNode(mesh);

            meshNode.SetColor(CreateColor());
            ScaleNode scaleNode = new ScaleNode(new Vector3(0.4f, 0.4f, 0.4f));

            scaleNode.AddChild(meshNode);
            objectNode.AddChild(scaleNode);

            float   posMin = -0.4f;
            Vector3 t      = new Vector3((float)(random.NextDouble() * posMin * 2 - posMin),
                                         (float)(random.NextDouble() * posMin * 2 - posMin),
                                         (float)(random.NextDouble() * posMin * 2 - posMin));
            TranslationNode translationNode = new TranslationNode(t);

            translationNode.AddChild(objectNode);

            Vector3 axis = new Vector3((float)(random.NextDouble()) + 0.2f,
                                       (float)(random.NextDouble()) + 0.2f,
                                       (float)(random.NextDouble()) + 0.2f).Normalized();
            RotationNode rotationNode = new RotationNode(0, axis);

            rotationNode.Animated       = true;
            rotationNode.AnimationSpeed = 0.01f;
            rotationNode.AddChild(translationNode);

            Console.WriteLine("Created object: " + t);

            return(rotationNode);
        }
Exemplo n.º 6
0
        private INode CreateRotor(Vector3 offset)
        {
            var          bar1      = CreateBar(new Vector3(1, 0.03f, 0.03f), Color.DarkGray);
            var          bar2      = CreateBar(new Vector3(0.03f, 0.03f, 1), Color.DarkGray);
            RotationNode rotorNode = new RotationNode();

            rotorNode.Animated = true;
            rotorNode.AddChild(bar1);
            rotorNode.AddChild(bar2);
            TranslationNode offsetNode = new TranslationNode(offset);

            offsetNode.AddChild(rotorNode);
            return(offsetNode);
        }
Exemplo n.º 7
0
 public Core(Vector3 pos, float m, Vector3 vel, RootNode r)
 {
     mass     = m;
     root     = r;
     velocity = vel;
     position = pos;
     sphere   = new SphereNode(0.05f, 10);
     tNode    = new TranslationNode(position);
     root.AddChild(tNode);
     tNode.AddChild(sphere);
     point = new List <RenderVertex> {
         new RenderVertex(position, position.Normalized(), Color4.Aquamarine)
     };
 }
Exemplo n.º 8
0
        private INode CreateBackRotor(Vector3 offset)
        {
            INode     rotor     = CreateRotor(new Vector3(0, 0, 0));
            ScaleNode scaleNode = new ScaleNode(new Vector3(0.5f, 0.5f, 0.5f));

            scaleNode.AddChild(rotor);
            RotationNode rotationNode = new RotationNode(90.0f, new Vector3(0, 0, 1));

            rotationNode.Animated = false;
            rotationNode.AddChild(scaleNode);
            TranslationNode offsetNode = new TranslationNode(offset);

            offsetNode.AddChild(rotationNode);
            return(offsetNode);
        }
Exemplo n.º 9
0
        private INode CreateBase(Vector3 offset)
        {
            INode           left            = CreateBar(new Vector3(0.03f, 0.03f, 0.6f), Color.DarkGray);
            INode           right           = CreateBar(new Vector3(0.03f, 0.03f, 0.6f), Color.DarkGray);
            TranslationNode translationLeft = new TranslationNode(new Vector3(0.1f, 0, 0));

            translationLeft.AddChild(left);
            TranslationNode translationRight = new TranslationNode(new Vector3(-0.1f, 0, 0));

            translationRight.AddChild(right);
            TranslationNode offsetNode = new TranslationNode(offset);

            offsetNode.AddChild(translationLeft);
            offsetNode.AddChild(translationRight);
            return(offsetNode);
        }
Exemplo n.º 10
0
        public override void SetupScenegraph()
        {
            GetRoot().LightPosition = new Vector3(1, 1, 1);
            GetRoot().Animated      = true;

            // Sphere geometry
            TranslationNode sphereTranslation =
                new TranslationNode(new Vector3(1, -0.5f, 0));
            INode sphereNode = new SphereNode(0.5f, 20);

            sphereTranslation.AddChild(sphereNode);
            GetRoot().AddChild(sphereTranslation);

            // Cube geometry
            TranslationNode cubeTranslation =
                new TranslationNode(new Vector3(-1, 0.5f, 0));
            INode cubeNode = new CubeNode(0.5f);

            cubeTranslation.AddChild(cubeNode);
            GetRoot().AddChild(cubeTranslation);
        }
Exemplo n.º 11
0
        private INode CreateCabin(Vector3 offset)
        {
            TriangleMesh mesh = new TriangleMesh();

            TriangleMeshFactory.CreateSphere(mesh, 0.2f, 20);
            TriangleMeshNode node = new TriangleMeshNode(mesh);

            TriangleMesh windowMesh = new TriangleMesh();

            TriangleMeshFactory.CreateSphere(windowMesh, 0.17f, 20);
            TriangleMeshNode windowNode = new TriangleMeshNode(windowMesh);

            windowNode.SetColor(Color.LightBlue);
            TranslationNode windowTranslation = new TranslationNode(new Vector3(0, 0.01f, -0.05f));

            windowTranslation.AddChild(windowNode);

            TranslationNode cabin = new TranslationNode(offset);

            cabin.AddChild(node);
            cabin.AddChild(windowTranslation);
            return(cabin);
        }