コード例 #1
0
        public ShaderInvisibilidad(Device d3dDevice, string ShadersDir)
        {
            D3DDevice = d3dDevice;
            //Shader Invisibilidad
            Invisibilidad           = TGCShaders.Instance.LoadEffect(ShadersDir + "\\Invisibilidad.fx");
            Invisibilidad.Technique = "DefaultTechnique";

            g_pDepthStencil = d3dDevice.CreateDepthStencilSurface(d3dDevice.PresentationParameters.BackBufferWidth,
                                                                  d3dDevice.PresentationParameters.BackBufferHeight,
                                                                  DepthFormat.D24S8, MultiSampleType.None, 0, true);

            g_pRenderTarget = new Texture(d3dDevice, d3dDevice.PresentationParameters.BackBufferWidth
                                          , d3dDevice.PresentationParameters.BackBufferHeight, 1, Usage.RenderTarget, Format.X8R8G8B8,
                                          Pool.Default);

            Invisibilidad.SetValue("g_RenderTarget", g_pRenderTarget);

            // Resolucion de pantalla
            Invisibilidad.SetValue("screen_dx", d3dDevice.PresentationParameters.BackBufferWidth);
            Invisibilidad.SetValue("screen_dy", d3dDevice.PresentationParameters.BackBufferHeight);

            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
            g_pVBV3D = new VertexBuffer(typeof(CustomVertex.PositionTextured),
                                        4, d3dDevice, Usage.Dynamic | Usage.WriteOnly,
                                        CustomVertex.PositionTextured.Format, Pool.Default);
            g_pVBV3D.SetData(vertices, 0, LockFlags.None);
        }
コード例 #2
0
        public void renderFull(int w, int h)
        {
            Vector4 v = new Vector4(0, 0, (float)w, (float)h);

            mShader.SetValue(m_fxViewport, v);
            Vector4 v2 = new Vector4(0, 0, 0, 0);

            mShader.SetValue(m_fxDestRegionCoord, v2);
            Vector4 v3 = new Vector4((float)w, (float)h, 0, 0);

            mShader.SetValue(m_fxDestRegionSize, v3);
            Vector4 v4 = new Vector4(1.0f / (float)w, 1.0f / (float)h, 0, 0);

            mShader.SetValue(m_fxInvDestRegionSize, v4);

            Viewport vp = new Viewport();

            vp.X      = 0;
            vp.Y      = 0;
            vp.Width  = w;
            vp.Height = h;
            vp.MinZ   = 0;
            vp.MaxZ   = 1;
            BRenderDevice.getDevice().Viewport = vp;

            mShader.CommitChanges();

            BRenderDevice.beginScene();
            mShader.Begin(FX.DoNotSaveState | FX.DoNotSaveShaderState | FX.DoNotSaveSamplerState);
            mShader.BeginPass(0);
            s_Quad.render();
            mShader.EndPass();
            mShader.End();
            BRenderDevice.endScene();
        }
コード例 #3
0
        public override void Update()
        {
            PreUpdate();

            try
            {
                hotReloadEffect.Update(ElapsedTime);
                effect           = hotReloadEffect.Effect;
                effect.Technique = "Default";
                effect.SetValue("time", time);
                effect.SetValue("textureExample", texture.D3dTexture);
                effect.SetValue("screenWidth", D3DDevice.Instance.Device.PresentationParameters.BackBufferWidth);
                effect.SetValue("screenHeight", D3DDevice.Instance.Device.PresentationParameters.BackBufferHeight);
            }
            catch (Exception e)
            {
                Console.WriteLine(e.Message);
            }

            if (Input.keyDown(Key.A))
            {
                D3DDevice.Instance.Device.RenderState.FillMode = FillMode.WireFrame;
            }
            else
            {
                D3DDevice.Instance.Device.RenderState.FillMode = FillMode.Solid;
            }


            time += ElapsedTime;


            PostUpdate();
        }
コード例 #4
0
        public void DrawGoo()
        {
            float CurrTime = DXUtil.Timer(DirectXTimer.GetApplicationTime);
            float fTime    = (float)(((CurrTime % 180.0f) / 180.0f) * (2 * Math.PI));

            WorldMatrix = DirectX.Matrix.RotationYawPitchRoll((float)((CurrTime % 240) / 240 * Math.PI), 0, 0) * DirectX.Matrix.Translation(0, -45, -400);

            DirectX.Matrix WorldViewMatrix     = WorldMatrix * ViewMatrix;
            DirectX.Matrix WorldViewProjMatrix = WorldMatrix * ViewMatrix * ProjectionMatrix;

            GooEffect.SetValue("fMixTime", fTime);
            GooEffect.SetValue("WorldView", WorldViewMatrix);
            GooEffect.SetValue("WorldViewProjection", WorldViewProjMatrix);

            GameDevice.RenderState.AlphaBlendEnable = false;
            int numPasses = GooEffect.Begin(0);

            for (int i = 0; i < numPasses; i++)
            {
                GooEffect.BeginPass(i);
                GooMesh.DrawSubset(0);
                GooEffect.EndPass();
            }
            GooEffect.End();

            // Restore alpha blend setting
            GameDevice.RenderState.AlphaBlendEnable = true;
        }
