Esempio n. 1
0
        public void ajustarCamaraSegunColision(Auto auto, List <ObstaculoRigido> obstaculos)
        {
            TgcThirdPersonCamera camera = GuiController.Instance.ThirdPersonCamera;
            Vector3 segmentA;
            Vector3 segmentB;

            camera.generateViewMatrix(out segmentA, out segmentB);

            //Detectar colisiones entre el segmento de recta camara-personaje y todos los objetos del escenario
            Vector3 q;
            float   minDistSq = FastMath.Pow2(camera.OffsetForward);

            foreach (ObstaculoRigido obstaculo in obstaculos)
            {
                //Hay colision del segmento camara-personaje y el objeto
                if (TgcCollisionUtils.intersectSegmentAABB(segmentB, segmentA, obstaculo.mesh.BoundingBox, out q))
                {
                    //Si hay colision, guardar la que tenga menor distancia
                    float distSq = (Vector3.Subtract(q, segmentB)).LengthSq();
                    if (distSq < minDistSq)
                    {
                        minDistSq = distSq;

                        //Le restamos un poco para que no se acerque tanto
                        minDistSq /= 2;
                    }
                }
            }

            //Acercar la camara hasta la minima distancia de colision encontrada (pero ponemos un umbral maximo de cercania)
            float newOffsetForward = FastMath.Sqrt(minDistSq);

            camera.OffsetForward = newOffsetForward;
        }
        /// <summary>
        ///     Atender mensaje InformacionInicial
        /// </summary>
        private void clienteAtenderInformacionInicial(TgcSocketRecvMsg msg)
        {
            //Recibir data
            var vehiculoData = (VehiculoData)msg.readNext();

            //Cargar mesh
            var loader = new TgcSceneLoader();
            var scene  = loader.loadSceneFromFile(vehiculoData.meshPath);

            meshPrincipal = scene.Meshes[0];

            //Ubicarlo en escenario
            meshPrincipal.Position = vehiculoData.initialPos;

            //Camara en 3ra persona
            camaraInterna = new TgcThirdPersonCamera(meshPrincipal.Position, 100, 400);
            camaraInterna.resetValues();
            Camera = camaraInterna;

            //Ver si ya habia mas clientes para cuando nosotros nos conectamos
            var otrosVehiculosCant = (int)msg.readNext();

            for (var i = 0; i < otrosVehiculosCant; i++)
            {
                var vData = (VehiculoData)msg.readNext();
                crearMeshOtroCliente(vData);
            }
        }
Esempio n. 3
0
        public void render(float elapsedTime)
        {
            bool showQuadtree           = (bool)GuiController.Instance.Modifiers["showQuadtree"];
            TgcThirdPersonCamera camera = GuiController.Instance.ThirdPersonCamera;

            quadtree.render(GuiController.Instance.Frustum, showQuadtree);

            if (Shared.debugMode)
            {
                foreach (TgcMesh objeto in objetos)
                {
                    objeto.BoundingBox.render();
                }
            }

            foreach (TgcSimpleTerrain terreno in this.terrenos)
            {
                terreno.render();
            }

            foreach (TgcBox caja in this.cajas)
            {
                caja.render();
            }
            checkpointActual.render(elapsedTime);
            checkpointActual.obb.rotate(new Vector3(0, 5f * elapsedTime, 0));
            if (Shared.debugMode)
            {
                checkpointActual.obb.render();
            }

            cielo.render();
        }
Esempio n. 4
0
        public EjemploAlumno()
        {
            this.escenario = new Escenario();
            this.camara    = new TgcThirdPersonCamera();
            this.llegada   = new Vector3(1800, 0, 1700);
            this.explosion = new Explosion();
            this.personaje = new Personaje(this.camara, this.explosion);
            this.patrulla  = new PatrullaPhong();
            this.fin       = new Fin();

            distanceTargetText          = new TgcText2d();
            distanceTargetText.Position = new Point(0, 40);
            distanceTargetText.Color    = Color.White;
            onTargetPosition            = new TgcText2d();
            onTargetPosition.Position   = new Point(0, 60);
            onTargetPosition.Color      = Color.Red;
            onTargetPosition.Text       = "Presione la tecla K";
            lifeText          = new TgcText2d();
            lifeText.Position = new Point(-400, 400);
            try
            {
                lifeText.changeFont(new System.Drawing.Font(new FontFamily("Asrock7Segment"), 25));
            }
            catch  {
                lifeText.changeFont(new System.Drawing.Font(lifeText.D3dFont.Description.FaceName, 25));
            }
            lifeText.Color = Color.Yellow;
        }
Esempio n. 5
0
        public MotionBlur(TgcThirdPersonCamera cam, GameModel gm)

        {
            camara    = cam;
            gameModel = gm;
            meshes    = gm.MapScene.Meshes;
            Init();
        }
Esempio n. 6
0
 public CamaraTerceraPersona(TgcThirdPersonCamera camaraTgc, Vector3 posicion, TgcFrustum frustum,
                             Device d3dDevice)
 {
     //this.camaraTgc = camaraTgc;
     //this.camaraTgc.Enable = true;
     //this.camaraTgc.setCamera(posicion, 0, -300);
     //this.frustum = frustum;
     //this.d3dDevice = d3dDevice;
 }
        public TgcCamera camaraSeguirEsteAuto(GameModel model)
        {
            Vector3 v = Mesh.Position;

            CamaraAuto = new TgcThirdPersonCamera(v, 150, 300f);
            //motionBlur = new MotionBlur(CamaraAuto, model);
            GameModel.Niebla.CargarCamara(CamaraAuto);
            return(CamaraAuto);
        }
