示例#1
0
        public override void Init()
        {
            var d3dDevice = D3DDevice.Instance.Device;

            efecto = TgcShaders.loadEffect(GameModel.shadersDir + "shaderPlanta.fx");

            #region configurarObjetos
            helicoptero          = new TgcSceneLoader().loadSceneFromFile(GameModel.mediaDir + "modelos\\heliX-TgcScene.xml").Meshes[0];
            helicoptero.Scale    = new TGCVector3(10.5f, 10.5f, 10.5f);
            helicoptero.Position = new TGCVector3(5000f, 200f, 500f);
            helicoptero.RotateY(90);
            helicoptero.Effect    = efecto;
            helicoptero.Technique = "RenderScene";

            objetos.Add(helicoptero);

            helice          = new TgcSceneLoader().loadSceneFromFile(GameModel.mediaDir + "modelos\\heliceCero-TgcScene.xml").Meshes[0];
            helice.Scale    = new TGCVector3(10.5f, 10.5f, 10.5f);
            helice.Position = new TGCVector3(5000f, 200f, 420f);
            helice.RotateY(90);
            helice.Effect    = efecto;
            helice.Technique = "RenderScene";

            objetos.Add(helice);
            #endregion
        }
示例#2
0
        public override void Init()
        {
            //Color de fondo
            //GuiController.Instance.BackgroundColor = Color.DarkGray;

            //Camara en 1ra persona
            //GuiController.Instance.FpsCamera.Enable = true;
            //GuiController.Instance.FpsCamera.MovementSpeed = 100f;
            //GuiController.Instance.FpsCamera.JumpSpeed = 50f;
            //GuiController.Instance.FpsCamera.setCamera(new Vector3(40, 30, 35), new Vector3(0, 0, 0));

            this.effect = TgcShaders.loadEffect(this.pathRecursos + "Shaders\\ParcialPixelShader.fx");

            //Piso
            this.boxFloor        = TgcBox.fromSize(new Vector3(0, 0, 0), new Vector3(30, 0, 30), Color.DarkSeaGreen);
            this.boxFloor.Effect = this.effect;

            //Pared
            this.boxWall        = TgcBox.fromSize(new Vector3(0, 10, -15), new Vector3(30, 20, 0), Color.Red);
            this.boxWall.Effect = this.effect;

            //Figura
            this.boxFigure        = TgcBox.fromSize(new Vector3(0, 5, 0), new Vector3(10, 10, 5), Color.SteelBlue);
            this.boxFigure.Effect = this.effect;

            //Luz
            this.boxLuz = TgcBox.fromSize(new Vector3(0, 20, 20), new Vector3(2, 2, 2), Color.LightYellow);

            this.CrearTetera();
            this.CrearBuggy();
        }
        public void Init(TgcD3dInput Input)
        {
            crearTableroPicking(5, 9);

            pickingRay = new TgcPickingRay(Input);

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

            #region configurarEfecto
            efecto = TgcShaders.loadEffect(GameModel.shadersDir + "shaderPlanta.fx");
            #endregion

            #region contenedor
            contenedor           = new TgcSceneLoader().loadSceneFromFile(GameModel.mediaDir + "modelos\\contenedor-TgcScene.xml").Meshes[0];
            contenedor.Scale     = new TGCVector3(45.5f, 45.5f, 45.5f);
            contenedor.Position  = new TGCVector3(-2000f, 400f, -800f);
            contenedor.Effect    = efecto;
            contenedor.Technique = "RenderSceneProgresivo";

            objetos.Add(contenedor);
            //glowObjects.Add(contenedor);

            #endregion

            //este body seria del tablero o isla principal
            body     = FactoryBody.crearBodyIsla();
            callback = new CollisionCallbackIsla(logica);
            logica.addBulletObject(this);

            PostProcess.agregarPostProcessObject(this);
        }
示例#4
0
        public Zombie(TGCVector3 posicion, GameLogic logica)
        {
            body     = FactoryBody.crearBodyZombie(new TGCVector3(posicion.X, posicion.Y + 350, posicion.Z));
            callback = new CollisionCallbackZombie(logica, this);

            #region configurarEfecto
            var d3dDevice = D3DDevice.Instance.Device;
            efecto = TgcShaders.loadEffect(GameModel.shadersDir + "shaderPlanta.fx");
            //Texture bumpMap = TextureLoader.FromFile(d3dDevice, GameModel.mediaDir + "texturas\\terrain\\NormalMapNieve2.jpg");
            //efecto.SetValue("NormalMap", bumpMap);
            #endregion

            #region configurarObjeto
            zombie           = new TgcSceneLoader().loadSceneFromFile(GameModel.mediaDir + "modelos\\Zombie7-TgcScene.xml").Meshes[0];
            zombie.Scale     = new TGCVector3(55.5f, 55.5f, 55.5f);
            zombie.Position  = posicion;
            zombie.Effect    = efecto;
            zombie.Technique = "RenderScene";

            objetos.Add(zombie);

            globo           = new TgcSceneLoader().loadSceneFromFile(GameModel.mediaDir + "modelos\\GLOBO-TgcScene.xml").Meshes[0];
            globo.Scale     = new TGCVector3(40.5f, 40.5f, 40.5f);
            globo.Position  = posicion;
            globo.Effect    = efecto;
            globo.Technique = "RenderZombie";

            objetos.Add(globo);

            #endregion

            PostProcess.agregarPostProcessObject(this);
        }