コード例 #5
0
        private void drawPostProcess(float elapsedTime, bool activado)
        {
            //Arrancamos la escena
            D3DDevice.Instance.Device.BeginScene();

            //Cargamos para renderizar el unico modelo que tenemos, un Quad que ocupa toda la pantalla, con la textura de todo lo dibujado antes
            D3DDevice.Instance.Device.VertexFormat = CustomVertex.PositionTextured.Format;
            D3DDevice.Instance.Device.SetStreamSource(0, screenQuadVB, 0);

            //Ver si el efecto de alarma esta activado, configurar Technique del shader segun corresponda
            if (activado)
            {
                efecto.Technique = "AlarmaTechnique";
            }
            else
            {
                efecto.Technique = "DefaultTechnique";
            }

            //Cargamos parametros en el shader de Post-Procesado
            efecto.SetValue("render_target2D", renderTarget2D);
            efecto.SetValue("textura_alarma", alarmTexture.D3dTexture);
            efecto.SetValue("alarmaScaleFactor", intVaivenAlarm.update(elapsedTime));

            //Limiamos la pantalla y ejecutamos el render del shader
            D3DDevice.Instance.Device.Clear(ClearFlags.Target | ClearFlags.ZBuffer, Color.Black, 1.0f, 0);
            efecto.Begin(FX.None);
            efecto.BeginPass(0);
            D3DDevice.Instance.Device.DrawPrimitives(PrimitiveType.TriangleStrip, 0, 2);
            efecto.EndPass();
            efecto.End();

            D3DDevice.Instance.Device.EndScene();
            D3DDevice.Instance.Device.Present();
        }
コード例 #6
0
 public void loadEffectWithFogValues(Effect effect)
 {
     effect.SetValue("ColorFog", fog.Color.ToArgb());
     //effect.SetValue("CameraPos", TGCVector3.TGCVector3ToFloat4Array(Camera.Position));
     effect.SetValue("StartFogDistance", fog.StartDistance);
     effect.SetValue("EndFogDistance", fog.EndDistance);
 }
コード例 #7
0
 public void efectoSombra(TGCVector3 lightDir, TGCVector3 lightPos, TGCMatrix lightView, TGCMatrix projMatrix)
 {
     efecto.SetValue("g_vLightPos", new Vector4(lightPos.X, lightPos.Y, lightPos.Z, 1));
     efecto.SetValue("g_vLightDir", new Vector4(lightDir.X, lightDir.Y, lightDir.Z, 1));
     efecto.SetValue("g_mProjLight", projMatrix.ToMatrix());
     efecto.SetValue("g_mViewLightProj", (lightView * projMatrix).ToMatrix());
 }
コード例 #8
0
 public void SetColor(Dx3D.Effect shader, Color color)
 {
     if (shader == _LightShader)
     {
         shader.SetValue("materialAmbientColor", ColorValue.FromColor(color));
         shader.SetValue("materialDiffuseColor", ColorValue.FromColor(color));
         shader.SetValue("materialSpecularColor", ColorValue.FromColor(color));
     }
 }
コード例 #9
0
        public override void Update(float elapsedTime)
        {
            bulletManager.Update(elapsedTime);
            collectModel.Update(elapsedTime);
            playerModel.Update(elapsedTime);

            skyBox.Center = playerModel.Position;

            effect.SetValue("withoutHelmet", playerModel.WithoutHelmet);
            effect.SetValue("inWater", playerModel.UnderSurface());
        }
コード例 #10
0
 public void Render(float elapsedTime)
 {
     Time += elapsedTime;
     rollEffect.SetValue("time", Time);
     // Cargar matrices de transformacion:
     rollEffect.SetValue("matWorld", D3DDevice.Instance.Device.Transform.World);
     rollEffect.SetValue("matWorldView", D3DDevice.Instance.Device.Transform.World *
                         D3DDevice.Instance.Device.Transform.View);
     rollEffect.SetValue("matWorldViewProj", D3DDevice.Instance.Device.Transform.World *
                         D3DDevice.Instance.Device.Transform.View * D3DDevice.Instance.Device.Transform.Projection);
     this.ship.Render();
 }
コード例 #11
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);
        }
コード例 #12
0
        unsafe public void clearJacobianMap()
        {
            if (m_fxJacobian == null)// || mSynthesiser == null)
            {
                return;
            }


            Vector4 tr = new Vector4(0, 0, (float)m_iBuffersWidth, (float)m_iBuffersHeight);


            // save render target
            D3DProtectRenderTarget locktarget = new D3DProtectRenderTarget(true);

            // set new render target
            BRenderDevice.getDevice().SetRenderTarget(0, mJacobianMapSrf);
            BRenderDevice.getDevice().SetRenderTarget(1, mJacobianMapInverseSrf);

            savedDepthSten = BRenderDevice.getDevice().DepthStencilSurface;
            BRenderDevice.getDevice().DepthStencilSurface = m_DepthStencilSurface;


            // render
            BRenderDevice.getDevice().BeginScene();
            {
                BRenderDevice.getDevice().Clear(ClearFlags.Target, Color.Black, 1, 0);


                m_fxJacobian.Technique = m_fxJacobianClearTech;
                m_fxJacobian.SetValue(m_fxJacobianGlobalScale, mExemplar == null?0:mExemplar.mSynthParams.TextureScale);
                m_fxJacobian.SetValue(m_fxJacobianSelectedJMap, (int)mJMapPattern);
                m_fxJacobian.SetValue(m_fxJacobianViewport, tr);

                m_fxJacobian.CommitChanges();
                m_fxJacobian.Begin(FX.DoNotSaveState | FX.DoNotSaveShaderState | FX.DoNotSaveSamplerState);
                m_fxJacobian.BeginPass(0);
                m_QuadDual.render();
                m_fxJacobian.EndPass();
                m_fxJacobian.End();

                BRenderDevice.getDevice().EndScene();
            }

            m_bNeedUpdate = true;

            BRenderDevice.getDevice().DepthStencilSurface = savedDepthSten;
            savedDepthSten.Dispose();
            savedDepthSten = null;

            BRenderDevice.getDevice().SetRenderTarget(1, null);
            BRenderDevice.getDevice().SetTexture(0, null);
            locktarget.destroy();
            locktarget = null;

            //   BRenderDevice.writeTextureToFile(mJacobianMap, AppDomain.CurrentDomain.BaseDirectory + "screens\\localFrames.bmp");
            //   BRenderDevice.writeTextureToFile(mJacobianMapInverse, AppDomain.CurrentDomain.BaseDirectory + "screens\\localFramesINV.bmp");
        }