Esempio n. 8
0
        /// <summary>
        /// Crea todos los modulos necesarios de la aplicacion
        /// </summary>
        internal void initGraphics(MainForm mainForm, Control panel3d)
        {
            this.mainForm        = mainForm;
            this.panel3d         = panel3d;
            this.fullScreenPanel = new FullScreenPanel();
            panel3d.Focus();

            //Iniciar graficos
            this.tgcD3dDevice    = new TgcD3dDevice(panel3d);
            this.texturesManager = new TgcTexture.Manager();
            this.tgcD3dDevice.OnResetDevice(tgcD3dDevice.D3dDevice, null);

            //Iniciar otras herramientas
            this.texturesPool      = new TgcTexture.Pool();
            this.logger            = new Logger(mainForm.LogConsole);
            this.text3d            = new TgcDrawText(tgcD3dDevice.D3dDevice);
            this.tgcD3dInput       = new TgcD3dInput(mainForm, panel3d);
            this.fpsCamera         = new TgcFpsCamera();
            this.rotCamera         = new TgcRotationalCamera();
            this.thirdPersonCamera = new TgcThirdPersonCamera();
            this.axisLines         = new TgcAxisLines(tgcD3dDevice.D3dDevice);
            this.userVars          = new TgcUserVars(mainForm.getDataGridUserVars());
            this.modifiers         = new TgcModifiers(mainForm.getModifiersPanel());
            this.elapsedTime       = -1;
            this.frustum           = new TgcFrustum();
            this.mp3Player         = new TgcMp3Player();
            this.directSound       = new TgcDirectSound();
            this.fog                 = new TgcFog();
            this.currentCamera       = this.rotCamera;
            this.customRenderEnabled = false;
            this.drawer2D            = new TgcDrawer2D();
            this.shaders             = new TgcShaders();

            //toogles
            this.rotCamera.Enable         = true;
            this.fpsCamera.Enable         = false;
            this.thirdPersonCamera.Enable = false;
            this.fpsCounterEnable         = true;
            this.axisLines.Enable         = true;

            //Cargar algoritmos
            exampleLoader          = new ExampleLoader();
            examplesDir            = System.Environment.CurrentDirectory + "\\" + ExampleLoader.EXAMPLES_DIR + "\\";
            examplesMediaDir       = examplesDir + "Media" + "\\";
            alumnoEjemplosDir      = System.Environment.CurrentDirectory + "\\" + "AlumnoEjemplos" + "\\";
            alumnoEjemplosMediaDir = alumnoEjemplosDir + "AlumnoMedia" + "\\";
            exampleLoader.loadExamplesInGui(mainForm.TreeViewExamples, new string[] { examplesDir, alumnoEjemplosDir });

            //Cargar shaders del framework
            this.shaders.loadCommonShaders();

            //Cargar ejemplo default
            TgcExample defaultExample = exampleLoader.getExampleByName(mainForm.Config.defaultExampleName, mainForm.Config.defaultExampleCategory);

            executeExample(defaultExample);
        }
        public override void Init()
        {
            //Objetos en movimiento.
            colliderCylinder = new TgcBoundingCylinder(new Vector3(0, 0, 0), 2, 4);
            colliderCylinder.setRenderColor(Color.LimeGreen);
            colliderCylinderFixedY = new TgcBoundingCylinderFixedY(new Vector3(0, 0, 0), 2, 4);
            colliderCylinderFixedY.setRenderColor(Color.LimeGreen);
            //Cargar personaje con animaciones
            var skeletalLoader = new TgcSkeletalLoader();

            personaje =
                skeletalLoader.loadMeshAndAnimationsFromFile(
                    MediaDir + "SkeletalAnimations\\Robot\\Robot-TgcSkeletalMesh.xml",
                    MediaDir + "SkeletalAnimations\\Robot\\",
                    new[]
            {
                MediaDir + "SkeletalAnimations\\Robot\\Caminando-TgcSkeletalAnim.xml",
                MediaDir + "SkeletalAnimations\\Robot\\Parado-TgcSkeletalAnim.xml"
            });
            //Configurar animacion inicial
            personaje.playAnimation("Parado", true);
            //Escalarlo porque es muy grande
            personaje.Scale = new Vector3(0.04f, 0.04f, 0.04f);

            //El personaje esta en el 0,0,0 hay que bajarlo
            var size = personaje.BoundingBox.PMax.Y - personaje.BoundingBox.PMin.Y;

            personaje.Position = new Vector3(0, -3f, 0);
            //Rotarlo 180° porque esta mirando para el otro lado
            personaje.rotateY(FastMath.PI);

            //Objetos estaticos, pueden ser mesh o objetos simplificados.
            var loader = new TgcSceneLoader();
            var scene  = loader.loadSceneFromFile(MediaDir + "MeshCreator\\Meshes\\Vehiculos\\Patrullero\\Patrullero-TgcScene.xml");

            collisionableMeshAABB          = scene.Meshes[0];
            collisionableMeshAABB.Scale    = new Vector3(0.1f, 0.1f, 0.1f);
            collisionableMeshAABB.Position = new Vector3(6, 0, -2);
            collisionableCylinder          = new TgcBoundingCylinderFixedY(new Vector3(-6, 0, 0), 2, 2);
            collisionableSphere            = new TgcBoundingSphere(new Vector3(-3, 0, 10), 3);

            Modifiers.addBoolean("fixedY", "use fixed Y", true);
            //Modifier para ver BoundingBox del personaje
            Modifiers.addBoolean("showBoundingBox", "Personaje Bouding Box", false);
            Modifiers.addVertex2f("size", new Vector2(1, 1), new Vector2(5, 10), new Vector2(2, 5));
            var angle = FastMath.TWO_PI;

            Modifiers.addVertex3f("rotation", new Vector3(-angle, -angle, -angle), new Vector3(angle, angle, angle),
                                  new Vector3(FastMath.TWO_PI / 8, 0, FastMath.TWO_PI / 8));


            //Configurar camara en Tercer Persona
            camaraInterna = new TgcThirdPersonCamera(personaje.Position, 25, -45);
            Camara        = camaraInterna;
        }
Esempio n. 10
0
        public MainCamera(Ship newShip)
        {
            this.ship     = newShip;
            camera        = GuiController.Instance.ThirdPersonCamera;
            camera.Enable = true;

            wheelPos = input.WheelPos;
            objetive = ship.mesh.Position;
            //Configurar centro al que se mira y distancia desde la que se mira
            camera.setCamera(objetive, ALTURA, DISTANCIA);
        }