示例#5
0
        public MenuItem(TGCVector3 posicion, string caption)
        {
            var d3dDevice = D3DDevice.Instance.Device;

            #region configurarEfecto
            efecto = TgcShaders.loadEffect(GameModel.shadersDir + "shaderPlanta.fx");
            #endregion

            #region configurarMesh
            mesh           = new TgcSceneLoader().loadSceneFromFile(GameModel.mediaDir + "modelos\\Tag-TgcScene.xml").Meshes[0];
            mesh.Scale     = new TGCVector3(200.5f, 75.5f, 85.5f);
            mesh.Position  = posicion;
            mesh.Effect    = efecto;
            mesh.Technique = "RenderScene";
            mesh.BoundingBox.setRenderColor(Color.Red);
            mesh.AutoTransform = true;
            #endregion

            #region texto
            //Crear texto 2, especificando color, alineacion, posicion, tamano y fuente.
            texto.Text     = caption;
            texto.Color    = Color.ForestGreen;
            texto.Align    = TgcText2D.TextAlign.LEFT;
            texto.Position = new Point((int)posicion.X + 300, (int)posicion.Y - 200);
            texto.Size     = new Size(800, 20);
            texto.changeFont(new System.Drawing.Font("Console", 45, FontStyle.Bold | FontStyle.Italic));
            #endregion
        }
示例#6
0
        public override void init()
        {
            Device d3dDevice = GuiController.Instance.D3dDevice;
            //Crear loader
            TgcSceneLoader loader = new TgcSceneLoader();

            //Cargar los mesh:
            scene = loader.loadSceneFromFile(GuiController.Instance.ExamplesMediaDir
                                             + "MeshCreator\\Meshes\\Vehiculos\\TanqueFuturistaRuedas\\TanqueFuturistaRuedas-TgcScene.xml");
            mesh          = scene.Meshes[0];
            mesh.Scale    = new Vector3(0.5f, 0.5f, 0.5f);
            mesh.Position = new Vector3(0f, 0f, 0f);

            //Cargar Shader personalizado
            effect = TgcShaders.loadEffect(GuiController.Instance.ExamplesDir + "Shaders\\WorkshopShaders\\Shaders\\BasicShader.fx");

            // le asigno el efecto a la malla
            mesh.Effect = effect;

            // indico que tecnica voy a usar
            // Hay effectos que estan organizados con mas de una tecnica.
            mesh.Technique = "RenderScene";

            //Centrar camara rotacional respecto a este mesh
            GuiController.Instance.RotCamera.targetObject(mesh.BoundingBox);

            time = 0;
        }
示例#7
0
        public static void Cargar()
        {
            Device d3dDevice = GuiController.Instance.D3dDevice;

            // Cargo el shader que tiene los efectos de postprocesado
            Shader = TgcShaders.loadEffect(GuiController.Instance.AlumnoEjemplosMediaDir + "RenderGroup\\shaders\\postProcess.fx");


            // Creo el quad que va a ocupar toda la pantalla
            CustomVertex.PositionTextured[] screenQuadVertices = new CustomVertex.PositionTextured[]
            {
                new CustomVertex.PositionTextured(-1, 1, 1, 0, 0),
                new CustomVertex.PositionTextured(1, 1, 1, 1, 0),
                new CustomVertex.PositionTextured(-1, -1, 1, 0, 1),
                new CustomVertex.PositionTextured(1, -1, 1, 1, 1)
            };

            ScreenQuad = new VertexBuffer(typeof(CustomVertex.PositionTextured),
                                          4, GuiController.Instance.D3dDevice, Usage.Dynamic | Usage.WriteOnly,
                                          CustomVertex.PositionTextured.Format, Pool.Default);
            ScreenQuad.SetData(screenQuadVertices, 0, LockFlags.None);

            // Creamos un render targer sobre el cual se va a dibujar la pantalla
            RenderTargetPostprocesado = new Texture(d3dDevice, d3dDevice.PresentationParameters.BackBufferWidth
                                                    , d3dDevice.PresentationParameters.BackBufferHeight, 1, Usage.RenderTarget,
                                                    Format.X8R8G8B8, Pool.Default);

            #region VALORES DE INTERPOLACION
            intVaivenOscurecer       = new InterpoladorVaiven();
            intVaivenOscurecer.Min   = 1;
            intVaivenOscurecer.Max   = 15;
            intVaivenOscurecer.Speed = 40f;
            intVaivenOscurecer.reset();
            #endregion
        }
        public void Init(TgcD3dInput input)
        {
            gameObjects.ForEach(g => g.Init());

            #region configurarEfecto
            var d3dDevice = D3DDevice.Instance.Device;

            efecto = TgcShaders.loadEffect(GameModel.shadersDir + "shaderPlanta.fx");
            #endregion

            #region configurarObjeto
            zombie           = new TgcSceneLoader().loadSceneFromFile(GameModel.mediaDir + "modelos\\Zombie7-TgcScene.xml").Meshes[0];
            zombie.Scale     = new TGCVector3(55.5f, 55.5f, 55.5f);
            zombie.Position  = new TGCVector3(0, 360, 0);
            zombie.Effect    = efecto;
            zombie.Technique = "RenderScene";

            globo           = new TgcSceneLoader().loadSceneFromFile(GameModel.mediaDir + "modelos\\GLOBO-TgcScene.xml").Meshes[0];
            globo.Scale     = new TGCVector3(40.5f, 40.5f, 40.5f);
            globo.Position  = new TGCVector3(0, 760, 0);;
            globo.Effect    = efecto;
            globo.Technique = "RenderZombie";

            #endregion
        }