コード例 #13
0
        private void AplicarShaders(String shaderDir)
        {
            efectoOlas     = TgcShaders.loadEffect(shaderDir + "ShaderOlas.fx");
            efectoTeleport = TgcShaders.loadEffect(shaderDir + "RobotRoomChange.fx");

            foreach (TgcMesh mesh in dangerPlaces)
            {
                mesh.Effect    = efectoOlas;
                mesh.Technique = "Olas";
            }
            efectoOlas.SetValue("screen_dx", resolucionX);
            efectoOlas.SetValue("screen_dy", resolucionY);
        }
コード例 #14
0
        private void UpdateGame()
        {
            //Capturar Input teclado

            RevisarLockeoMouse();

            if (personaje.LockMouse)
            {
                if (!perdi)
                {
                    UpdateAccionesDeMovimientoYCamara();
                }

                if (Input.keyDown(Key.E))
                {
                    InteraccionPersonajeYMesh();
                }

                ReproducirSonidoRandomEscenario();

                reproducirRandomDeLista(monster.getSoundList());

                RealizarAccionesDeInventario();

                personaje.updateCamera(ElapsedTime, Input);

                personaje.aumentarTiempoSinLuz();

                if (personaje.tieneLuz)
                {
                    personaje.itemEnMano.DisminuirDuracion(personaje);
                }

                AccionesPersonajeMonstruo();
            }

            timer += ElapsedTime;
            var d3dDevice = D3DDevice.Instance.Device;

            effectPosProcesado.SetValue("eyePosition", TGCVector3.TGCVector3ToFloat3Array(personaje.Position));

            effectPosProcesado.SetValue("screenWidth", d3dDevice.PresentationParameters.BackBufferWidth);
            effectPosProcesado.SetValue("screenHeight", d3dDevice.PresentationParameters.BackBufferHeight);

            effectPosProcesado.SetValue("timer", timer);

            if (renderizado is MonsterBlur)
            {
                monsterBlur.UpdateMonsterBlur(ElapsedTime, monster);
            }
        }
コード例 #15
0
        private void AplicarShaderChoque()
        {
            /*  INICIO CHOQUE */
            if (this.colisionoAlgunaVez && this.getMesh().Position.Y == 5)
            {
                ChoqueDelantero = 1;
            }

            if (this.colisiono() && !this.colisionoAlgunaVez && this.getMesh().Position.Y == 5)
            {
                ChoqueTrasero = -1;
            }

            if (this.colisiono() && this.getMesh().Position.Y == 5)
            {
                ChoqueDelantero = 1;
            }

            float vida    = base.getLifeLevel().nivelDeVida();
            int   energia = 10;

            if (vida < 100)
            {
                if (vida < 40)
                {
                    if (vida < 20)
                    {
                        energia = 2;
                    }
                    else
                    {
                        energia = 4;
                    }
                }
                else
                {
                    if (vida < 70)
                    {
                        energia = 7;
                    }
                }
            }

            efectoShaderChoque.SetValue("Energia", energia);
            efectoShaderChoque.SetValue("ChoqueAtras", ChoqueTrasero);
            efectoShaderChoque.SetValue("ChoqueAdelante", ChoqueDelantero);
            efectoShaderChoque.SetValue("fvLightPosition", new Vector4(0, 100, 0, 0));
            efectoShaderChoque.SetValue("fvEyePosition", TgcParserUtils.vector3ToFloat3Array(this.getCamara().Position));
            this.getMesh().Effect    = efectoShaderChoque;
            this.getMesh().Technique = "RenderScene";
        }
