コード例 #1
0
ファイル: Engine.cs プロジェクト: 628426/Strive.NET
        /// <summary>
        /// Initialise the scene
        /// </summary>
        /// <param name="window">The IWin32Window to render to.  System.Windows.Forms.Form implements IWin32Window</param>
        /// <param name="target">The render target</param>
        /// <param name="resolution">The resolution to render in</param>
        public void Initialise(IWin32Window window, EnumRenderTarget target, Resolution resolution)
        {
            if (TV3DEngine != null)
            {
                Terminate();
            }
            TV3DEngine = new TVEngine();
            try {
                Engine.TV3DEngine.Init3DWindowedMode(window.Handle.ToInt32(), true);
                //TV3DEngine.Init3DFullscreen( 800, 600, 16, true, false, CONST_TV_DEPTHMODE.TV_DEPTHBUFFER_BESTBUFFER, 1, 0 );
                _renderTarget = window;
            }
            catch (Exception e) {
                throw new EngineInitialisationException(e);
            }
            TV3DEngine.SetAngleSystem(CONST_TV_ANGLE.TV_ANGLE_DEGREE);
            TV3DEngine.SetVSync(true);
            TV3DEngine.DisplayFPS = true;
            TV3DScene             = new TVScene();
            TV3DScene.SetDepthBuffer(CONST_TV_DEPTHBUFFER.TV_WBUFFER);
            //TV3DScene.SetRenderMode( CONST_TV_RENDERMODE.TV_LINE );
            TV3DScene.SetTextureFilter(CONST_TV_TEXTUREFILTER.TV_FILTER_ANISOTROPIC);
            TexFactory        = new TVTextureFactory();
            Screen2DImmediate = new TVScreen2DImmediate();

            // TODO: this hax setting is to allow for clearing part of a rendersurface
            // would be nice if there is a better way....
            Screen2DImmediate.SETTINGS_SetBlendingMode(DxVBLibA.CONST_D3DBLEND.D3DBLEND_ZERO, DxVBLibA.CONST_D3DBLEND.D3DBLEND_ONE, false);

            Screen2DText = new TVScreen2DText();
            LightEngine  = new TVLightEngine();
            Gl           = new TVGlobals();
            Camera       = new TVCamera();
            Atmosphere   = new TVAtmosphere();
            Atmosphere.Fog_SetParameters(100F, 10000F, 0.0005F);
            Atmosphere.Fog_Enable(true);
            Input     = new TVInputEngine();
            FontIndex = Screen2DText.TextureFont_Create("font", "Verdana", 20, true, false, false, false);
        }