示例#9
0
        public override void Init()
        {
            var d3dDevice = D3DDevice.Instance.Device;

            #region configurarEfecto
            Texture alphaMap = TextureLoader.FromFile(d3dDevice, GameModel.mediaDir + "texturas\\terrain\\Heightmap3_1.jpg");
            efecto = TgcShaders.loadEffect(GameModel.shadersDir + "shaderTierra.fx");
            efecto.SetValue("alphaMap", alphaMap);

            Texture mainText = TextureLoader.FromFile(d3dDevice, GameModel.mediaDir + "texturas\\terrain\\terreno.jpg");
            efecto.SetValue("mainText", mainText);
            #endregion

            #region configurarObjeto
            terrain.loadTexture(GameModel.mediaDir + "texturas\\terrain\\TerrainTexture1.jpg");
            terrain.loadHeightmap(GameModel.mediaDir + "texturas\\terrain\\Heightmap3.jpg", 255f, 1.6f, new TGCVector3(0, -100, 0));
            terrain.Effect    = efecto;
            terrain.Technique = "RenderScene";
            tecnica           = "RenderScene";

            objetos.Add(terrain);
            #endregion

            PostProcess.agregarPostProcessObject(this);
        }
示例#10
0
 public ReflejoLuzEnAuto(TgcMesh autoMesh)
 {
     meshDeAuto = autoMesh;
     effect     = TgcShaders.loadEffect(GuiController.Instance.ExamplesDir + "Media\\Shaders\\BumpMapping.fx");
     ConfigReflection();
     isConfigInitialize = true;
 }
示例#11
0
        //TGCSphere vida;  //si uso sphere funciona, con mesh no

        public Vida( )
        {
            body = FactoryBody.crearBodyEsfericoEstatico(new TGCVector3(1300f, 360f, 1500f), radio);

            #region configurarEfecto
            efecto = TgcShaders.loadEffect(GameModel.shadersDir + "shaderPlanta.fx");
            #endregion

            #region configurarObjeto

            vida           = new TgcSceneLoader().loadSceneFromFile(GameModel.mediaDir + "modelos\\vida-TgcScene.xml").Meshes[0];
            vida.Scale     = new TGCVector3(20.5f, 10.5f, 20.5f);
            vida.Effect    = efecto;
            vida.Technique = "RenderScene";
            vida.RotateY(90);
            //vida.Transform = new TGCMatrix(body.InterpolationWorldTransform);
            //vida.UpdateMeshTransform();

            //var texture = TgcTexture.createTexture(D3DDevice.Instance.Device, GameModel.mediaDir + "texturas\\terrain\\NormalMapMar.png");
            //vida = new TGCSphere(1, texture.Clone(), TGCVector3.Empty);
            ////Tgc no crea el vertex buffer hasta invocar a update values.
            //vida.updateValues();

            objetos.Add(vida);
            //glowObjects.Add(vida);

            #endregion
        }