コード例 #16
0
        public void setShadersValues()
        {
            Vector3 lightPosition = new Vector3(-100, 140, 3000);// (Vector3)GuiController.Instance.Modifiers["LightPosition"];

            efectoOlas.SetValue("llueve", (Boolean)GuiController.Instance.Modifiers["lluvia"]);
            efectoOlas.SetValue("time", (float)GuiController.Instance.UserVars.getValue("time"));
            efectoOlas.SetValue("fvLightPosition", TgcParserUtils.vector3ToFloat3Array(lightPosition));
            efectoOlas.SetValue("k_la", (float)GuiController.Instance.Modifiers["Ambient"]);
            efectoOlas.SetValue("fSpecularPower", 20.0f);//(float)GuiController.Instance.Modifiers["SpecularPower"]);            efectoOlas.SetValue("blendAmount", (float)GuiController.Instance.Modifiers["blending"]);
            efectoOlas.SetValue("fvEyePosition", TgcParserUtils.vector3ToFloat3Array(GuiController.Instance.CurrentCamera.getPosition()));
            efectoOlas.SetValue("fogColor", ColorValue.FromColor((Color)GuiController.Instance.Modifiers["fog color"]));
            efectoOlas.SetValue("fogStart", (float)GuiController.Instance.Modifiers["fog start"]);
            efectoOlas.SetValue("blendStart", (float)GuiController.Instance.Modifiers["blend start"]);

            efectoOlas.SetValue("camara3p", (Boolean)GuiController.Instance.Modifiers["camaraEnBarco"]);
            efectoOlas.SetValue("rayo", rayo);
            efectoOlas.SetValue("delta", 150.0f);//(float)GuiController.Instance.Modifiers["delta"]);            efectoOlas.SetValue("reflection", (float)GuiController.Instance.Modifiers["reflection"]);
            //CubeMap
            efectoOlas.SetValue("texCubeMap", cubeMap);

            efectoCascada.SetValue("time", (float)GuiController.Instance.UserVars.getValue("time"));
            efectoCascada.SetValue("fvEyePosition", TgcParserUtils.vector3ToFloat3Array(GuiController.Instance.CurrentCamera.getPosition()));
            efectoCascada.SetValue("fvLightPosition", TgcParserUtils.vector3ToFloat3Array(lightPosition));
            efectoCascada.SetValue("camara3p", (Boolean)GuiController.Instance.Modifiers["camaraEnBarco"]);
            efectoCascada.SetValue("texCubeMap", cubeMap);
            efectoCascada.SetValue("reflection", (float)GuiController.Instance.Modifiers["reflection"]);
            efectoCascada.SetValue("blendAmount", (float)GuiController.Instance.Modifiers["blending"]);
            efectoCascada.SetValue("k_la", (float)GuiController.Instance.Modifiers["Ambient"]);
        }
コード例 #17
0
        private void incializarVisionNoctura()
        {
            var d3dDevice = D3DDevice.Instance.Device;

            otroEfecto = TgcShaders.loadEffect(ShadersDir + "GaussianBlur.fx");
            //Configurar Technique dentro del shader
            otroEfecto.Technique = "DefaultTechnique";

            g_pDepthStencil = d3dDevice.CreateDepthStencilSurface(d3dDevice.PresentationParameters.BackBufferWidth,
                                                                  d3dDevice.PresentationParameters.BackBufferHeight,
                                                                  DepthFormat.D24S8, MultiSampleType.None, 0, true);

            // inicializo el render target
            g_pRenderTarget = new Texture(d3dDevice, d3dDevice.PresentationParameters.BackBufferWidth
                                          , d3dDevice.PresentationParameters.BackBufferHeight, 1, Usage.RenderTarget,
                                          Format.X8R8G8B8, Pool.Default);

            g_pGlowMap = new Texture(d3dDevice, d3dDevice.PresentationParameters.BackBufferWidth
                                     , d3dDevice.PresentationParameters.BackBufferHeight, 1, Usage.RenderTarget,
                                     Format.X8R8G8B8, Pool.Default);

            g_pRenderTarget4 = new Texture(d3dDevice, d3dDevice.PresentationParameters.BackBufferWidth / 4
                                           , d3dDevice.PresentationParameters.BackBufferHeight / 4, 1, Usage.RenderTarget,
                                           Format.X8R8G8B8, Pool.Default);

            g_pRenderTarget4Aux = new Texture(d3dDevice, d3dDevice.PresentationParameters.BackBufferWidth / 4
                                              , d3dDevice.PresentationParameters.BackBufferHeight / 4, 1, Usage.RenderTarget,
                                              Format.X8R8G8B8, Pool.Default);

            otroEfecto.SetValue("g_RenderTarget", g_pRenderTarget);

            // Resolucion de pantalla
            otroEfecto.SetValue("screen_dx", d3dDevice.PresentationParameters.BackBufferWidth);
            otroEfecto.SetValue("screen_dy", d3dDevice.PresentationParameters.BackBufferHeight);

            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
            g_pVBV3D = new VertexBuffer(typeof(CustomVertex.PositionTextured),
                                        4, d3dDevice, Usage.Dynamic | Usage.WriteOnly,
                                        CustomVertex.PositionTextured.Format, Pool.Default);
            g_pVBV3D.SetData(vertices, 0, LockFlags.None);
        }
コード例 #18
0
        private void LoadShaders()
        {
            var d3dDevice = D3DDevice.Instance.Device;

            //Cargar Shader personalizado
            string compilationErrors;

            effect = Effect.FromFile(d3dDevice, ShadersDir + "\\PostProcess.fx", null, null, ShaderFlags.PreferFlowControl,
                                     null, out compilationErrors);
            if (effect == null)
            {
                throw new Exception("Error al cargar shader. Errores: " + compilationErrors);
            }
            //Configurar Technique dentro del shader
            effect.Technique = "PostProcess";

            g_pDepthStencil = d3dDevice.CreateDepthStencilSurface(d3dDevice.PresentationParameters.BackBufferWidth,
                                                                  d3dDevice.PresentationParameters.BackBufferHeight,
                                                                  DepthFormat.D24S8, MultiSampleType.None, 0, true);

            // inicializo el render target
            g_pRenderTarget = new Texture(d3dDevice, d3dDevice.PresentationParameters.BackBufferWidth
                                          , d3dDevice.PresentationParameters.BackBufferHeight, 1, Usage.RenderTarget, Format.X8R8G8B8,
                                          Pool.Default);

            effect.SetValue("g_RenderTarget", g_pRenderTarget);

            // Resolucion de pantalla
            effect.SetValue("screen_dx", d3dDevice.PresentationParameters.BackBufferWidth);
            effect.SetValue("screen_dy", d3dDevice.PresentationParameters.BackBufferHeight);

            var texturaCasco = TgcTexture.createTexture(MediaDir + "Level1\\Textures\\mask.png");

            effect.SetValue("texCasco", texturaCasco.D3dTexture);

            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
            g_pVBV3D = new VertexBuffer(typeof(CustomVertex.PositionTextured),
                                        4, d3dDevice, Usage.Dynamic | Usage.WriteOnly,
                                        CustomVertex.PositionTextured.Format, Pool.Default);
            g_pVBV3D.SetData(vertices, 0, LockFlags.None);
        }