Esempio n. 11
0
        public ConfiguracionPartido(string pathRecursos, int width, TgcThirdPersonCamera camara, EjemploAlumno main)
        {
            //Titulo
            this.titulo       = new TgcText2D();
            this.titulo.Text  = "Configuración del partido";
            this.titulo.Color = Color.White;
            this.titulo.Align = TgcText2D.TextAlign.CENTER;
            this.titulo.Size  = new Size(400, 100);
            this.titulo.changeFont(new System.Drawing.Font("Arial", 24));
            this.titulo.Position = new Point((width - this.titulo.Size.Width) / 2, 20);

            //Menu
            this.menus = new List <MenuItem>();
            this.menus.Add(new MenuItem("listo", new Vector3(-7, 4, 0), new Vector3(14, 2, 0), pathRecursos + "Menu\\listo.png", pathRecursos + "Menu\\listo-seleccionado.png"));
            this.menus.Add(new MenuItem("uniformeLocal", new Vector3(-7, 1, 0), new Vector3(14, 4, 0), pathRecursos + "Menu\\local.png", pathRecursos + "Menu\\local-seleccionado.png"));
            this.menus.Add(new MenuItem("uniformeVisitante", new Vector3(-7, -3, 0), new Vector3(14, 4, 0), pathRecursos + "Menu\\visitante.png", pathRecursos + "Menu\\visitante-seleccionado.png"));
            this.menus.Add(new MenuItem("pelota", new Vector3(7, 3.2f, 0), new Vector3(14, 4, 0), pathRecursos + "Menu\\pelota.png", pathRecursos + "Menu\\pelota-seleccionado.png"));
            this.menus.Add(new MenuItem("camara", new Vector3(7, 0.2f, 0), new Vector3(14, 2, 0), pathRecursos + "Menu\\camara.png", pathRecursos + "Menu\\camara-seleccionado.png"));
            this.menus.Add(new MenuItem("volver", new Vector3(7, -2.2f, 0), new Vector3(14, 2, 0), pathRecursos + "Menu\\volver.png", pathRecursos + "Menu\\volver-seleccionado.png"));

            //Pelotas
            this.pelotas = new List <TgcSphere>();
            //TODO cambiar por matrices
            this.pelotas.Add(this.CrearPelota(pathRecursos, new Vector3(10, 3.2f, 0), TgcTexture.createTexture(pathRecursos + Settings.Default.textureBall)));
            this.pelotas.Add(this.CrearPelota(pathRecursos, new Vector3(10, 3.2f, 0), TgcTexture.createTexture(pathRecursos + "Texturas\\pelota2.jpg")));
            this.pelotas.Add(this.CrearPelota(pathRecursos, new Vector3(10, 3.2f, 0), TgcTexture.createTexture(pathRecursos + "Texturas\\pelota3.jpg")));

            //Jugadores
            this.jugadores = new List <TgcSkeletalMesh>();
            this.jugadores.Add(this.CrearJugador(pathRecursos, TgcTexture.createTexture(pathRecursos + Settings.Default.meshFolderPlayer + Settings.Default.textureTeam1)));
            this.jugadores.Add(this.CrearJugador(pathRecursos, TgcTexture.createTexture(pathRecursos + Settings.Default.meshFolderPlayer + Settings.Default.textureTeam2)));
            this.jugadores.Add(this.CrearJugador(pathRecursos, TgcTexture.createTexture(pathRecursos + Settings.Default.meshFolderPlayer + "Textures\\uvw.jpg")));
            this.jugadores.Add(this.CrearJugador(pathRecursos, TgcTexture.createTexture(pathRecursos + Settings.Default.meshFolderPlayer + "Textures\\uvwBlack.png")));
            this.jugadores.Add(this.CrearJugador(pathRecursos, TgcTexture.createTexture(pathRecursos + Settings.Default.meshFolderPlayer + "Textures\\uvwOrange.png")));
            this.jugadores.Add(this.CrearJugador(pathRecursos, TgcTexture.createTexture(pathRecursos + Settings.Default.meshFolderPlayer + "Textures\\uvwViolet.png")));

            //Camaras
            this.camaras = new List <TgcText2D>();
            this.camaras.Add(this.CrearCamara("Pelota", width));
            //this.camaras.Add(this.CrearCamara("Jugador", screenSize));
            this.camaras.Add(this.CrearCamara("Aérea", width));

            this.menus[0].Select();
            this.pelota             = 0;
            this.jugadorLocal       = 0;
            this.jugadorVisitante   = 1;
            this.camaraSeleccionada = 0;

            this.positionJugadorLocal     = new Vector3(-4, -0.1f, 0);
            this.positionJugadorVisitante = new Vector3(-4, -4, 0);

            this.camara = camara;
            this.main   = main;
        }
Esempio n. 12
0
        /// <summary>
        ///     Iniciar cliente
        /// </summary>
        private void initClient()
        {
            //Crear piso
            var pisoTexture = TgcTexture.createTexture(D3DDevice.Instance.Device, MediaDir + "Texturas\\Quake\\TexturePack2\\rock_wall.jpg");

            piso = TGCBox.fromSize(new TGCVector3(0, -60, 0), new TGCVector3(5000, 5, 5000), pisoTexture);

            //Camara en 3ra persona
            camaraInterna.resetValues();
            camaraInterna = new TgcThirdPersonCamera(meshPrincipal.Position, 100, 400);
            Camara        = camaraInterna;
        }
Esempio n. 13
0
        public Personaje(TgcThirdPersonCamera camaraParametro, Explosion explosion)
        {
            //Crear personaje
            TgcSkeletalLoader skeletalLoader = new TgcSkeletalLoader();

            this.personaje = skeletalLoader.loadMeshAndAnimationsFromFile(
                GuiController.Instance.ExamplesMediaDir + "SkeletalAnimations\\BasicHuman\\" + "CS_Arctic-TgcSkeletalMesh.xml",
                GuiController.Instance.ExamplesMediaDir + "SkeletalAnimations\\BasicHuman\\",
                new string[] {
                GuiController.Instance.ExamplesMediaDir + "SkeletalAnimations\\BasicHuman\\Animations\\" + "Walk-TgcSkeletalAnim.xml",
                GuiController.Instance.ExamplesMediaDir + "SkeletalAnimations\\BasicHuman\\Animations\\" + "StandBy-TgcSkeletalAnim.xml",
                GuiController.Instance.ExamplesMediaDir + "SkeletalAnimations\\BasicHuman\\Animations\\" + "Jump-TgcSkeletalAnim.xml",
                GuiController.Instance.ExamplesMediaDir + "SkeletalAnimations\\BasicHuman\\Animations\\" + "Run-TgcSkeletalAnim.xml",
                GuiController.Instance.ExamplesMediaDir + "SkeletalAnimations\\BasicHuman\\Animations\\" + "HighKick-TgcSkeletalAnim.xml",
                GuiController.Instance.ExamplesMediaDir + "SkeletalAnimations\\BasicHuman\\Animations\\" + "Talk-TgcSkeletalAnim.xml",
                GuiController.Instance.AlumnoEjemplosMediaDir + "Kamikaze3D\\Animations\\WeaponPos-TgcSkeletalAnim.xml",
                GuiController.Instance.AlumnoEjemplosMediaDir + "Kamikaze3D\\Animations\\Muerte-TgcSkeletalAnim.xml",
            });

            //Configurar animacion inicial
            this.personaje.playAnimation("StandBy", true);

            //Escalarlo y posicionarlo
            this.personaje.Position = new Vector3(-100f, 3.5f, -340f);
            this.personaje.Scale    = new Vector3(0.7f, 0.7f, 0.7f);

            //Rotarlo 180° porque esta mirando para el otro lado
            this.personaje.rotateY(Geometry.DegreeToRadian(180f));

            this.personaje.AutoUpdateBoundingBox = false;

            //Crear manejador de colisiones
            this.collisionManager = new SphereCollisionManager();
            this.collisionManager.GravityEnabled = false;
            this.characterSphere = new TgcBoundingSphere(personaje.BoundingBox.calculateBoxCenter(), personaje.BoundingBox.calculateBoxRadius());

            //Crear linea para mostrar la direccion del movimiento del personaje
            this.directionArrow           = new TgcArrow();
            this.directionArrow.BodyColor = Color.Red;
            this.directionArrow.HeadColor = Color.Green;
            this.directionArrow.Thickness = 1;
            this.directionArrow.HeadSize  = new Vector2(10, 20);

            this.camara = camaraParametro;

            this.weapon = new Weapon(personaje.Position);

            //Agregar el arma al personaje
            this.addWeapon(personaje, weapon);

            this.explosion = explosion;
        }
        /// <summary>
        ///     Iniciar cliente
        /// </summary>
        private void initClient()
        {
            //Crear piso
            var pisoTexture = TgcTexture.createTexture(D3DDevice.Instance.Device,
                                                       GuiController.Instance.ExamplesMediaDir + "Texturas\\Quake\\TexturePack2\\rock_wall.jpg");

            piso = TgcBox.fromSize(new Vector3(0, -60, 0), new Vector3(5000, 5, 5000), pisoTexture);

            //Camara en 3ra persona
            this.camara = new TgcThirdPersonCamera();
            CamaraManager.Instance.CurrentCamera = this.camara;
            this.camara.Enable = true;
        }