示例#12
0
        public override void Init()
        {
            //Cargar shader de este ejemplo
            effect = TgcShaders.loadEffect(ShadersDir + "EjemploGetZBuffer.fx");

            //Cargamos un escenario
            var loader = new TgcSceneLoader();
            var scene  = loader.loadSceneFromFile(MediaDir + "MeshCreator\\Scenes\\Deposito\\Deposito-TgcScene.xml");

            meshes = scene.Meshes;
            foreach (var mesh in meshes)
            {
                mesh.Effect = effect;
            }

            //Crear textura para almacenar el zBuffer. Es una textura que se usa como RenderTarget y que tiene un formato de 1 solo float de 32 bits.
            //En cada pixel no vamos a guardar un color sino el valor de Z de la escena
            //La creamos con un solo nivel de mipmap (el original)
            zBufferTexture = new Texture(D3DDevice.Instance.Device, D3DDevice.Instance.Device.Viewport.Width,
                                         D3DDevice.Instance.Device.Viewport.Height, 1,
                                         Usage.RenderTarget, Format.R32F, Pool.Default);

            //Camara en 1ra persona
            Camara = new TgcFpsCamera(new Vector3(-20, 80, 450), 400f, 300f);
        }
        public override void Init()
        {
            var d3dDevice = D3DDevice.Instance.Device;

            efecto  = TgcShaders.loadEffect(GameModel.shadersDir + "shaderCielo.fx");
            tecnica = "RenderScene";

            #region configurarObjeto
            skybox.Center = TGCVector3.Empty;

            skybox.Size = new TGCVector3(50000, 10000, 50000);

            var texturesPath = GameModel.mediaDir + "texturas\\skybox\\";

            //Configurar las texturas para cada una de las 6 caras
            skybox.setFaceTexture(SkyboxShader.SkyFaces.Up, texturesPath + "up1.jpg");
            skybox.setFaceTexture(SkyboxShader.SkyFaces.Down, texturesPath + "down1.jpg");
            skybox.setFaceTexture(SkyboxShader.SkyFaces.Left, texturesPath + "left1.jpg");
            skybox.setFaceTexture(SkyboxShader.SkyFaces.Right, texturesPath + "rigth1.jpg");
            skybox.setFaceTexture(SkyboxShader.SkyFaces.Front, texturesPath + "front1.jpg");
            skybox.setFaceTexture(SkyboxShader.SkyFaces.Back, texturesPath + "back1.jpg");
            skybox.SkyEpsilon = 25f;

            skybox.Init();
            objetos.Add(skybox);

            #endregion
        }
示例#14
0
 private void cargarShaders()
 {
     TecnicaOriginal          = this.getMesh().Technique;
     efectoOriginal           = this.getMesh().Effect;
     efectoShaderChoque       = TgcShaders.loadEffect(this.env.ShadersDir + "EfectoMetal_ConChoque.fx");
     this.getMesh().Technique = "RenderScene";
 }
示例#15
0
        public override void Init()
        {
            //Crear loader
            var loader = new TgcSceneLoader();

            //Cargar los mesh:
            scene =
                loader.loadSceneFromFile(MediaDir +
                                         "MeshCreator\\Meshes\\Vehiculos\\TanqueFuturistaRuedas\\TanqueFuturistaRuedas-TgcScene.xml");
            mesh          = scene.Meshes[0];
            mesh.Scale    = new Vector3(0.5f, 0.5f, 0.5f);
            mesh.Position = new Vector3(0f, 0f, 0f);

            //Cargar Shader personalizado
            effect = TgcShaders.loadEffect(ShadersDir + "WorkshopShaders\\BasicShader.fx");

            // le asigno el efecto a la malla
            mesh.Effect = effect;

            // indico que tecnica voy a usar
            // Hay effectos que estan organizados con mas de una tecnica.
            mesh.Technique = "RenderScene";

            //Centrar camara rotacional respecto a este mesh

            Camara = new TgcRotationalCamera(mesh.BoundingBox.calculateBoxCenter(),
                                             mesh.BoundingBox.calculateBoxRadius() * 5, Input);

            time = 0;
        }
 public void CreateMesh(TgcMesh mesh)
 {
     this.mesh = mesh;
     this.mesh.AutoTransform = false;
     this.Transform();
     this.mesh.Effect    = TgcShaders.loadEffect(GlobalConcepts.GetInstance().GetShadersDir() + "Portal.fx");
     this.mesh.Technique = "Portal";
 }
示例#17
0
        protected void InitializeShadersAndEffects()
        {
            // Toon Shader
            toonFX = TgcShaders.loadEffect(Game.Default.ShadersDirectory + "ToonShading.fx");

            // Explosion Shader
            explosionFX = TgcShaders.loadEffect(Game.Default.ShadersDirectory + "Explosion.fx");
        }
        public void Init(GameLogic logica, Plataforma plataformaSeleccionada)
        {
            this.logica = logica;
            plataforma  = plataformaSeleccionada;

            #region configurarEfecto
            efecto = TgcShaders.loadEffect(GameModel.shadersDir + "shaderPlanta.fx");
            #endregion
        }
