示例#1
0
        public override void Render(float elapsedTime)
        {
            TexturesManager.Instance.clearAll();

            var device = D3DDevice.Instance.Device;

            var pOldRT = device.GetRenderTarget(0);
            var pSurf  = g_pRenderTarget.GetSurfaceLevel(0);

            device.SetRenderTarget(0, pSurf);
            var pOldDS = device.DepthStencilSurface;

            device.DepthStencilSurface = g_pDepthStencil;

            device.Clear(ClearFlags.Target | ClearFlags.ZBuffer, Color.Black, 1.0f, 0);

            time += elapsedTime;

            wavesEffect.SetValue("time", time);
            recoltableItemEffect.SetValue("time", time);


            bulletManager.Render();
            collectModel.Render(elapsedTime);

            //Render SkyBox
            //if (playerModel.UnderSurface())
            //{
            //    skyBoxUndersea.Render();
            //}
            //else
            //{
            //    skyBox.Render();
            //}

            fogEffect.SetValue("ColorFog", 2304311);
            fogEffect.SetValue("CameraPos", TGCVector3.Vector3ToFloat4Array(Camera.Position));
            fogEffect.SetValue("StartFogDistance", 2000);
            fogEffect.SetValue("EndFogDistance", 7000);
            fogEffect.SetValue("Density", 0.0025f);
            var heighmap = TgcTexture.createTexture(MediaDir + "Level1\\Textures\\perli2.jpg");

            fogEffect.SetValue("texHeighmap", heighmap.D3dTexture);
            fogEffect.SetValue("time", time);

            fogEffect.SetValue("spotLightDir", TGCVector3.Vector3ToFloat3Array(new TGCVector3(0, -1f, 0)));

            fogEffect.SetValue("spotLightAngleCos", FastMath.ToRad(55));

            foreach (var mesh in skyBox.Faces)
            {
                mesh.Effect    = fogEffect;
                mesh.Technique = "RenderScene";
                //mesh.Render();
            }

            skyBox.Render();

            underseaTerrain.Effect    = fogEffect;
            underseaTerrain.Technique = "RenderScene2";
            underseaTerrain.Render();

            //Render Surface
            surfacePlane.Render();

            //Render Meshes
            foreach (var item in meshes)
            {
                item.Mesh.Effect    = fogEffect;
                item.Mesh.Technique = "RenderScene";
                item.Mesh.Render();
            }

            if (playerModel.InventoryModel.RenderShipHelm)
            {
                foreach (var item in shipHelmMesh)
                {
                    item.Render();
                }
            }

            if (playerModel.InventoryModel.ShowShipHelm)
            {
                shipHelmPoster.Render();
            }

            playerModel.ShowHistory = historyModel.ShowHistory;
            if (historyModel.ShowHistory)
            {
                historyModel.Render(elapsedTime);
            }

            if (playerModel.Win)
            {
                youWinModel.Render(elapsedTime);
            }

            // restuaro el render target y el stencil
            device.DepthStencilSurface = pOldDS;
            device.SetRenderTarget(0, pOldRT);

            effect.Technique = "PostProcess";

            effect.SetValue("time", time);
            device.VertexFormat = CustomVertex.PositionTextured.Format;
            device.SetStreamSource(0, g_pVBV3D, 0);
            effect.SetValue("g_RenderTarget", g_pRenderTarget);
            device.Clear(ClearFlags.Target | ClearFlags.ZBuffer, Color.Black, 1.0f, 0);
            effect.Begin(FX.None);
            effect.BeginPass(0);
            device.DrawPrimitives(PrimitiveType.TriangleStrip, 0, 2);
            effect.EndPass();
            effect.End();

            hudModel.Render();

            playerModel.Render(elapsedTime);
        }