Esempio n. 15
0
        public MenuInicial(string pathRecursos, TgcThirdPersonCamera camara, EjemploAlumno main)
        {
            this.main     = main;
            this.camara   = camara;
            this.drawer2D = new Drawer2D();

            //Titulo
            this.titulo          = new TgcText2D();
            this.titulo.Text     = "Socketes";
            this.titulo.Color    = Color.White;
            this.titulo.Align    = TgcText2D.TextAlign.CENTER;
            this.titulo.Position = new Point(280, 0);
            this.titulo.Size     = new Size(400, 100);
            this.titulo.changeFont(new System.Drawing.Font("Arial", 35));

            //Brazuca
            this.pelota = new TgcSphere();
            //TODO cambiar por matrices
            this.pelota.AutoTransformEnable = true;
            this.pelota.setTexture(TgcTexture.createTexture(pathRecursos + Settings.Default.textureBall));
            this.pelota.Radius        = 2.5f;
            this.pelota.LevelOfDetail = 4;
            this.pelota.Position      = new Vector3(3, 0, -4);
            this.pelota.updateValues();

            //Cancha donde esta la pelota
            this.cancha = TgcBox.fromSize(new Vector3(20, 0, 20), TgcTexture.createTexture(pathRecursos + Settings.Default.textureMenuField));
            //TODO cambiar por matrices
            this.cancha.AutoTransformEnable = true;
            this.cancha.Position            = new Vector3(0, -2.5f, 0);

            //Menu
            this.menus = new List <MenuItem>();
            this.menus.Add(new MenuItem("picadito", new Vector3(-5, 2, 0), new Vector3(8, 1, 0), pathRecursos + Settings.Default.texturePicadito1, pathRecursos + Settings.Default.texturePicadito2));
            this.menus.Add(new MenuItem("configuracion", new Vector3(-5, 0.8f, 0), new Vector3(8, 1, 0), pathRecursos + Settings.Default.textureControles1, pathRecursos + Settings.Default.textureControles2));
            this.menus.Add(new MenuItem("salir", new Vector3(-5, -0.4f, 0), new Vector3(8, 1, 0), pathRecursos + Settings.Default.textureSalir1, pathRecursos + Settings.Default.textureSalir2));

            this.menus[0].Select();

            //Menu de configuracion
            //Crear Sprite
            this.panelConfiguracion         = new CustomSprite();
            this.panelConfiguracion.Bitmap  = new CustomBitmap(pathRecursos + Settings.Default.texturePanelcontroles, D3DDevice.Instance.Device);
            this.panelConfiguracion.Scaling = new Vector2(0.75f, 0.75f);

            Size textureSize = this.panelConfiguracion.Bitmap.Size;

            this.panelConfiguracion.Position = new Vector2(FastMath.Max(D3DDevice.Instance.Width / 2 - textureSize.Width / 2, 0), FastMath.Max(D3DDevice.Instance.Height / 2 - textureSize.Height / 2, 0));
        }