示例#19
0
        public override void Init()
        {
            //Se crean 2 triangulos (o Quad) con las dimensiones de la pantalla con sus posiciones ya transformadas
            // x = -1 es el extremo izquiedo de la pantalla, x = 1 es el extremo derecho
            // Lo mismo para la Y con arriba y abajo
            // la Z en 1 simpre
            CustomVertex.PositionTextured[] screenQuadVertices =
            {
                new CustomVertex.PositionTextured(-1,  1, 1, 0, 0),
                new CustomVertex.PositionTextured(1,   1, 1, 1, 0),
                new CustomVertex.PositionTextured(-1, -1, 1, 0, 1),
                new CustomVertex.PositionTextured(1,  -1, 1, 1, 1)
            };
            //vertex buffer de los triangulos
            screenQuadVB = new VertexBuffer(typeof(CustomVertex.PositionTextured), 4, D3DDevice.Instance.Device, Usage.Dynamic | Usage.WriteOnly,
                                            CustomVertex.PositionTextured.Format, Pool.Default);
            screenQuadVB.SetData(screenQuadVertices, 0, LockFlags.None);

            //Creamos un Render Targer sobre el cual se va a dibujar la pantalla
            renderTarget2D = new Texture(D3DDevice.Instance.Device, D3DDevice.Instance.Device.PresentationParameters.BackBufferWidth,
                                         D3DDevice.Instance.Device.PresentationParameters.BackBufferHeight, 1, Usage.RenderTarget, Format.X8R8G8B8, Pool.Default);

            //Creamos un DepthStencil que debe ser compatible con nuestra definicion de renderTarget2D.
            depthStencil = D3DDevice.Instance.Device.CreateDepthStencilSurface(D3DDevice.Instance.Device.PresentationParameters.BackBufferWidth,
                                                                               D3DDevice.Instance.Device.PresentationParameters.BackBufferHeight, DepthFormat.D24S8, MultiSampleType.None, 0, true);
            depthStencilOld = D3DDevice.Instance.Device.DepthStencilSurface;
            //Cargar shader con efectos de Post-Procesado
            effect = TgcShaders.loadEffect(ShadersDir + "PostProcess.fx");

            //Configurar Technique dentro del shader
            effect.Technique = "AlarmaTechnique";

            //Cargar textura que se va a dibujar arriba de la escena del Render Target
            alarmTexture = TgcTexture.createTexture(D3DDevice.Instance.Device, MediaDir + "Texturas\\efecto_alarma.png");

            //Interpolador para efecto de variar la intensidad de la textura de alarma
            intVaivenAlarm       = new InterpoladorVaiven();
            intVaivenAlarm.Min   = 0;
            intVaivenAlarm.Max   = 1;
            intVaivenAlarm.Speed = 5;
            intVaivenAlarm.reset();

            //Cargamos un escenario
            var loader = new TgcSceneLoader();
            var scene  = loader.loadSceneFromFile(MediaDir + "MeshCreator\\Scenes\\Deposito\\Deposito-TgcScene.xml");

            meshes = scene.Meshes;

            //Camara en primera personas
            Camara = new TgcFpsCamera(new TGCVector3(250, 160, -570), Input);

            //Modifier para activar/desactivar efecto de alarma
            activarEfectoModifier = AddBoolean("activar_efecto", "Activar efecto", true);

            //Modifier para activar/desactivar stensil para ver como el ejemplo se rompe.
            activarStencilModifier = AddBoolean("activar_stencil", "Activar stensil", true);
        }
示例#20
0
 private void cargarShaders()
 {
     efectoOlas         = TgcShaders.loadEffect(GuiController.Instance.AlumnoEjemplosMediaDir + "RenderGroup\\shaders\\shaderOlas.fx");
     terrain.Effect     = efectoOlas;
     terrain.Technique  = "RenderScene";
     efectoCascada      = TgcShaders.loadEffect(GuiController.Instance.AlumnoEjemplosMediaDir + "RenderGroup\\shaders\\shaderCascada.fx");
     terrain2.Effect    = efectoCascada;
     terrain2.Technique = "RenderScene";
 }
示例#21
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);
        }
