예제 #1
0
        //Metodos para el avion
        public void initPlane()
        {
            // Crear avion del jugador
            player = new Plane();

            // Crear la cámara
            cam = new FreeCam();
            cam.SetCenterTargetUp(CAM_DELTA, new Vector3(0, 0, 0), new Vector3(0, 1, 0), true);
            cam.Enable = true;
            GuiController.Instance.CurrentCamera = cam;

            if (!avion_inicializado)
            {
                // Crear modifiers

                GuiController.Instance.Modifiers.addBoolean("Modo capturar calaveras", "Activado", false);
                GuiController.Instance.Modifiers.addBoolean("BoundingBox Avión", "Activado", false);
                GuiController.Instance.Modifiers.addBoolean("BoundingBox Calaveras", "Activado", false);
                GuiController.Instance.Modifiers.addInt("Cantidad de objetivos", 0, 100, 10);
                GuiController.Instance.Modifiers.addFloat("Velocidad de aceleración", 0, 1500.0f, 500);
                GuiController.Instance.Modifiers.addFloat("Velocidad de rotación", 0.5f, 1.0f, 0.6f);
                GuiController.Instance.Modifiers.addFloat("Velocidad de pitch", 1.0f, 3.0f, 2.0f);
                GuiController.Instance.Modifiers.addFloat("Velocidad de roll", 1.0f, 3.0f, 2.5f);

                // Crear UserVars
                GuiController.Instance.UserVars.addVar("Posición en X");
                GuiController.Instance.UserVars.addVar("Posición en Y");
                GuiController.Instance.UserVars.addVar("Posición en Z");

                GuiController.Instance.Modifiers.addVertex3f("lightPos", new Vector3(-5000, -5000, -5000), new Vector3(5000, 8000, 5000), new Vector3(0, 4750, -2500));
            }

            avion_inicializado = true;
            ResetPlane();
        }
예제 #2
0
        public override void render(float elapsedTime)
        {
            Device d3dDevice = GuiController.Instance.D3dDevice;

            //Renderizar terreno

            pos_actual = GuiController.Instance.FpsCamera.getPosition();
            look_at_actual=GuiController.Instance.FpsCamera.getLookAt();

            normal_actual=look_at_actual-pos_actual;

            plano_vision = Plane.FromPointNormal(pos_actual, normal_actual);

            proy_pos_actual = pos_actual;
            proy_pos_actual.Y = 0;

            List<Vector3>a_borrar=new List<Vector3>();
            List<Vector3> a_revisar_para_generar = new List<Vector3>();

            //genero las posiciones de los centros que se requieran que aparezcan "a lo lejos"
            foreach (Vector3 posicion in posiciones_centros)
            {
             //Esta forma de averiguar que puntos estan delante de la camara funciona, pero no resultó performante, por lo que se reemplazo la condicion del if
             //if (esta_delante_del_plano(plano_vision, posicion))
               if (dist_menor_a_n_width(proy_pos_actual, posicion, 5))
                {
                    if (dist_mayor_a_n_width(proy_pos_actual, posicion, 3))
                        {
                            a_revisar_para_generar.Add(posicion);
                        }
                }
                else
                {
                    a_borrar.Add(posicion);
                }
            }

            foreach (Vector3 posicion_a_revisar in a_revisar_para_generar)
            {
                generar_puntos_alrededor(posicion_a_revisar);
            }

            foreach (Vector3 posicion_a_borrar in a_borrar)
            {
                posiciones_centros.Remove(posicion_a_borrar);
            }

            //renderizo terrenos de alta, media y baja calidad de acuerdo a la distancia a la que se encuentren de la proyeccion de la camara en el plano xz

            foreach (Vector3 posicion in posiciones_centros)
            {
                if (dist_menor_a_n_width(proy_pos_actual, posicion, 2))
                {
                    terrain_hq.render(posicion);
                    //terrain_hq.render();
                }
                else
                {
                    if (dist_menor_a_n_width(proy_pos_actual, posicion, 4))
                    {
                        terrain_mq.render(posicion);
                        //terrain_mq.render();
                    }
                    else
                    {
                        terrain_lq.render(posicion);
                        //terrain_lq.render();
                    }

                }
            }
        }
예제 #3
0
        private bool esta_delante_del_plano(Plane plano_actual, Vector3 punto)
        {
            //genero un punto atras del plano que este en una linea perpendicular al mismo y que contenga al punto analizado
            punto_para_proy.X = (valor_grande * normal_actual.X) + punto.X;
            punto_para_proy.Y = (valor_grande * normal_actual.Y) + punto.Y;
            punto_para_proy.Z = (valor_grande * normal_actual.Z) + punto.Z;

            punto_proy_en_pl = Plane.IntersectLine(plano_vision, punto_para_proy, punto);

            //este vector apunta desde el plano al punto (de forma perpendicular al plano)
            vector_final = punto - punto_proy_en_pl;

            //si el punto esta "por delante" del plano, devuelvo true
            if ((vector_final.X / normal_actual.X >= 0))
            {
                return true;
            }

            return false;
        }
예제 #4
0
        /// <summary>
        /// Método que se llama una sola vez,  al principio cuando se ejecuta el ejemplo.
        /// Escribir aquí todo el código de inicialización: cargar modelos, texturas, modifiers, uservars, etc.
        /// Borrar todo lo que no haga falta
        /// </summary>
        public override void init()
        {
            // Crear avion del jugador
            player = new Plane();

            // Crear la cámara
            cam = new FreeCam();
            cam.SetCenterTargetUp(CAM_DELTA, new Vector3(0, 0, 0), new Vector3(0, 1, 0), true);
            cam.Enable = true;
            GuiController.Instance.CurrentCamera = cam;

            GuiController.Instance.Modifiers.addFloat("Velocidad de rotación", 0.5f, 1.0f, 0.6f);
            GuiController.Instance.Modifiers.addFloat("Velocidad de pitch", 1.0f, 3.0f, 2.0f);
            GuiController.Instance.Modifiers.addFloat("Velocidad de roll", 1.0f, 3.0f, 2.5f);

            GuiController.Instance.UserVars.addVar("Posición en X");
            GuiController.Instance.UserVars.addVar("Posición en Y");
            GuiController.Instance.UserVars.addVar("Posición en Z");

            GuiController.Instance.UserVars.addVar("Avión respecto a X");
            GuiController.Instance.UserVars.addVar("Avión respecto a Y");
            GuiController.Instance.UserVars.addVar("Avión respecto a Z");

            Reset();
        }