Esempio n. 16
0
        public void init(TgcThirdPersonCamera camara, Personaje personaje)
        {
            this.camara    = camara;
            this.personaje = personaje;

            //Crear loader
            TgcSceneLoader loader = new TgcSceneLoader();

            this.scene = loader.loadSceneFromFile(GuiController.Instance.AlumnoEjemplosMediaDir + "Kamikaze3D\\Explosion\\Explosion-TgcScene.xml");

            foreach (TgcMesh mesh in this.scene.Meshes)
            {
                mesh.Scale = new Vector3(0, 0, 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;
        }
        /// <summary>
        /// Ajustar la posicion de la camara segun la colision con los objetos del escenario.
        /// Acerca la distancia entre el persona y la camara si hay colisiones de objetos
        /// en el medio
        /// </summary>
        private void ajustarPosicionDeCamara(TgcSkeletalMesh personaje, List <TgcBox> obstaculos)
        {
            //Actualizar valores de camara segun modifiers
            TgcThirdPersonCamera camera = GuiController.Instance.ThirdPersonCamera;

            camera.OffsetHeight  = (float)GuiController.Instance.Modifiers["offsetHeight"];
            camera.OffsetForward = (float)GuiController.Instance.Modifiers["offsetForward"];
            Vector2 displacement = (Vector2)GuiController.Instance.Modifiers["displacement"];

            camera.TargetDisplacement = new Vector3(displacement.X, displacement.Y, 0);

            //Pedirle a la camara cual va a ser su proxima posicion
            Vector3 segmentA;
            Vector3 segmentB;

            camera.generateViewMatrix(out segmentA, out segmentB);

            //Detectar colisiones entre el segmento de recta camara-personaje y todos los objetos del escenario
            Vector3 q;
            float   minDistSq = FastMath.Pow2(camera.OffsetForward);

            foreach (TgcBox obstaculo in obstaculos)
            {
                //Hay colision del segmento camara-personaje y el objeto
                if (TgcCollisionUtils.intersectSegmentAABB(segmentB, segmentA, obstaculo.BoundingBox, out q))
                {
                    //Si hay colision, guardar la que tenga menor distancia
                    float distSq = (Vector3.Subtract(q, segmentB)).LengthSq();
                    if (distSq < minDistSq)
                    {
                        minDistSq = distSq;

                        //Le restamos un poco para que no se acerque tanto
                        minDistSq /= 2;
                    }
                }
            }

            //Acercar la camara hasta la minima distancia de colision encontrada (pero ponemos un umbral maximo de cercania)
            float newOffsetForward = -FastMath.Sqrt(minDistSq);

            /*
             * if(newOffsetForward < 10)
             * {
             *  newOffsetForward = 10;
             * }*/
            camera.OffsetForward = newOffsetForward;
        }
Esempio n. 19
0
        public override void Update(GameModel gameModel, TgcThirdPersonCamera camaraInterna, ModoCamara modoCamara)
        {
            // Determinar que la simulación del mundo físico se va a procesar 60 veces por segundo
            world.StepSimulation(1 / 60f, 30);

            // Actualizar parametros del Shader
            explosionFX.SetValue("time", time);

            // Actualizar variables de control
            UpdateControlVariables(gameModel.ElapsedTime);

            // Actualizar variables del jugador que requieren calculos complejos una sola vez
            player1.UpdateInternalValues();
            enemy.UpdateInternalValues();

            // Si el jugador cayó a más de 100 unidades en Y, se lo hace respawnear
            if (player1.RigidBody.CenterOfMassPosition.Y < -100)
            {
                player1.Respawn(inflictDmg, initialPosP1, 0f);
            }
            // Si el enemigo cayó a más de 100 unidades en Y, se lo hace respawnear
            if (enemy.RigidBody.CenterOfMassPosition.Y < -100)
            {
                enemy.Respawn(false, initialPosEnemy, FastMath.PI);
            }

            // Intenta enderezar si hace falta
            player1.TryStraighten(gameModel.ElapsedTime);
            enemy.TryStraighten(gameModel.ElapsedTime);

            // Manejar los inputs del teclado y joystick
            player1.ReactToInputs(gameModel, this);
            // Accion del enemigo
            enemy.TakeAction(gameModel, this);

            // Activar Información de Debug
            if (gameModel.Input.keyPressed(Key.F5))
            {
                showInfo = !showInfo;
            }

            // Metodo que se encarga de manejar las colisiones según corresponda
            CollisionsHandler(gameModel);

            // Ajustar la posicion de la cámara segun la colisión con los objetos del escenario
            AdjustCameraPosition(camaraInterna, modoCamara);
        }
Esempio n. 20
0
        public override void Init()
        {
            //En este ejemplo primero cargamos una escena 3D entera.
            var loader = new TgcSceneLoader();

            scene = loader.loadSceneFromFile(MediaDir + "MeshCreator\\Scenes\\Ciudad\\Ciudad-TgcScene.xml");

            //Luego cargamos otro modelo aparte que va a hacer el objeto que controlamos con el teclado
            var scene2 =
                loader.loadSceneFromFile(MediaDir + "MeshCreator\\Meshes\\Vehiculos\\Hummer\\Hummer-TgcScene.xml");

            //Solo nos interesa el primer modelo de esta escena (tiene solo uno)
            mainMesh = scene2.Meshes[0];

            //Vamos a utilizar la cámara en 3ra persona para que siga al objeto principal a medida que se mueve
            camaraInterna = new TgcThirdPersonCamera(mainMesh.Position, 200, 300);
            Camara        = camaraInterna;
        }
Esempio n. 21
0
        public override void Init()
        {
            //Cargar escena
            var loader = new TgcSceneLoader();

            scene = loader.loadSceneFromFile(MediaDir + "MeshCreator\\Scenes\\Ciudad\\Ciudad-TgcScene.xml");

            //Cargar mesh principal
            mainMesh =
                loader.loadSceneFromFile(MediaDir + "MeshCreator\\Meshes\\Vehiculos\\Hummer\\Hummer-TgcScene.xml")
                .Meshes[0];

            //Movemos el mesh un poco para arriba. Porque sino choca con el piso todo el tiempo y no se puede mover.
            mainMesh.move(0, 5, 0);

            //Camera en 3ra persona
            camaraInterna = new TgcThirdPersonCamera(mainMesh.Position, 200, 300);
            Camara        = camaraInterna;
        }
Esempio n. 22
0
        public override void Init()
        {
            //Cargar suelo
            var texture = TgcTexture.createTexture(D3DDevice.Instance.Device, MediaDir + "Texturas\\granito.jpg");

            suelo = new TgcPlane(new TGCVector3(-5000, 0, -5000), new TGCVector3(10000, 0f, 10000), TgcPlane.Orientations.XZplane, texture);

            //Iniciarlizar PickingRay
            pickingRay = new TgcPickingRay(Input);

            //Cargar nave
            var loader = new TgcSceneLoader();
            var scene  =
                loader.loadSceneFromFile(MediaDir +
                                         "MeshCreator\\Meshes\\Vehiculos\\NaveEspacial\\NaveEspacial-TgcScene.xml");

            mesh = scene.Meshes[0];

            //Rotación original de la malla, hacia -Z
            originalMeshRot = new TGCVector3(0, 0, -1);

            //Manipulamos los movimientos del mesh a mano
            mesh.AutoTransform = false;
            meshRotationMatrix = TGCMatrix.Identity;

            newPosition   = mesh.Position;
            applyMovement = false;

            //Crear caja para marcar en que lugar hubo colision
            collisionPointMesh = TGCBox.fromSize(new TGCVector3(3, 100, 3), Color.Red);

            //Flecha para marcar la dirección
            directionArrow           = new TgcArrow();
            directionArrow.Thickness = 5;
            directionArrow.HeadSize  = new TGCVector2(10, 10);

            //Camara en tercera persona
            camaraInterna = new TgcThirdPersonCamera(mesh.Position, 800, 1500);
            Camara        = camaraInterna;
            speedModifier = AddFloat("speed", 1000, 5000, 2500);
        }
Esempio n. 23
0
        /// <summary>
        /// Método que se llama cada vez que hay que refrescar la pantalla.
        /// Escribir aquí todo el código referido al renderizado.
        /// </summary>
        /// <param name="elapsedTime">Tiempo en segundos transcurridos desde el último frame</param>
        public void render(float elapsedTime, TgcThirdPersonCamera camara)
        {
            for (int i = 0; i < this.cuadras.Length; i++)
            {
                this.cuadras[i].render(elapsedTime, camara);
            }

            //Cargar los valores de la Niebla

            /*if (explosion.estaEjecutandose())
             *  GuiController.Instance.Fog.Enabled = false;
             * else
             *  GuiController.Instance.Fog.Enabled = (bool)GuiController.Instance.Modifiers["Enabled"];
             *  GuiController.Instance.Fog.StartDistance = (float)GuiController.Instance.Modifiers["startDistance"];
             *  GuiController.Instance.Fog.EndDistance = (float)GuiController.Instance.Modifiers["endDistance"];
             *  GuiController.Instance.Fog.Density = (float)GuiController.Instance.Modifiers["density"];
             *  GuiController.Instance.Fog.Color = (Color)GuiController.Instance.Modifiers["color"];*/

            //Actualizar valores de la Niebla
            /*GuiController.Instance.Fog.updateValues();*/
        }
Esempio n. 24
0
        public override void Init()
        {
            //En este ejemplo primero cargamos una escena 3D entera.
            var loader = new TgcSceneLoader();

            scene = loader.loadSceneFromFile(MediaDir + "MeshCreator\\Scenes\\Ciudad\\Ciudad-TgcScene.xml");

            //Luego cargamos otro modelo aparte que va a hacer el objeto que controlamos con el teclado
            var scene2 = loader.loadSceneFromFile(MediaDir + "MeshCreator\\Meshes\\Vehiculos\\Hummer\\Hummer-TgcScene.xml");

            //Solo nos interesa el primer modelo de esta escena (tiene solo uno)
            mainMesh = scene2.Meshes[0];

            //Movemos el mesh un poco para arriba. Porque sino choca con el piso todo el tiempo y no se puede mover.
            mainMesh.Position  = new TGCVector3(0, 5, 0);
            mainMesh.Transform = TGCMatrix.Translation(0, 5, 0);

            //Vamos a utilizar la camara en 3ra persona para que siga al objeto principal a medida que se mueve
            camaraInterna = new TgcThirdPersonCamera(mainMesh.Position, 200, 300);
            Camera        = camaraInterna;
        }
Esempio n. 25
0
        public override void Init()
        {
            //En este ejemplo primero cargamos una escena 3D entera.
            var loader = new TgcSceneLoader();

            scene = loader.loadSceneFromFile(MediaDir + "MeshCreator\\Scenes\\Ciudad\\Ciudad-TgcScene.xml");
            //scene = loader.loadSceneFromFile(MediaDir + "4toPiso\\Extract\\4toPiso-TgcScene.xml");

            /* C:\Users\llain2\Documents\TGC\Viewer\Media\4toPiso\Extract
             * //Luego cargamos otro modelo aparte que va a hacer el objeto que controlamos con el teclado
             * var scene2 =
             *  loader.loadSceneFromFile(MediaDir + "MeshCreator\\Meshes\\Vehiculos\\Hummer\\Hummer-TgcScene.xml");
             *
             * //Solo nos interesa el primer modelo de esta escena (tiene solo uno)
             * mainMesh = scene2.Meshes[0];
             * <<<<<<< HEAD
             * =======
             * mainMesh.AutoTransformEnable = true;
             * >>>>>>> master
             * //Movemos el mesh un poco para arriba. Porque sino choca con el piso todo el tiempo y no se puede mover.
             * mainMesh.Position = new TGCVector3(0, 50, 0);
             * mainMesh.UpdateMeshTransform();*/

            physicsExample = new CubePhysic();
            //physicsExample.setHummer(mainMesh);
            scene.Meshes[0].Position = TGCVector3.Empty;
            physicsExample.setBuildings(scene.Meshes);
            physicsExample.Init(MediaDir);

            //Vamos a utilizar la camara en 3ra persona para que siga al objeto principal a medida que se mueve
            camaraInterna = new TgcThirdPersonCamera(physicsExample.getPositionHummer(), 250, 375);
            Camara        = camaraInterna;

            UserVars.addVar("HummerPositionX");
            UserVars.addVar("HummerPositionY");
            UserVars.addVar("HummerPositionZ");
            UserVars.addVar("HummerBodyPositionX");
            UserVars.addVar("HummerBodyPositionY");
            UserVars.addVar("HummerBodyPositionZ");
        }
Esempio n. 26
0
        /// <summary>
        /// Carga el shader para cada objeto de la cuadra e inicializa sus valores estaticos
        /// </summary>

        /*private void loadShader()
         * {
         *  Microsoft.DirectX.Direct3D.Device d3dDevice = GuiController.Instance.D3dDevice;
         *
         *  string compilationErrors;
         *
         *  //Carga el shader
         *  foreach (VoidMeshShader obj in this.objects)
         *  {
         *      obj.Effect = Microsoft.DirectX.Direct3D.Effect.FromFile(d3dDevice, GuiController.Instance.AlumnoEjemplosMediaDir + "Kamikaze3D\\Shader\\VoidShader3.2.fx", null, null, ShaderFlags.None, null, out compilationErrors);
         *      if (obj.Effect == null)
         *      {
         *          throw new Exception("Error al cargar shader. Errores: " + compilationErrors);
         *      }
         *
         *      //Definir tecnica por default
         *      obj.Effect.Technique = "VoidFullTransformationTechnique";
         *
         *      //Colorea las zonas por defecto del Modelo
         *      obj.setColor(Color.White);
         *
         *      //Cargar variables constantes del shader
         *      obj.Effect.SetValue("fvAmbient", ColorValue.FromColor(this.ambientColor));
         *      obj.Effect.SetValue("fvDiffuse", ColorValue.FromColor(this.diffuseColor));
         *      obj.Effect.SetValue("fvSpecular", ColorValue.FromColor(Color.FromArgb(190, 190, 190)));
         *      if (obj.Name == "Bloque")
         *          obj.Effect.SetValue("fvSpecularIntensity", 0.28f);
         *      else
         *          obj.Effect.SetValue("fvSpecularIntensity", 0.95f);
         *  }
         * }*/

        /// <summary>
        /// Establece los valores dinamicos del shader
        /// </summary>

        /*public void updateShader(Vector3 lightPosition, Vector3 camaraPosition)
         * {
         *  Microsoft.DirectX.Direct3D.Device d3dDevice = GuiController.Instance.D3dDevice;
         *
         *  foreach (VoidMeshShader obj in this.objects)
         *  {
         *      obj.Effect.SetValue("fvLightPosition", TgcParserUtils.vector3ToFloat3Array(lightPosition));
         *      obj.Effect.SetValue("fvEyePosition", TgcParserUtils.vector3ToFloat3Array(camaraPosition));
         *      obj.Effect.SetValue("matView", d3dDevice.Transform.View);
         *      obj.Effect.SetValue("matProjection", d3dDevice.Transform.Projection);
         *      obj.Effect.SetValue("matWorld", obj.Transform);
         *  }
         * }*/

        /// <summary>
        /// Método que se llama cada vez que hay que refrescar la pantalla.
        /// Escribir aquí todo el código referido al renderizado.
        /// </summary>
        /// <param name="elapsedTime">Tiempo en segundos transcurridos desde el último frame</param>
        public void render(float elapsedTime, TgcThirdPersonCamera camara)
        {
            //Ver cual de las mallas se interponen en la visión de la cámara en 3ra persona.
            List <TgcMesh> objectsInFront = new List <TgcMesh>();

            foreach (TgcMesh mesh in this.scene.Meshes)
            {
                Vector3 q;
                if (mesh.Name == "Vereda" || mesh.Name == "Bloque") //Vereda y calle siempre visible
                {
                    objectsInFront.Add(mesh);
                }
                else if (!TgcCollisionUtils.intersectSegmentAABB(camara.Position, camara.Target, mesh.BoundingBox, out q))
                {
                    if (String.Compare(mesh.Name, 0, "Box", 0, 3) != 0) //No renderizar bloques azules
                    {
                        objectsInFront.Add(mesh);
                    }
                }
            }

            //Render mallas que no se interponen
            foreach (TgcMesh mesh in objectsInFront)
            {
                mesh.render();
            }

            /*foreach (TgcMesh mesh in this.scene.Meshes)
             * {
             *  //Nos ocupamos solo de las mallas habilitadas
             *  if (mesh.Enabled)
             *  {
             *      //Solo mostrar la malla si colisiona contra el Frustum
             *      TgcCollisionUtils.FrustumResult r = TgcCollisionUtils.classifyFrustumAABB(this.frustum, mesh.BoundingBox);
             *      if (r != TgcCollisionUtils.FrustumResult.OUTSIDE)
             *          mesh.render();
             *  }
             * }*/
        }
        public override void Init()
        {
            //Cuerpo principal que se controla con el teclado
            box = TgcBox.fromSize(new Vector3(0, 10, 0), new Vector3(10, 10, 10), Color.Blue);

            //triangulo
            triangle    = new CustomVertex.PositionColored[3];
            triangle[0] = new CustomVertex.PositionColored(-100, 0, 0, Color.Red.ToArgb());
            triangle[1] = new CustomVertex.PositionColored(0, 0, 50, Color.Green.ToArgb());
            triangle[2] = new CustomVertex.PositionColored(0, 100, 0, Color.Blue.ToArgb());
            triagleAABB =
                TgcBoundingBox.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
            sphere = new TgcBoundingSphere(new Vector3(30, 20, -20), 15);

            //OBB: computar OBB a partir del AABB del mesh.
            var loader  = new TgcSceneLoader();
            var meshObb =
                loader.loadSceneFromFile(MediaDir +
                                         "MeshCreator\\Meshes\\Vehiculos\\StarWars-ATST\\StarWars-ATST-TgcScene.xml")
                .Meshes[0];

            obb = TgcObb.computeFromAABB(meshObb.BoundingBox);
            meshObb.dispose();
            obb.move(new Vector3(100, 0, 30));
            obb.setRotation(new Vector3(0, FastMath.PI / 4, 0));

            //Configurar camara en Tercer Persona
            camaraInterna = new TgcThirdPersonCamera(box.Position, 30, -75);
            Camara        = camaraInterna;
        }
Esempio n. 28
0
        public override void Init()
        {
            //En este ejemplo primero cargamos una escena 3D entera.
            var loader = new TgcSceneLoader();

            scene = loader.loadSceneFromFile(MediaDir + "MeshCreator\\Scenes\\Ciudad\\Ciudad-TgcScene.xml");

            physicsExample = new CubePhysic();
            //physicsExample.setHummer(mainMesh);
            scene.Meshes[0].Position = TGCVector3.Empty;
            physicsExample.setBuildings(scene.Meshes);
            physicsExample.Init(MediaDir);

            //Vamos a utilizar la camara en 3ra persona para que siga al objeto principal a medida que se mueve
            camaraInterna = new TgcThirdPersonCamera(physicsExample.getPositionHummer(), 250, 375);
            Camara        = camaraInterna;

            UserVars.addVar("HummerPositionX");
            UserVars.addVar("HummerPositionY");
            UserVars.addVar("HummerPositionZ");
            UserVars.addVar("HummerBodyPositionX");
            UserVars.addVar("HummerBodyPositionY");
            UserVars.addVar("HummerBodyPositionZ");
        }
Esempio n. 29
0
        public override void Init()
        {
            //Crear piso
            var pisoTexture = TgcTexture.createTexture(D3DDevice.Instance.Device, MediaDir + "Texturas\\tierra.jpg");

            piso = new TgcPlane(TGCVector3.Empty, new TGCVector3(2000, 0, 2000), TgcPlane.Orientations.XZplane, pisoTexture, 50f, 50f);
            //Cargar obstaculos y posicionarlos. Los obstáculos se crean con TgcBox en lugar de cargar un modelo.
            obstaculos = new List <TGCBox>();
            TGCBox obstaculo;

            float wallSize   = 1000;
            float wallHeight = 500;

            //Obstaculo 1
            obstaculo = TGCBox.fromExtremes(TGCVector3.Empty, new TGCVector3(wallSize, wallHeight, 10),
                                            TgcTexture.createTexture(D3DDevice.Instance.Device, MediaDir + "Texturas\\baldosaFacultad.jpg"));
            obstaculo.Transform = TGCMatrix.Translation(obstaculo.Position);
            obstaculos.Add(obstaculo);

            //Obstaculo 2
            obstaculo = TGCBox.fromExtremes(TGCVector3.Empty, new TGCVector3(10, wallHeight, wallSize),
                                            TgcTexture.createTexture(D3DDevice.Instance.Device, MediaDir + "Texturas\\madera.jpg"));
            obstaculo.Transform = TGCMatrix.Translation(obstaculo.Position);
            obstaculos.Add(obstaculo);

            //Obstaculo 3
            obstaculo = TGCBox.fromExtremes(new TGCVector3(0, 0, wallSize),
                                            new TGCVector3(wallSize, wallHeight, wallSize + 10),
                                            TgcTexture.createTexture(D3DDevice.Instance.Device, MediaDir + "Texturas\\granito.jpg"));
            obstaculo.Transform = TGCMatrix.Translation(obstaculo.Position);
            obstaculos.Add(obstaculo);

            //Obstaculo 4
            obstaculo = TGCBox.fromExtremes(new TGCVector3(wallSize, 0, 0),
                                            new TGCVector3(wallSize + 10, wallHeight, wallSize),
                                            TgcTexture.createTexture(D3DDevice.Instance.Device, MediaDir + "Texturas\\granito.jpg"));
            obstaculo.Transform = TGCMatrix.Translation(obstaculo.Position);
            obstaculos.Add(obstaculo);

            //Obstaculo 5
            obstaculo = TGCBox.fromExtremes(new TGCVector3(wallSize / 2, 0, wallSize - 400),
                                            new TGCVector3(wallSize + 10, wallHeight, wallSize - 400 + 10),
                                            TgcTexture.createTexture(D3DDevice.Instance.Device, MediaDir + "Texturas\\granito.jpg"));
            obstaculo.Transform = TGCMatrix.Translation(obstaculo.Position);
            obstaculos.Add(obstaculo);

            //Cargar personaje con animaciones
            var skeletalLoader = new TgcSkeletalLoader();

            personaje = skeletalLoader.loadMeshAndAnimationsFromFile(
                MediaDir + "SkeletalAnimations\\Robot\\Robot-TgcSkeletalMesh.xml",
                MediaDir + "SkeletalAnimations\\Robot\\",
                new[]
            {
                MediaDir + "SkeletalAnimations\\Robot\\Caminando-TgcSkeletalAnim.xml",
                MediaDir + "SkeletalAnimations\\Robot\\Parado-TgcSkeletalAnim.xml"
            });

            //Configurar animacion inicial
            personaje.playAnimation("Parado", true);
            //Escalarlo porque es muy grande
            personaje.Position = new TGCVector3(100, 0, 100);
            personaje.Scale    = new TGCVector3(0.75f, 0.75f, 0.75f);
            //Rotarlo 180° porque esta mirando para el otro lado
            personaje.RotateY(Geometry.DegreeToRadian(180f));

            //Configurar camara en Tercera Persona y la asigno al TGC.
            camaraInterna = new TgcThirdPersonCamera(personaje.Position, 200, -300);
            Camara        = camaraInterna;

            //Modifiers para modificar propiedades de la camara
            offsetHeightModifier  = AddFloat("offsetHeight", 0, 300, 100);
            offsetForwardModifier = AddFloat("offsetForward", -400, 0, -220);
            displacementModifier  = AddVertex2f("displacement", TGCVector2.Zero, new TGCVector2(100, 200), new TGCVector2(0, 100));
        }
Esempio n. 30
0
        public override void Init()
        {
            //Crear piso
            var pisoTexture = TgcTexture.createTexture(D3DDevice.Instance.Device, MediaDir + "Texturas\\tierra.jpg");

            piso           = TGCBox.fromSize(new TGCVector3(5000, 5, 5000), pisoTexture);
            piso.Transform = TGCMatrix.Scaling(piso.Scale)
                             * TGCMatrix.RotationYawPitchRoll(piso.Rotation.Y, piso.Rotation.X, piso.Rotation.Z)
                             * TGCMatrix.Translation(piso.Position);
            piso.Position = new TGCVector3(0, -60, 0);

            //Cargar obstaculos y posicionarlos. Los obstaculos se crean con TgcBox en lugar de cargar un modelo.
            obstaculos = new List <TGCBox>();
            sonidos    = new List <Tgc3dSound>();
            TGCBox     obstaculo;
            Tgc3dSound sound;

            //Obstaculo 1
            obstaculo = TGCBox.fromSize(new TGCVector3(80, 150, 80),
                                        TgcTexture.createTexture(D3DDevice.Instance.Device, MediaDir + "Texturas\\Quake\\TexturePack3\\goo2.jpg"));
            obstaculo.Position  = new TGCVector3(-250, 0, 0);
            obstaculo.Transform = TGCMatrix.Scaling(obstaculo.Scale)
                                  * TGCMatrix.RotationYawPitchRoll(obstaculo.Rotation.Y, obstaculo.Rotation.X, obstaculo.Rotation.Z)
                                  * TGCMatrix.Translation(obstaculo.Position);
            obstaculos.Add(obstaculo);

            //Sondio obstaculo 1
            //OJO, solo funcionan sonidos WAV Mono (No stereo). Hacer boton der => Propiedades sobre el archivo
            //y tiene que decir "1 Channel".
            sound = new Tgc3dSound(MediaDir + "Sound\\armonía, continuo.wav", obstaculo.Position, DirectSound.DsDevice);
            //Hay que configurar la mínima distancia a partir de la cual se empieza a atenuar el sonido 3D
            sound.MinDistance = 50f;
            sonidos.Add(sound);

            //Obstaculo 2
            obstaculo = TGCBox.fromSize(new TGCVector3(80, 300, 80),
                                        TgcTexture.createTexture(D3DDevice.Instance.Device,
                                                                 MediaDir + "Texturas\\Quake\\TexturePack3\\lun_dirt.jpg"));
            obstaculo.Position  = new TGCVector3(250, 0, 800);
            obstaculo.Transform = TGCMatrix.Translation(obstaculo.Position);
            obstaculos.Add(obstaculo);

            //Sondio obstaculo 2
            sound             = new Tgc3dSound(MediaDir + "Sound\\viento helado.wav", obstaculo.Position, DirectSound.DsDevice);
            sound.MinDistance = 50f;
            sonidos.Add(sound);

            //Obstaculo 3
            obstaculo = TGCBox.fromSize(new TGCVector3(80, 100, 150),
                                        TgcTexture.createTexture(D3DDevice.Instance.Device,
                                                                 MediaDir + "Texturas\\Quake\\TexturePack3\\Metal2_1.jpg"));
            obstaculo.Position  = new TGCVector3(500, 0, -400);
            obstaculo.Transform = TGCMatrix.Scaling(obstaculo.Scale)
                                  * TGCMatrix.RotationYawPitchRoll(obstaculo.Rotation.Y, obstaculo.Rotation.X, obstaculo.Rotation.Z)
                                  * TGCMatrix.Translation(obstaculo.Position);
            obstaculos.Add(obstaculo);

            //Sondio obstaculo 3
            sound             = new Tgc3dSound(MediaDir + "Sound\\risa de maníaco.wav", obstaculo.Position, DirectSound.DsDevice);
            sound.MinDistance = 50f;
            sonidos.Add(sound);

            //Cargar personaje principal
            var loader = new TgcSceneLoader();
            var scene  =
                loader.loadSceneFromFile(MediaDir + "MeshCreator\\Meshes\\Vehiculos\\Hummer\\Hummer-TgcScene.xml");

            personaje           = scene.Meshes[0];
            personaje.Position  = new TGCVector3(0, 0, 0);
            personaje.Transform = TGCMatrix.Scaling(personaje.Scale)
                                  * TGCMatrix.RotationYawPitchRoll(personaje.Rotation.Y, personaje.Rotation.X, personaje.Rotation.Z)
                                  * TGCMatrix.Translation(personaje.Position);

            //Hacer que el Listener del sonido 3D siga al personaje
            DirectSound.ListenerTracking = personaje;

            //Configurar camara en Tercer Persona
            camaraInterna = new TgcThirdPersonCamera(personaje.Position, 250, 500);
            Camara        = camaraInterna;

            //Ejecutar en loop los sonidos
            foreach (var s in sonidos)
            {
                s.play(true);
            }
        }