示例#22
0
        public override void init()
        {
            Device d3dDevice = GuiController.Instance.D3dDevice;

            //Cargar escenario
            TgcSceneLoader loader = new TgcSceneLoader();

            scene = loader.loadSceneFromFile(GuiController.Instance.ExamplesMediaDir + "MeshCreator\\Scenes\\Deposito\\Deposito-TgcScene.xml");

            //Camara en 1ra persona
            GuiController.Instance.FpsCamera.Enable        = true;
            GuiController.Instance.FpsCamera.MovementSpeed = 400f;
            GuiController.Instance.FpsCamera.JumpSpeed     = 300f;
            GuiController.Instance.FpsCamera.setCamera(new Vector3(-210.0958f, 114.911f, -109.2159f), new Vector3(-209.559f, 114.8029f, -108.3791f));

            //Cargar Shader personalizado de MultiDiffuseLights

            /*
             * Cargar Shader personalizado de MultiDiffuseLights
             * Este Shader solo soporta TgcMesh con RenderType DIFFUSE_MAP (que son las unicas utilizadas en este ejemplo)
             * El shader toma 4 luces a la vez para iluminar un mesh.
             * Pero como hacer 4 veces los calculos en el shader es costoso, de cada luz solo calcula el componente Diffuse.
             */
            effect = TgcShaders.loadEffect(GuiController.Instance.ExamplesMediaDir + "Shaders\\MultiDiffuseLights.fx");


            //Crear 4 mesh para representar las 4 para la luces. Las ubicamos en distintas posiciones del escenario, cada una con un color distinto.
            lightMeshes  = new TgcBox[4];
            origLightPos = new Vector3[lightMeshes.Length];
            Color[] c = new Color[4] {
                Color.Red, Color.Blue, Color.Green, Color.Yellow
            };
            for (int i = 0; i < lightMeshes.Length; i++)
            {
                Color co = c[i % c.Length];
                lightMeshes[i]  = TgcBox.fromSize(new Vector3(10, 10, 10), co);
                origLightPos[i] = new Vector3(-40, 20 + i * 20, 400);
            }

            //Modifiers
            GuiController.Instance.Modifiers.addBoolean("lightEnable", "lightEnable", true);
            GuiController.Instance.Modifiers.addBoolean("lightMove", "lightMove", true);
            GuiController.Instance.Modifiers.addFloat("lightIntensity", 0, 150, 38);
            GuiController.Instance.Modifiers.addFloat("lightAttenuation", 0.1f, 2, 0.15f);

            GuiController.Instance.Modifiers.addColor("mEmissive", Color.Black);
            GuiController.Instance.Modifiers.addColor("mDiffuse", Color.White);


            //Interpolador para mover las luces de un lado para el otro
            interp         = new InterpoladorVaiven();
            interp.Min     = -200f;
            interp.Max     = 200f;
            interp.Speed   = 100f;
            interp.Current = 0f;
        }
示例#23
0
        public override void init()
        {
            Device d3dDevice = GuiController.Instance.D3dDevice;

            //Activamos el renderizado customizado. De esta forma el framework nos delega control total sobre como dibujar en pantalla
            //La responsabilidad cae toda de nuestro lado
            GuiController.Instance.CustomRenderEnabled = true;


            //Se crean 2 triangulos (o Quad) con las dimensiones de la pantalla con sus posiciones ya transformadas
            // x = -1 es el extremo izquiedo de la pantalla, x = 1 es el extremo derecho
            // Lo mismo para la Y con arriba y abajo
            // la Z en 1 simpre
            CustomVertex.PositionTextured[] screenQuadVertices = new CustomVertex.PositionTextured[]
            {
                new CustomVertex.PositionTextured(-1, 1, 1, 0, 0),
                new CustomVertex.PositionTextured(1, 1, 1, 1, 0),
                new CustomVertex.PositionTextured(-1, -1, 1, 0, 1),
                new CustomVertex.PositionTextured(1, -1, 1, 1, 1)
            };
            //vertex buffer de los triangulos
            screenQuadVB = new VertexBuffer(typeof(CustomVertex.PositionTextured),
                                            4, d3dDevice, Usage.Dynamic | Usage.WriteOnly,
                                            CustomVertex.PositionTextured.Format, Pool.Default);
            screenQuadVB.SetData(screenQuadVertices, 0, LockFlags.None);

            //Creamos un Render Targer sobre el cual se va a dibujar la pantalla
            renderTarget2D = new Texture(d3dDevice, d3dDevice.PresentationParameters.BackBufferWidth
                                         , d3dDevice.PresentationParameters.BackBufferHeight, 1, Usage.RenderTarget,
                                         Format.X8R8G8B8, Pool.Default);


            //Cargar shader con efectos de Post-Procesado
            effect = TgcShaders.loadEffect(GuiController.Instance.ExamplesMediaDir + "Shaders\\PostProcess.fx");

            //Configurar Technique dentro del shader
            effect.Technique = "OndasTechnique";


            //Cargamos un escenario
            TgcSceneLoader loader = new TgcSceneLoader();
            TgcScene       scene  = loader.loadSceneFromFile(GuiController.Instance.ExamplesMediaDir + "MeshCreator\\Scenes\\Deposito\\Deposito-TgcScene.xml");

            meshes = scene.Meshes;


            //Camara en primera personas
            GuiController.Instance.FpsCamera.Enable = true;
            GuiController.Instance.FpsCamera.setCamera(new Vector3(-182.3816f, 82.3252f, -811.9061f), new Vector3(-182.0957f, 82.3147f, -810.9479f));


            //Modifier para variar tamaño de ondas
            GuiController.Instance.Modifiers.addBoolean("activar_efecto", "Activar efecto", true);
            GuiController.Instance.Modifiers.addFloat("wave_length", 0, 300, 200);
            GuiController.Instance.Modifiers.addFloat("wave_size", 0.01f, 1, 0.01f);
        }