コード例 #19
0
        public GooAccess(Direct3D.Device NewGameDevice,
                         GameEngine.ShaderLevel NewCardShaderLevel,
                         DirectX.Matrix NewViewMatrix,
                         DirectX.Matrix NewProjectionMatrix)
        {
            GameDevice       = NewGameDevice;
            CardShaderLevel  = NewCardShaderLevel;
            ViewMatrix       = NewViewMatrix;
            ProjectionMatrix = NewProjectionMatrix;

            // Load Shader Effect From File
            GooEffect = Direct3D.Effect.FromFile(GameDevice, GameConfig.Files.GooFx, null, null, Direct3D.ShaderFlags.None, null);

            // Choose shader technique based on shader level.
            if (CardShaderLevel == GameEngine.ShaderLevel.Pixel_3_0)
            {
                GooEffect.Technique = "Goo_Parallax_3_0";
            }
            else if (CardShaderLevel == GameEngine.ShaderLevel.Pixel_2_b)
            {
                GooEffect.Technique = "Goo_Parallax_2_b";
            }
            else if (CardShaderLevel == GameEngine.ShaderLevel.Pixel_2_0)
            {
                GooEffect.Technique = "Goo_Parallax_2";
            }
            else if (CardShaderLevel == GameEngine.ShaderLevel.Pixel_1_4)
            {
                GooEffect.Technique = "Goo_Bump_1_4";
            }

            // Load Mesh From File
            GooMesh = Direct3D.Mesh.FromFile(GameConfig.Files.GooMesh, Direct3D.MeshFlags.Managed, GameDevice);

            // Load Textures From File
            ColorTexture  = Direct3D.TextureLoader.FromFile(GameDevice, GameConfig.Files.GooColor);
            NormalTexture = Direct3D.TextureLoader.FromFile(GameDevice, GameConfig.Files.GooNormal);
            HeightTexture = Direct3D.TextureLoader.FromFile(GameDevice, GameConfig.Files.GooHeight);

            // Load Textures into Effect
            GooEffect.SetValue("ColorTexture", ColorTexture);
            GooEffect.SetValue("NormalsTexture", NormalTexture);
            GooEffect.SetValue("HeightTexture", HeightTexture);

            // Set Parallax and Bump Intensity
            GooEffect.SetValue("ParallaxAmount", .5f);
            GooEffect.SetValue("BumpAmount", 1.5f);
        }
コード例 #20
0
        private void InitGogleViewEffectResources()
        {
            gogleViewEffect = TGCShaders.Instance.LoadEffect(ShadersDir + "Varios.fx");

            gogleViewTexture = TgcTexture.createTexture(MediaDir + "gogleView.png").D3dTexture;
            gogleViewEffect.SetValue("gogleViewTexture", gogleViewTexture);
        }
コード例 #21
0
        public void PostProcess(Texture render)
        {
            var d3dDevice = D3DDevice.Instance.Device;

            //Arrancamos la escena
            d3dDevice.BeginScene();
            d3dDevice.Clear(ClearFlags.Target | ClearFlags.ZBuffer, Color.Black, 1.0f, 0);

            //Cargamos parametros en el shader de Post-Procesado
            effect.SetValue("texDiffuseMap", render);
            effect.SetValue("texBloom", renderTargetBloom);
            effect.SetValue("activo", Input.keyDown(Key.B)); // Para debugear nomas

            d3dDevice.Clear(ClearFlags.Target | ClearFlags.ZBuffer, Color.Black, 1.0f, 0);
            screenQuad.render(effect);
        }
コード例 #22
0
        private void RenderPostProcess()
        {
            D3DDevice.Instance.Device.BeginScene();

            D3DDevice.Instance.Device.VertexFormat = CustomVertex.PositionTextured.Format;
            D3DDevice.Instance.Device.SetStreamSource(0, fullQuadVertexBuffer, 0);

            gogleViewEffect.SetValue("mainSceneTexture", auxRenderTarget);

            D3DDevice.Instance.Device.Clear(ClearFlags.Target | ClearFlags.ZBuffer, fog.Color, 1.0f, 0);

            if (Player.IsSubmerged)
            {
                gogleViewEffect.Technique = "GogleView";
            }
            else
            {
                gogleViewEffect.Technique = "NoGogles";
            }

            gogleViewEffect.Begin(FX.None);
            gogleViewEffect.BeginPass(0);
            D3DDevice.Instance.Device.DrawPrimitives(PrimitiveType.TriangleStrip, 0, 2);
            gogleViewEffect.EndPass();
            gogleViewEffect.End();


            RenderHUD();

            RenderFPS();
            RenderAxis();

            D3DDevice.Instance.Device.EndScene();
        }
