コード例 #1
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;

            //Creamos un FullScreen Quad
            screenQuad = new TgcScreenQuad();


            //Creamos un Render Targer sobre el cual se va a dibujar toda la escena original
            int backBufferWidth  = d3dDevice.PresentationParameters.BackBufferWidth;
            int backBufferHeight = d3dDevice.PresentationParameters.BackBufferHeight;

            sceneRT = new Texture(d3dDevice, backBufferWidth, backBufferHeight, 1, Usage.RenderTarget, Format.X8R8G8B8, Pool.Default);

            //Definimos el tamaño de una textura que sea de 1/4 x 1/4 de la original, y que sean divisibles por 8 para facilitar los calculos de sampleo
            int cropWidth  = (backBufferWidth - backBufferWidth % 8) / 4;
            int cropHeight = (backBufferHeight - backBufferHeight % 8) / 4;

            //Creamos un Render Target para auxiliar para almacenar la pasada horizontal de blur
            blurTempRT = new Texture(d3dDevice, cropWidth, cropHeight, 1, Usage.RenderTarget, Format.X8R8G8B8, Pool.Default);


            //Cargar shader con efectos de Post-Procesado
            effect = TgcShaders.loadEffect(GuiController.Instance.ExamplesMediaDir + "Shaders\\GaussianBlur.fx");
            //Configurar Technique dentro del shader
            effect.Technique = "GaussianBlurPass";


            //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.MovementSpeed *= 2;
            GuiController.Instance.FpsCamera.setCamera(new Vector3(-182.3816f, 82.3252f, -811.9061f), new Vector3(-182.0957f, 82.3147f, -810.9479f));


            //Modifier para activar/desactivar efecto
            GuiController.Instance.Modifiers.addBoolean("activar_efecto", "Activar efecto", true);
            GuiController.Instance.Modifiers.addFloat("deviation", 1, 5, 1);
        }