示例#24
0
        public ShadowMap(GameModel gm)
        {
            effect    = TgcShaders.loadEffect(gm.ShadersDir + "ShadowMap.fx");
            gameModel = gm;
            mapScene  = gm.MapScene;
            Camara    = gm.Camara;

            foreach (var m in mapScene.Meshes)
            {
                m.Effect    = effect;
                m.Technique = "RenderShadow";
            }

            //--------------------------------------------------------------------------------------
            // Creo el shadowmap.
            // Format.R32F
            // Format.X8R8G8B8
            g_pShadowMap = new Texture(D3DDevice.Instance.Device, SHADOWMAP_SIZE, SHADOWMAP_SIZE,
                                       1, Usage.RenderTarget, Format.R32F,
                                       Pool.Default);

            // tengo que crear un stencilbuffer para el shadowmap manualmente
            // para asegurarme que tenga la el mismo tamano que el shadowmap, y que no tenga
            // multisample, etc etc.
            g_pDSShadow = D3DDevice.Instance.Device.CreateDepthStencilSurface(SHADOWMAP_SIZE,
                                                                              SHADOWMAP_SIZE,
                                                                              DepthFormat.D24S8,
                                                                              MultiSampleType.None,
                                                                              0,
                                                                              true);
            // por ultimo necesito una matriz de proyeccion para el shadowmap, ya
            // que voy a dibujar desde el pto de vista de la luz.
            // El angulo tiene que ser mayor a 45 para que la sombra no falle en los extremos del cono de luz
            // de hecho, un valor mayor a 90 todavia es mejor, porque hasta con 90 grados es muy dificil
            // lograr que los objetos del borde generen sombras
            var aspectRatio = D3DDevice.Instance.AspectRatio;

            g_mShadowProj = Matrix.PerspectiveFovLH(Geometry.DegreeToRadian(80), aspectRatio, 50, 5000);
            D3DDevice.Instance.Device.Transform.Projection =
                Matrix.PerspectiveFovLH(Geometry.DegreeToRadian(45.0f), aspectRatio, near_plane, far_plane);

            arrow           = new TgcArrow();
            arrow.Thickness = 1f;
            arrow.HeadSize  = new Vector2(2f, 2f);
            arrow.BodyColor = Color.Blue;

            //donde esta y a donde apunta la luz
            lightLookFrom = new Vector3(80, 120, 0);
            g_LightPos    = lightLookFrom;
            lightLookAt   = new Vector3(0, 0, 0);
            g_LightDir    = lightLookAt;



            float K = 300;
        }
示例#25
0
        public ManejoIluminacion()
        {
            Device d3dDevice         = GuiController.Instance.D3dDevice;
            string alumnoMediaFolder = GuiController.Instance.AlumnoEjemplosDir;

            effectSpotYPoint  = TgcShaders.loadEffect(alumnoMediaFolder + "CucarachaJugosita\\spotYPoint.fx");
            effectPointYPoint = TgcShaders.loadEffect(alumnoMediaFolder + "CucarachaJugosita\\pointYPoint.fx");
            //effectSpotYPoint = GuiController.Instance.Shaders.TgcMeshPointLightShader; ;
            //effect.Technique = "MultiplesLuces";
        }
示例#26
0
        public SmartTerrain()
        {
            enabled          = true;
            alphaBlendEnable = false;

            //Shader
            Effect    = TgcShaders.loadEffect(GuiController.Instance.ExamplesDir + "TerrainEditor\\Shaders\\EditableTerrain.fx");
            Technique = "PositionColoredTextured";

            aabb = new TgcBoundingBox();
        }
        public PuntoDeLuz(TwistedMetal env, Vector3 Posicion)
        {
            this.env  = env;
            lighthPos = Posicion;
            float t = 10f;

            lightMesh = TgcBox.fromSize(lighthPos, new Vector3(t, t, t), Color.White);
            lightMesh.AutoTransformEnable = false;
            lightMesh.updateValues();
            //currentShader = TgcShaders.Instance.TgcMeshPointLightShader;
            currentShader = TgcShaders.loadEffect(this.env.ShadersDir + "TgcMeshSpotLightShader.fx");
        }
示例#28
0
        private void AplicarShaders(String shaderDir)
        {
            efectoOlas = TgcShaders.loadEffect(shaderDir + "ShaderOlas.fx");

            foreach (TgcMesh mesh in aguas)
            {
                mesh.Effect    = efectoOlas;
                mesh.Technique = "Olas";
            }
            efectoOlas.SetValue("screen_dx", resolucionX);
            efectoOlas.SetValue("screen_dy", resolucionY);
        }