コード例 #23
0
        private void AplicarShader()
        {
            if (!EsAutoJugador)
            {
                return;
            }
            //efectoShaderNitroHummer.SetValue("time", GameModel.ElapsedTime);
            ////efectoShaderNitroHummer.SetValue("Velocidad", 4*Velocidad);
            //efectoShaderNitroHummer.SetValue("Deformation", DeformationConstant);

            //efectoShaderNitroHummer.SetValue("PosX", Mesh.Position.X);
            //efectoShaderNitroHummer.SetValue("PosZ", Mesh.Position.Z);
            //efectoShaderNitroHummer.SetValue("Largo", largo);
            var aux = 0;

            if (chocoAdelante && Mesh.Position.Y == 5)
            {
                aux             = 1;
                ChoqueDelantero = 1;
            }

            if (collisionFound && !chocoAdelante && Mesh.Position.Y == 5)
            {
                aux           = -1;
                ChoqueTrasero = -1;
            }

            efectoShaderNitroHummer.SetValue("ChoqueTrasero", ChoqueTrasero);
            efectoShaderNitroHummer.SetValue("ChoqueDelantero", ChoqueDelantero);

            //adelante 1 atras - 1
            //efectoShaderNitroHummer.SetValue("Choco", aux);

            //if (Velocidad < 2.5f)
            //{
            //    Mesh.Effect = efectoOriginal;
            //    Mesh.Technique = TechniqueOriginal;
            //}
            //else
            //{
            //    Mesh.Effect = efectoShaderNitroHummer;
            //    Mesh.Technique = "RenderScene";
            //}
            Mesh.Effect    = efectoShaderNitroHummer;
            Mesh.Technique = "RenderScene";
        }
コード例 #24
0
        public static void RenderPostProcesado()
        {
            Device d3dDevice = GuiController.Instance.D3dDevice;

            // Devuelvo el render target original
            d3dDevice.SetRenderTarget(0, RenderTargetOriginal);

            // Cargo el quad
            d3dDevice.VertexFormat = CustomVertex.PositionTextured.Format;
            d3dDevice.SetStreamSource(0, ScreenQuad, 0);

            // Cargo los parametros al shader
            bool activar_efecto = (bool)GuiController.Instance.Modifiers["lluvia"];

            if (activar_efecto)
            {
                float  time         = (float)GuiController.Instance.UserVars.getValue("time");
                Random random       = new Random();
                int    randomNumber = random.Next(0, 10);

                if (time % 5 > 4 && randomNumber > 5)
                {
                    Shader.Technique = "RayoTechnique";
                }
                else
                {
                    Shader.Technique = "DefaultTechnique";
                }
            }
            else
            {
                Shader.Technique = "DefaultTechnique";
            }

            //Cargamos parametros en el shader de Post-Procesado
            Shader.SetValue("render_target2D", RenderTargetPostprocesado);
            Shader.SetValue("scaleFactor", intVaivenOscurecer.update());
            // Hago el postprocesado propiamente dicho
            d3dDevice.Clear(ClearFlags.Target | ClearFlags.ZBuffer, Color.Black, 1.0f, 0);
            Shader.Begin(FX.None);
            Shader.BeginPass(0);
            d3dDevice.DrawPrimitives(PrimitiveType.TriangleStrip, 0, 2);
            Shader.EndPass();
            Shader.End();
        }
コード例 #25
0
 public void SetAlpha(Dx3D.Effect shader, Single alpha)
 {
     if (shader == _LightShader)
     {
         var color = shader.GetValueColor(shader.GetParameter(null, "materialDiffuseColor"));
         color.Alpha = alpha;
         shader.SetValue("materialDiffuseColor", color);
     }
 }
コード例 #26
0
        public void RenderShadowMap()
        {
            // Calculo la matriz de view de la luz
            shadowEffect.SetValue("g_vLightPos", new Vector4(g_LightPos.X, g_LightPos.Y, g_LightPos.Z, 1));
            shadowEffect.SetValue("g_vLightDir", new Vector4(g_LightDir.X, g_LightDir.Y, g_LightDir.Z, 1));
            skeletalShadowEffect.SetValue("g_vLightPos", new Vector4(g_LightPos.X, g_LightPos.Y, g_LightPos.Z, 1));
            skeletalShadowEffect.SetValue("g_vLightDir", new Vector4(g_LightDir.X, g_LightDir.Y, g_LightDir.Z, 1));
            g_LightView = TGCMatrix.LookAtLH(g_LightPos, g_LightPos + g_LightDir, new TGCVector3(0, 0, 1));

            // inicializacion standard:
            shadowEffect.SetValue("g_mProjLight", g_mShadowProj.ToMatrix());
            shadowEffect.SetValue("g_mViewLightProj", (g_LightView * g_mShadowProj).ToMatrix());
            skeletalShadowEffect.SetValue("g_mProjLight", g_mShadowProj.ToMatrix());
            skeletalShadowEffect.SetValue("g_mViewLightProj", (g_LightView * g_mShadowProj).ToMatrix());


            // Primero genero el shadow map, para ello dibujo desde el pto de vista de luz
            // a una textura, con el VS y PS que generan un mapa de profundidades.
            var pOldRT      = D3DDevice.Instance.Device.GetRenderTarget(0);
            var pShadowSurf = g_pShadowMap.GetSurfaceLevel(0);

            D3DDevice.Instance.Device.SetRenderTarget(0, pShadowSurf);
            var pOldDS = D3DDevice.Instance.Device.DepthStencilSurface;

            D3DDevice.Instance.Device.DepthStencilSurface = shadowDepthStencil;
            D3DDevice.Instance.Device.Clear(ClearFlags.Target | ClearFlags.ZBuffer, Color.Black, 1.0f, 0);
            D3DDevice.Instance.Device.BeginScene();

            // Hago el render de la escena pp dicha
            shadowEffect.SetValue("g_txShadow", g_pShadowMap);
            skeletalShadowEffect.SetValue("g_txShadow", g_pShadowMap);
            // RENDER
            doingShadowRender = true;
            RenderScene();


            // Termino
            D3DDevice.Instance.Device.EndScene();
            //TextureLoader.Save("shadowmap.bmp", ImageFileFormat.Bmp, g_pShadowMap);
            // restuaro el render target y el stencil
            D3DDevice.Instance.Device.DepthStencilSurface = pOldDS;
            D3DDevice.Instance.Device.SetRenderTarget(0, pOldRT);
        }