コード例 #2
0
        public FullscreenQuad(Effect effect)
        {
            this.unEfecto = effect;
            this.unQuad   = new TgcScreenQuad();

            var d3dDevice = D3DDevice.Instance.Device;

            // Creamos un FullScreen Quad
            CustomVertex.PositionTextured[] vertices =
            {
                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
            this.unQuad.ScreenQuadVB = new VertexBuffer(typeof(CustomVertex.PositionTextured), 4, d3dDevice, Usage.Dynamic | Usage.WriteOnly, CustomVertex.PositionTextured.Format, Pool.Default);
            this.unQuad.ScreenQuadVB.SetData(vertices, 0, LockFlags.None);
        }
コード例 #3
0
        public override void Init()
        {
            //Creamos un FullScreen Quad
            screenQuad = new TgcScreenQuad();

            //Creamos un Render Targer sobre el cual se va a dibujar toda la escena original
            var backBufferWidth  = D3DDevice.Instance.Device.PresentationParameters.BackBufferWidth;
            var backBufferHeight = D3DDevice.Instance.Device.PresentationParameters.BackBufferHeight;

            sceneRT = new Texture(D3DDevice.Instance.Device, backBufferWidth, backBufferHeight, 1, Usage.RenderTarget,
                                  Format.X8R8G8B8,
                                  Pool.Default);

            //Definimos el tamaño de una textura que sea de 1/4 x 1/4 de la original, y que sean divisibles por 8 para facilitar los calculos de sampleo
            var cropWidth  = (backBufferWidth - backBufferWidth % 8) / 4;
            var cropHeight = (backBufferHeight - backBufferHeight % 8) / 4;

            //Creamos un Render Target para auxiliar para almacenar la pasada horizontal de blur
            blurTempRT = new Texture(D3DDevice.Instance.Device, cropWidth, cropHeight, 1, Usage.RenderTarget,
                                     Format.X8R8G8B8,
                                     Pool.Default);

            //Cargar shader con efectos de Post-Procesado
            effect = TgcShaders.loadEffect(ShadersDir + "GaussianBlur.fx");
            //Configurar Technique dentro del shader
            effect.Technique = "GaussianBlurPass";

            //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(-182.3816f, 82.3252f, -811.9061f));

            //Modifier para activar/desactivar efecto
            Modifiers.addBoolean("activar_efecto", "Activar efecto", true);
            Modifiers.addFloat("deviation", 1, 5, 1);
        }
コード例 #4
0
        public EscenaJuego(TgcCamera Camera, string MediaDir, string ShadersDir, TgcText2D DrawText, float TimeBetweenUpdates, TgcD3dInput Input, List <Jugador> jugadores, Jugador jugadorActivo, Jugador segundoJugador = null, bool dia = true) : base(Camera, MediaDir, ShadersDir, DrawText, TimeBetweenUpdates, Input)
        {
            this.dia   = dia;
            screenQuad = new TgcScreenQuad();

            initFisica();

            initMeshes();

            this.jugadores     = jugadores;
            this.jugadorActivo = jugadorActivo;
            this.jugadorDos    = segundoJugador;
            initJugadores();

            sol = new Luz(Color.White, new TGCVector3(0, 70, -130));

            sonido          = new TgcMp3Player();
            sonido.FileName = MediaDir + "Music\\Acelerando.wav";
            sonido.play(true);

            pelota = new Pelota(escena.getMeshByName("Pelota"), new TGCVector3(0f, 50f, 0));
            pelota.Mesh.Effect.SetValue("texPerlin", TextureLoader.FromFile(D3DDevice.Instance.Device, MediaDir + "Textures\\PerlinNoise.png"));
            dynamicsWorld.AddRigidBody(pelota.Cuerpo);

            paredes = new Paredes(escena.getMeshByName("Box_5"));
            dynamicsWorld.AddRigidBody(paredes.Cuerpo);

            arcos = new Arco[2];

            arcos[0] = new Arco(escena.getMeshByName("Arco"), FastMath.PI);
            arcos[1] = new Arco(escena.getMeshByName("Arco"), 0);

            dynamicsWorld.AddRigidBody(arcos[0].Cuerpo);
            dynamicsWorld.AddRigidBody(arcos[1].Cuerpo);

            camara = new CamaraJugador(jugadorActivo, pelota, Camera, paredes.Mesh.createBoundingBox());
            if (PantallaDividida)
            {
                camaraDos = new CamaraJugador(segundoJugador, pelota, Camera, paredes.Mesh.createBoundingBox());
            }

            ui = new UIEscenaJuego();
            ui.Init(MediaDir, drawer2D);

            animacionGol = new AnimacionGol(pelota);


            //Cargar shader con efectos de Post-Procesado
            effect = TGCShaders.Instance.LoadEffect(ShadersDir + "CustomShaders.fx");

            //Configurar Technique dentro del shader
            effect.Technique = "PostProcess";
            effect.SetValue("screenWidth", D3DDevice.Instance.Device.PresentationParameters.BackBufferWidth);
            effect.SetValue("screenHeight", D3DDevice.Instance.Device.PresentationParameters.BackBufferHeight);

            g_pCubeMap = new CubeTexture(D3DDevice.Instance.Device, 64, 1, Usage.RenderTarget, Format.X8R8G8B8, Pool.Default);
            //Creamos un Render Targer sobre el cual se va a dibujar la pantalla
            renderTargetBloom = new Texture(D3DDevice.Instance.Device, D3DDevice.Instance.Device.PresentationParameters.BackBufferWidth / 2,
                                            D3DDevice.Instance.Device.PresentationParameters.BackBufferHeight / 2, 1, Usage.RenderTarget, Format.X8R8G8B8, Pool.Default);
            depthStencil = D3DDevice.Instance.Device.CreateDepthStencilSurface(D3DDevice.Instance.Device.PresentationParameters.BackBufferWidth,
                                                                               D3DDevice.Instance.Device.PresentationParameters.BackBufferHeight, DepthFormat.D24S8, MultiSampleType.None, 0, true);
        }
コード例 #5
0
ファイル: EjemploHDR.cs プロジェクト: VB6Hobbyst7/tgc-viewer
        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;

            //Creamos un FullScreen Quad
            screenQuad = new TgcScreenQuad();


            //Crear RT con formato de floating point en vez del tipico formato de enteros
            int backBufferWidth  = d3dDevice.PresentationParameters.BackBufferWidth;
            int backBufferHeight = d3dDevice.PresentationParameters.BackBufferHeight;

            sceneRT = new Texture(d3dDevice, backBufferWidth, backBufferHeight, 1, Usage.RenderTarget, Format.A16B16G16R16F, Pool.Default);

            //Crear RT para escalar sceneRT a un tamaño menor, de 1/4 x 1/4 (y divisible por 8 para facilitar los calculos de sampleo)
            int cropWidth  = (backBufferWidth - backBufferWidth % 8) / 4;
            int cropHeight = (backBufferHeight - backBufferHeight % 8) / 4;

            scaledSceneRT = new Texture(d3dDevice, cropWidth, cropHeight, 1, Usage.RenderTarget, Format.A16B16G16R16F, Pool.Default);

            //Crear RT para el bright-pass filter, de igual tamaño que scaledSceneRT (formato comun)
            brightPassRT = new Texture(d3dDevice, cropWidth, cropHeight, 1, Usage.RenderTarget, Format.A8R8G8B8, Pool.Default);

            //Crear RT para el efecto bloom (formato comun). Son dos por la doble pasada del filtro gaussiano
            bloomRT     = new Texture(d3dDevice, cropWidth, cropHeight, 1, Usage.RenderTarget, Format.A8R8G8B8, Pool.Default);
            bloomTempRT = new Texture(d3dDevice, cropWidth, cropHeight, 1, Usage.RenderTarget, Format.A8R8G8B8, Pool.Default);

            //Crear un RT por cada paso de downsampling necesario para obtener el average luminance (un solo canal de 16 bits)
            luminanceRTs = new Texture[NUM_LUMINANCE_TEXTURES];
            for (int i = 0; i < luminanceRTs.Length; i++)
            {
                int iSampleLen = 1 << (2 * i);
                luminanceRTs[i] = new Texture(d3dDevice, iSampleLen, iSampleLen, 1, Usage.RenderTarget, Format.R16F, Pool.Default);
            }



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


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

            meshes = scene.Meshes;

            //Aplicar a cada mesh el shader de luz custom
            foreach (TgcMesh mesh in scene.Meshes)
            {
                mesh.Effect    = effect;
                mesh.Technique = "LightPass";
            }

            //Mesh para la luz
            lightMesh           = TgcBox.fromSize(new Vector3(10, 10, 10), Color.Red);
            lightMesh.Effect    = effect;
            lightMesh.Technique = "DrawLightSource";

            //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(-20, 80, 450), new Vector3(0, 80, 1));

            //Modifiers de la luz
            GuiController.Instance.Modifiers.addBoolean("toneMapping", "toneMapping", true);
            GuiController.Instance.Modifiers.addFloat("lightIntensity", 0, 100, 5);
            GuiController.Instance.Modifiers.addFloat("middleGray", 0.1f, 1, 0.72f);
            GuiController.Instance.Modifiers.addVertex3f("lightPos", new Vector3(-400, -200, -400), new Vector3(400, 300, 500), new Vector3(60, 35, 250));
        }