コード例 #2
0
        private void Main_Loop()
        {
            // Okay, we start the main loop here. We are going to loop over
            // and over until the user click on the "Quit" button and by this,
            // change the value of DoLoop to false.

            // We loop all of this until the DoLoop isn't True.
            while (DoLoop == true)
            {
                // Let us the capacity to use buttons of the form.
                System.Windows.Forms.Application.DoEvents();

                // New : We moved the movement code in an other sub to make
                // the code clearer.
                Check_Input();

                if (InputEngine.IsKeyPressed(CONST_TV_KEY.TV_KEY_Z))
                {
                    Scene.SetRenderMode(CONST_TV_RENDERMODE.TV_LINE);
                }
                else
                {
                    Scene.SetRenderMode(CONST_TV_RENDERMODE.TV_SOLID);
                }

                // New : We moved the checking of maximum camera "look at" and
                // also the camera movement smoothing in an other sub too.
                Check_Movement();

                //render surfaces before tv3d.clear or you get funkey results
                RenderSurf1.StartRender(false);
                Atmos.Atmosphere_Render();
                //Land.Render();
                RenderSurf1.EndRender();
                RenderSurf2.StartRender(false);
                Atmos.Atmosphere_Render();
                //Land.Render();
                RenderSurf2.EndRender();

                // Clear the the last frame.
                TV.Clear(false);

                // New : if we are below the waterheight, this means the we are
                // underwater. To give a cool underwater effect, we will add fog.
                // If we are over the ground, then don't add the fog but render
                // the lens flare.
                if (sngPositionY < sngWaterHeight)
                {
                    //' Render a blue fog to simulate under water.
                    Atmos.Fog_Enable(true);
                    Atmos.Fog_SetColor(0f, 0.4f, 0.5f);
                    Atmos.Fog_SetParameters(0f, 0f, 0.01f);
                    Atmos.Fog_SetType(CONST_TV_FOG.TV_FOG_EXP, CONST_TV_FOGTYPE.TV_FOGTYPE_RANGE);
                    Atmos.LensFlare_Enable(false);
                }
                else
                {
                    // New : we have to render the lens flare.
                    Atmos.LensFlare_Enable(true);
                    Atmos.Fog_Enable(false);

                    /*Atmos.Fog_Enable(true);
                     * Atmos.Fog_SetColor(1, 1, 1);
                     * Atmos.Fog_SetParameters(50f, 100f, 0.01f);
                     * Atmos.Fog_SetType(CONST_TV_FOG.TV_FOG_LINEAR, CONST_TV_FOGTYPE.TV_FOGTYPE_VERTEX);*/
                }

                // New have to render the sky, the sun and lens flares
                Atmos.Atmosphere_Render();

                // New : we have to render the landscape.
                //Land.Render();
                WMap.Render();
                //Scene.RenderAll(false);

                // We render all the 3D objects contained in the scene.
                //Scene.RenderAllMeshes(true);

                // We display everything that we have rendered
                TV.RenderToScreen();

                //GlobalVars.GameForm.Text = "Pos:" + sngPositionX + ";" + sngPositionY + ";" + sngPositionZ;
                GlobalVars.GameForm.Text = Scene.GetTriangleNumber().ToString();
            }

            // We ask to quit.
            this.Quit();
        }
コード例 #3
0
ファイル: Engine.cs プロジェクト: 628426/Strive.NET
		/// <summary>
		/// Initialise the scene
		/// </summary>
		/// <param name="window">The IWin32Window to render to.  System.Windows.Forms.Form implements IWin32Window</param>
		/// <param name="target">The render target</param>
		/// <param name="resolution">The resolution to render in</param>
		public void Initialise(IWin32Window window, EnumRenderTarget target, Resolution resolution) {
			if ( TV3DEngine != null ) {
				Terminate();
			}
			TV3DEngine = new TVEngine();
			try {
				Engine.TV3DEngine.Init3DWindowedMode(window.Handle.ToInt32(), true);
				//TV3DEngine.Init3DFullscreen( 800, 600, 16, true, false, CONST_TV_DEPTHMODE.TV_DEPTHBUFFER_BESTBUFFER, 1, 0 );
				_renderTarget = window;
			}
			catch(Exception e) {
				throw new EngineInitialisationException(e);
			}
			TV3DEngine.SetAngleSystem( CONST_TV_ANGLE.TV_ANGLE_DEGREE );
			TV3DEngine.SetVSync( true );
			TV3DEngine.DisplayFPS = true;
			TV3DScene = new TVScene();
			TV3DScene.SetDepthBuffer( CONST_TV_DEPTHBUFFER.TV_WBUFFER );
			//TV3DScene.SetRenderMode( CONST_TV_RENDERMODE.TV_LINE );
			TV3DScene.SetTextureFilter( CONST_TV_TEXTUREFILTER.TV_FILTER_ANISOTROPIC );
			TexFactory = new TVTextureFactory();
			Screen2DImmediate = new TVScreen2DImmediate();

			// TODO: this hax setting is to allow for clearing part of a rendersurface
			// would be nice if there is a better way....
			Screen2DImmediate.SETTINGS_SetBlendingMode( DxVBLibA.CONST_D3DBLEND.D3DBLEND_ZERO, DxVBLibA.CONST_D3DBLEND.D3DBLEND_ONE, false );

			Screen2DText = new TVScreen2DText();
			LightEngine = new TVLightEngine();
			Gl = new TVGlobals();
			Camera = new TVCamera();
			Atmosphere = new TVAtmosphere();
			Atmosphere.Fog_SetParameters( 100F, 10000F, 0.0005F );
			Atmosphere.Fog_Enable( true );
			Input = new TVInputEngine();
			FontIndex = Screen2DText.TextureFont_Create("font", "Verdana", 20, true, false, false, false);
		}