コード例 #27
0
        private void InitializeEffect()
        {
            deferredEffect = TGCShaders.Instance.LoadEffect(ShadersDir + "Deferred.fx");

            deferredEffect.SetValue("lightCount", lights.Count);
            int index = 0;

            lights.ForEach(light =>
            {
                light.SetLight(index, deferredEffect);
                index++;
            });
        }
コード例 #28
0
        /// <summary>
        ///     Se toma todo lo dibujado antes, que se guardo en una textura, y se le aplica un shader para distorsionar la imagen
        /// </summary>
        private void drawPostProcess(Microsoft.DirectX.Direct3D.Device d3dDevice)
        {
            //Arrancamos la escena
            d3dDevice.BeginScene();

            //Cargamos para renderizar el unico modelo que tenemos, un Quad que ocupa toda la pantalla, con la textura de todo lo dibujado antes
            d3dDevice.VertexFormat = CustomVertex.PositionTextured.Format;
            d3dDevice.SetStreamSource(0, screenQuadVB, 0);

            //Ver si el efecto de oscurecer esta activado, configurar Technique del shader segun corresponda

            effect.Technique = "RainTechnique";

            if (!presentacion && lloviendo)
            {
                effect.Technique = "RainTechnique";
            }
            else
            {
                effect.Technique = "DefaultTechnique";
            }

            //Cargamos parametros en el shader de Post-Procesado
            effect.SetValue("render_target2D", renderTarget2D);
            effect.SetValue("textura_alarma", lluviaTexture.D3dTexture);
            effect.SetValue("time", this.ElapsedTime);

            //Limiamos la pantalla y ejecutamos el render del shader
            d3dDevice.Clear(ClearFlags.Target | ClearFlags.ZBuffer, Color.Black, 1.0f, 0);
            effect.Begin(FX.None);
            effect.BeginPass(0);
            d3dDevice.DrawPrimitives(PrimitiveType.TriangleStrip, 0, 2);
            effect.EndPass();
            effect.End();

            //Terminamos el renderizado de la escena
            d3dDevice.EndScene();
            d3dDevice.Present();
        }
コード例 #29
0
        public void Draw(DX.Matrix transform, int pickValue = 0)
        {
            D3D.Device device = Renderer.current.device;
            device.VertexDeclaration = Renderer.current.vtxDeclaration;
            device.SetStreamSource(0, vertexBuffer, 0);
            Renderer.current.SetValues(usedEffect, transform);
            usedEffect.SetValue(Renderer.EffectHandles.PickColor, Renderer.pickIndexToColor(pickValue));

            foreach (Subset sub in subsets)
            {
                float shiftTValue = sub.shiftT >= 11 ? (int)1 << (0x10 - sub.shiftT) : 1.0f / (1 << sub.shiftT);
                float shiftSValue = sub.shiftS >= 11 ? (int)1 << (0x10 - sub.shiftS) : 1.0f / (1 << sub.shiftS);
                usedEffect.SetValue(Renderer.EffectHandles.ShiftMul, new DX.Vector4(shiftTValue / (float)sub.texture.width, shiftSValue / (float)sub.texture.height, 0, 0));
                usedEffect.SetValue(Renderer.EffectHandles.Texture0, sub.texture0);
                usedEffect.SetValue(Renderer.EffectHandles.Texture1, sub.texture1);
                usedEffect.Begin(D3D.FX.None);
                usedEffect.BeginPass(0);
                device.Indices = sub.indexBuffer;
                device.DrawIndexedPrimitives(D3D.PrimitiveType.TriangleList, 0, 0, vertices.Length, 0, sub.indices.Length / 3);
                usedEffect.EndPass();
                usedEffect.End();
            }
        }
コード例 #30
0
        /////////////////////////////////////////////////////////////////////////
        ////////////////////////////////RENDER///////////////////////////////////
        /////////////////////////////////////////////////////////////////////////

        public void render(float deltaTime, TgcFrustum frustum)
        {
            foreach (var mesh in objectsInFront)
            {
                if (!librosAgarrados.Contains(mesh))
                {
                    var resultadoColisionFrustum = TgcCollisionUtils.classifyFrustumAABB(frustum, mesh.BoundingBox);
                    if (resultadoColisionFrustum != TgcCollisionUtils.FrustumResult.OUTSIDE)
                    {
                        mesh.Render();
                    }
                }
            }

            efectoOlas.SetValue("time", tiempoOlas);

            personajePrincipal.animateAndRender(deltaTime);

            HUD.Begin(SpriteFlags.AlphaBlend | SpriteFlags.SortDepthFrontToBack);

            posVidas = D3DDevice.Instance.Device.Viewport.Width - vida.Width;

            for (int i = 0; i < cantVidas; i++)
            {
                HUD.Transform = TGCMatrix.Translation(new TGCVector3(posVidas, 0, 0));
                HUD.Draw(vida.D3dTexture, Rectangle.Empty, Vector3.Empty, Vector3.Empty, Color.OrangeRed);
                posVidas -= vida.Width;
            }

            librosAdquiridos.cambiarTexto(cantidadLibrosAdquiridos.ToString());
            librosAdquiridos.cambiarTamañoLetra(28);
            librosAdquiridos.cambiarColor(Color.BlueViolet);
            librosAdquiridos.Render();

            HUD.Draw2D(fisicaLib.D3dTexture, Rectangle.Empty, new SizeF(90, 90), new PointF(D3DDevice.Instance.Width - 95, D3DDevice.Instance.Height - 145), Color.White);
            HUD.End();

            emisorDeParticulas1.render(deltaTime);
            emisorDeParticulas2.render(deltaTime);
            emisorDeParticulas3.render(deltaTime);
        }
