Exemple #1
0
 private void Doblar(float v)
 {
     anguloFinal       -= v * elapsedTime;
     angOrientacionMesh = angOrientacionMesh + v * elapsedTime;
     matrixRotacion     = Matrix.RotationY(angOrientacionMesh);
     obb.rotate(new Vector3(0, v * 1f * elapsedTime, 0));
 }
Exemple #2
0
        public void Doblar(float d)
        {
            float lado = d;

            lado = lado * Velocidad;
            angOrientacionMesh += lado * 1f * GameModel.ElapsedTime;
            //ahora ya tengo para el lado en el que voy a girar y la intensidad del giro, entonces giro el auto.

            CamaraAuto.rotateY(-lado * 1f * GameModel.ElapsedTime);
            anguloFinal    = anguloFinal - lado * 1f * GameModel.ElapsedTime;
            matrixRotacion = Matrix.RotationY(anguloFinal);
            obb.rotate(new Vector3(0, -lado * 1f * GameModel.ElapsedTime, 0));
        }
        public override void Init()
        {
            var loader = new TgcSceneLoader();
            var scene  = loader.loadSceneFromFile(MediaDir + "MeshCreator\\Meshes\\Vehiculos\\Patrullero\\Patrullero-TgcScene.xml");

            mesh       = scene.Meshes[0];
            mesh.Scale = new Vector3(0.25f, 0.25f, 0.25f);

            //Cuerpo principal que se controla con el teclado
            //mesh = TgcBox.fromSize(new Vector3(0, 10, 0), new Vector3(10, 10, 10), Color.Blue).toMesh("box");

            //triangulo
            triangle    = new CustomVertex.PositionColored[3];
            triangle[0] = new CustomVertex.PositionColored(-100, 0, 0, Color.Green.ToArgb());
            triangle[1] = new CustomVertex.PositionColored(0, 0, 50, Color.Green.ToArgb());
            triangle[2] = new CustomVertex.PositionColored(0, 100, 0, Color.Green.ToArgb());
            triagleAABB =
                TgcBoundingAxisAlignBox.computeFromPoints(new[]
                                                          { triangle[0].Position, triangle[1].Position, triangle[2].Position });

            //box2
            box2 = TgcBox.fromSize(new Vector3(-50, 10, -20), new Vector3(15, 15, 15), Color.Violet);

            //sphere
            boundingSphere = new TgcBoundingSphere(new Vector3(30, 20, -20), 15);

            //OBB: computar OBB a partir del AABB del mesh.
            meshObb =
                loader.loadSceneFromFile(MediaDir +
                                         "MeshCreator\\Meshes\\Objetos\\Catapulta\\Catapulta-TgcScene.xml")
                .Meshes[0];
            meshObb.Scale    = new Vector3(0.1f, 0.1f, 0.1f);
            meshObb.Position = new Vector3(100, 0, 30);
            meshObb.updateBoundingBox();
            //Computar OBB a partir del AABB del mesh. Inicialmente genera el mismo volumen que el AABB, pero luego te permite rotarlo (cosa que el AABB no puede)
            obb = TgcBoundingOrientedBox.computeFromAABB(meshObb.BoundingBox);
            //Otra alternativa es computar OBB a partir de sus vertices. Esto genera un OBB lo mas apretado posible pero es una operacion costosa
            //obb = TgcBoundingOrientedBox.computeFromPoints(mesh.getVertexPositions());

            //Rotar mesh y rotar OBB. A diferencia del AABB, nosotros tenemos que mantener el OBB actualizado segun cada movimiento del mesh
            meshObb.Rotation = new Vector3(0, FastMath.PI / 4, 0);
            //Los obb tienen una especie de autotransform aun.
            obb.rotate(new Vector3(0, FastMath.PI / 4, 0));

            //Configurar camara en Tercer Persona
            camaraInterna = new TgcThirdPersonCamera(mesh.Position, 30, -75);
            Camara        = camaraInterna;
        }