コード例 #6
0
        public override void Init()
        {
            //Creamos un FullScreen Quad
            screenQuad = new TgcScreenQuad();

            //Crear RT con formato de floating point en vez del tipico formato de enteros
            var backBufferWidth  = D3DDevice.Instance.Device.PresentationParameters.BackBufferWidth;
            var backBufferHeight = D3DDevice.Instance.Device.PresentationParameters.BackBufferHeight;

            sceneRT = new Texture(D3DDevice.Instance.Device, backBufferWidth, backBufferHeight, 1, Usage.RenderTarget,
                                  Format.A16B16G16R16F, Pool.Default);

            //Crear RT para escalar sceneRT a un tamaño menor, de 1/4 x 1/4 (y divisible por 8 para facilitar los calculos de sampleo)
            var cropWidth  = (backBufferWidth - backBufferWidth % 8) / 4;
            var cropHeight = (backBufferHeight - backBufferHeight % 8) / 4;

            scaledSceneRT = new Texture(D3DDevice.Instance.Device, cropWidth, cropHeight, 1, Usage.RenderTarget,
                                        Format.A16B16G16R16F,
                                        Pool.Default);

            //Crear RT para el bright-pass filter, de igual tamaño que scaledSceneRT (formato comun)
            brightPassRT = new Texture(D3DDevice.Instance.Device, cropWidth, cropHeight, 1, Usage.RenderTarget,
                                       Format.A8R8G8B8,
                                       Pool.Default);

            //Crear RT para el efecto bloom (formato comun). Son dos por la doble pasada del filtro gaussiano
            bloomRT = new Texture(D3DDevice.Instance.Device, cropWidth, cropHeight, 1, Usage.RenderTarget,
                                  Format.A8R8G8B8, Pool.Default);
            bloomTempRT = new Texture(D3DDevice.Instance.Device, cropWidth, cropHeight, 1, Usage.RenderTarget,
                                      Format.A8R8G8B8,
                                      Pool.Default);

            //Crear un RT por cada paso de downsampling necesario para obtener el average luminance (un solo canal de 16 bits)
            luminanceRTs = new Texture[NUM_LUMINANCE_TEXTURES];
            for (var i = 0; i < luminanceRTs.Length; i++)
            {
                var iSampleLen = 1 << (2 * i);
                luminanceRTs[i] = new Texture(D3DDevice.Instance.Device, iSampleLen, iSampleLen, 1, Usage.RenderTarget,
                                              Format.R16F,
                                              Pool.Default);
            }

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

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

            meshes = scene.Meshes;

            //Aplicar a cada mesh el shader de luz custom
            foreach (var mesh in scene.Meshes)
            {
                mesh.Effect    = effect;
                mesh.Technique = "LightPass";
            }

            //Mesh para la luz
            lightMesh           = TgcBox.fromSize(new Vector3(10, 10, 10), Color.Red);
            lightMesh.Effect    = effect;
            lightMesh.Technique = "DrawLightSource";

            //Camara en 1ra persona
            Camara = new TgcFpsCamera(new Vector3(-20, 80, 450), 400f, 300f);

            //Modifiers de la luz
            Modifiers.addBoolean("toneMapping", "toneMapping", true);
            Modifiers.addFloat("lightIntensity", 0, 100, 5);
            Modifiers.addFloat("middleGray", 0.1f, 1, 0.72f);
            Modifiers.addVertex3f("lightPos", new Vector3(-400, -200, -400), new Vector3(400, 300, 500),
                                  new Vector3(60, 35, 250));
        }