コード例 #31
0
ファイル: EjemploAlumno.cs プロジェクト: aniPerezG/barbalpha
        public override void init()
        {
            //Device de DirectX para crear primitivas
            d3dDevice = GuiController.Instance.D3dDevice;
            TgcSceneLoader loader = new TgcSceneLoader();
            
            //cargamos los meshes de los barcos
            barcoJugador = new BarcoJugador(new Vector3(0, 0, 0), this, GuiController.Instance.ExamplesMediaDir + "MeshCreator\\Meshes\\Vehiculos\\Canoa\\Canoa-TgcScene.xml");
            barcoIA = new BarcoIA(new Vector3(200, 0, 0), this, GuiController.Instance.ExamplesMediaDir + "MeshCreator\\Meshes\\Vehiculos\\Canoa\\Canoa-TgcScene.xml");

            string shaderFolder = GuiController.Instance.AlumnoEjemplosMediaDir +"\\shaders";
            time = 0;

            scaleXZ = 20f;
            scaleY = 1.3f;

            //cargamos el efecto que le vamos a aplicar a los meshes
            effect = TgcShaders.loadEffect(shaderFolder + "\\shaderLoco.fx");

            heightmap = GuiController.Instance.AlumnoEjemplosMediaDir + "Heightmap\\" + "heightmap500.jpg";
            textura = GuiController.Instance.ExamplesMediaDir + "MeshCreator\\Textures\\Liquidos" + "\\water_flow.jpg";

            //cargamos el terreno
            terreno = new TgcSimpleTerrain();
            terreno.loadHeightmap(heightmap, scaleXZ, scaleY, new Vector3(0, 0, 0));
            terreno.loadTexture(textura);
            terreno.Effect = effect;
            terreno.Technique = "LightScene";


            // Creo SkyBox
            string texturesPath = GuiController.Instance.ExamplesMediaDir + "Texturas\\Quake\\SkyBox LostAtSeaDay\\";
            string skyboxFolder = GuiController.Instance.AlumnoEjemplosMediaDir + "skybox\\";

            skyBox = new TgcSkyBox();
            skyBox.Center = new Vector3(0, 0, 0);
            skyBox.Size = new Vector3(8000, 8000, 8000);
            skyBox.setFaceTexture(TgcSkyBox.SkyFaces.Up, skyboxFolder + "skyboxArriba.jpg");
            skyBox.setFaceTexture(TgcSkyBox.SkyFaces.Down, skyboxFolder + "skyboxAbajo.jpg");
            skyBox.setFaceTexture(TgcSkyBox.SkyFaces.Left, skyboxFolder + "skybox2.jpg");
            skyBox.setFaceTexture(TgcSkyBox.SkyFaces.Right, skyboxFolder + "skybox2.jpg");
            skyBox.setFaceTexture(TgcSkyBox.SkyFaces.Front, skyboxFolder + "skybox1.jpg");
            skyBox.setFaceTexture(TgcSkyBox.SkyFaces.Back, skyboxFolder + "skybox2.jpg");
            skyBox.SkyEpsilon = 50f;
            skyBox.updateValues();
            
            barcoJugador.setEnemy(barcoIA);
            barcoJugador.setEffect(effect);
            barcoJugador.setTechnique("HeightScene");

            barcoIA.setEnemy(barcoJugador);
            barcoIA.setEffect(effect);
            barcoIA.setTechnique("HeightScene");

            barcoJugador.cargarCaniones();
            barcoIA.cargarCaniones();

            mediaAlturaBarco = barcoJugador.BoundingBox().calculateAxisRadius().Y;
            effect.SetValue("mediaAlturaBarco", mediaAlturaBarco);

            GuiController.Instance.Modifiers.addFloat("alturaOlas", 5f, 30f, 10f);
            GuiController.Instance.Modifiers.addFloat("frecuenciaOlas", 50f, 300f, 100f);
            GuiController.Instance.Modifiers.addBoolean("mostrar_lluvia", "Mostrar Lluvia", false);

       
            vecAux = new Vector3(0, 0, 0);
            ortogonal = new Vector3(0, 0, 0);

            sol = new Sol(effect); 
            planoSubyacente = new Plano();
            normalPlano = new Vector3(0, 0, 0);

            terminar = false;

            nube = new Nube(1000);

            
            //Centrar camara rotacional respecto a la canoa
            GuiController.Instance.ThirdPersonCamera.Enable = true;
            GuiController.Instance.ThirdPersonCamera.setCamera(barcoJugador.posicion(), 500, 600);
            GuiController.Instance.ThirdPersonCamera.updateCamera();
                        
        }