示例#29
0
        public override void Init()
        {
            //Cargar escenario
            var loader = new TgcSceneLoader();

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

            //Camara en 1ra persona
            Camara = new TgcFpsCamera(new Vector3(260f, 170f, 390f), 400f, 300f, Input);

            //Cargar Shader personalizado de MultiDiffuseLights

            /*
             * Cargar Shader personalizado de MultiDiffuseLights
             * Este Shader solo soporta TgcMesh con RenderType DIFFUSE_MAP (que son las unicas utilizadas en este ejemplo)
             * El shader toma 4 luces a la vez para iluminar un mesh.
             * Pero como hacer 4 veces los calculos en el shader es costoso, de cada luz solo calcula el componente Diffuse.
             */
            effect = TgcShaders.loadEffect(ShadersDir + "MultiDiffuseLights.fx");

            //Crear 4 mesh para representar las 4 para la luces. Las ubicamos en distintas posiciones del escenario, cada una con un color distinto.
            lightMeshes  = new TgcBox[4];
            origLightPos = new Vector3[lightMeshes.Length];
            var c = new Color[4] {
                Color.Red, Color.Blue, Color.Green, Color.Yellow
            };

            for (var i = 0; i < lightMeshes.Length; i++)
            {
                var co = c[i % c.Length];
                lightMeshes[i] = TgcBox.fromSize(new Vector3(10, 10, 10), co);
                lightMeshes[i].AutoTransformEnable = true;
                origLightPos[i] = new Vector3(-40, 20 + i * 20, 400);
            }

            //Modifiers
            Modifiers.addBoolean("lightEnable", "lightEnable", true);
            Modifiers.addBoolean("lightMove", "lightMove", true);
            Modifiers.addFloat("lightIntensity", 0, 150, 38);
            Modifiers.addFloat("lightAttenuation", 0.1f, 2, 0.15f);

            Modifiers.addColor("mEmissive", Color.Black);
            Modifiers.addColor("mDiffuse", Color.White);

            //Interpolador para mover las luces de un lado para el otro
            interp         = new InterpoladorVaiven();
            interp.Min     = -200f;
            interp.Max     = 200f;
            interp.Speed   = 100f;
            interp.Current = 0f;
        }
示例#30
0
        public override void Init()
        {
            //Se crean 2 triangulos (o Quad) con las dimensiones de la pantalla con sus posiciones ya transformadas
            // x = -1 es el extremo izquiedo de la pantalla, x = 1 es el extremo derecho
            // Lo mismo para la Y con arriba y abajo
            // la Z en 1 simpre
            CustomVertex.PositionTextured[] screenQuadVertices =
            {
                new CustomVertex.PositionTextured(-1,  1, 1, 0, 0),
                new CustomVertex.PositionTextured(1,   1, 1, 1, 0),
                new CustomVertex.PositionTextured(-1, -1, 1, 0, 1),
                new CustomVertex.PositionTextured(1,  -1, 1, 1, 1)
            };
            //vertex buffer de los triangulos
            screenQuadVB = new VertexBuffer(typeof(CustomVertex.PositionTextured),
                                            4, D3DDevice.Instance.Device, Usage.Dynamic | Usage.WriteOnly,
                                            CustomVertex.PositionTextured.Format, Pool.Default);
            screenQuadVB.SetData(screenQuadVertices, 0, LockFlags.None);

            //Creamos un Render Targer sobre el cual se va a dibujar la pantalla
            renderTarget2D = new Texture(D3DDevice.Instance.Device,
                                         D3DDevice.Instance.Device.PresentationParameters.BackBufferWidth
                                         , D3DDevice.Instance.Device.PresentationParameters.BackBufferHeight, 1, Usage.RenderTarget,
                                         Format.X8R8G8B8, Pool.Default);

            //Creamos un DepthStencil que debe ser compatible con nuestra definicion de renderTarget2D.
            depthStencil =
                D3DDevice.Instance.Device.CreateDepthStencilSurface(
                    D3DDevice.Instance.Device.PresentationParameters.BackBufferWidth,
                    D3DDevice.Instance.Device.PresentationParameters.BackBufferHeight,
                    DepthFormat.D24S8, MultiSampleType.None, 0, true);

            //Cargar shader con efectos de Post-Procesado
            effect = TgcShaders.loadEffect(ShadersDir + "PostProcess.fx");

            //Configurar Technique dentro del shader
            effect.Technique = "OndasTechnique";

            //Cargamos un escenario
            var loader = new TgcSceneLoader();
            var scene  = loader.loadSceneFromFile(MediaDir + "MeshCreator\\Scenes\\Deposito\\Deposito-TgcScene.xml");

            meshes = scene.Meshes;

            //Camara en primera personas
            Camara = new TgcFpsCamera(new Vector3(250, 160, -570), Input);

            //Modifier para variar tamano de ondas
            Modifiers.addBoolean("activar_efecto", "Activar efecto", true);
            Modifiers.addFloat("wave_length", 0, 300, 200);
            Modifiers.addFloat("wave_size", 0.01f, 1, 0.01f);
        }