コード例 #1
0
        public Bitmap TerrainBitmap (Viewport viewport, bool threeD)
        {
            // AntiAliasing
            int width = viewport.Width * 2;
            int height = viewport.Height * 2;

            WarpRenderer renderer = new WarpRenderer ();
            if (!renderer.CreateScene (width, height)) {
                MainConsole.Instance.Error ("[Warp3D]: Unable to create the required scene! Maybe lack of RAM?");
                return new Bitmap (Constants.RegionSize, Constants.RegionSize, PixelFormat.Format24bppRgb);
            }
            renderer.Scene.autoCalcNormals = false;
            if (threeD)
                renderer.SetBackgroundColor (SKYCOLOR);

            #region Camera

            warp_Vector pos = ConvertVector (viewport.Position);
            pos.z -= 0.001f; // Works around an issue with the Warp3D camera
            warp_Vector lookat = warp_Vector.add (ConvertVector (viewport.Position), ConvertVector (viewport.LookDirection));

            renderer.Scene.defaultCamera.setPos (pos);
            renderer.Scene.defaultCamera.lookAt (lookat);

            if (viewport.Orthographic) {
                renderer.Scene.defaultCamera.isOrthographic = true;
                if (viewport.OrthoWindowWidth <= viewport.OrthoWindowHeight) {
                    renderer.Scene.defaultCamera.orthoViewWidth = viewport.OrthoWindowWidth;
                    renderer.Scene.defaultCamera.orthoViewHeight = viewport.OrthoWindowWidth;
                } else {
                    renderer.Scene.defaultCamera.orthoViewWidth = viewport.OrthoWindowHeight;
                    renderer.Scene.defaultCamera.orthoViewHeight = viewport.OrthoWindowHeight;
                }
            } else {
                viewport.Orthographic = false;
                float fov = viewport.FieldOfView;
                renderer.Scene.defaultCamera.setFov (fov);
            }

            #endregion Camera

            renderer.Scene.addLight ("Light1", new warp_Light (new warp_Vector (1.0f, 0.5f, 1f), 0xffffff, 0, 320, 40));
            renderer.Scene.addLight ("Light2", new warp_Light (new warp_Vector (-1f, -1f, 1f), 0xffffff, 0, 100, 40));


            try {
                CreateWater (renderer, threeD);
                CreateTerrain (renderer, m_textureTerrain);

                if (m_drawPrimVolume && m_primMesher != null) {
                    foreach (ISceneChildEntity part in m_scene.Entities.GetEntities ().SelectMany (ent => ent.ChildrenEntities ()))
                        CreatePrim (renderer, part);
                }

            } catch (Exception ex) {
                MainConsole.Instance.Warn ("[Warp3D]: Exception in the map generation, " + ex);
            }

            renderer.Render ();
            Bitmap bitmap = renderer.Scene.getImage ();

            // AntiAliasing
            using (Bitmap origBitmap = bitmap)
                bitmap = ImageUtils.ResizeImage (origBitmap, viewport.Width, viewport.Height);


            // Clean up
            SaveCache ();
            foreach (var o in renderer.Scene.objectData.Values) {
                warp_Object obj = (warp_Object)o;
                obj.vertexData = null;
                obj.triangleData = null;
            }

            renderer.Scene.removeAllObjects ();
            renderer.Reset ();
            m_colors.Clear ();

            //Force GC to try to clean this mess up
            GC.Collect ();

            return bitmap;
        }
コード例 #2
0
        public Bitmap TerrainBitmap(Viewport viewport, bool threeD, bool useTextures)
        {
            // AntiAliasing
            int width      = viewport.Width * 2;
            int height     = viewport.Height * 2;
            var texTerrain = m_textureTerrain & useTextures;
            var texPrims   = m_texturePrims & useTextures;

            WarpRenderer renderer = new WarpRenderer();

            if (!renderer.CreateScene(width, height))
            {
                MainConsole.Instance.Error("[WarpTile generator]: Unable to create the required scene! Maybe lack of RAM?");
                return(new Bitmap(Constants.RegionSize, Constants.RegionSize, PixelFormat.Format24bppRgb));
            }
            renderer.Scene.autoCalcNormals = false;
            if (threeD)
            {
                renderer.SetBackgroundColor(SKYCOLOR);
            }

            #region Camera

            warp_Vector pos = ConvertVector(viewport.Position);
            pos.z -= 0.001f; // Works around an issue with the Warp3D camera
            warp_Vector lookat = warp_Vector.add(ConvertVector(viewport.Position), ConvertVector(viewport.LookDirection));

            renderer.Scene.defaultCamera.setPos(pos);
            renderer.Scene.defaultCamera.lookAt(lookat);

            if (viewport.Orthographic)
            {
                renderer.Scene.defaultCamera.isOrthographic = true;
                if (viewport.OrthoWindowWidth <= viewport.OrthoWindowHeight)
                {
                    renderer.Scene.defaultCamera.orthoViewWidth  = viewport.OrthoWindowWidth;
                    renderer.Scene.defaultCamera.orthoViewHeight = viewport.OrthoWindowWidth;
                }
                else
                {
                    renderer.Scene.defaultCamera.orthoViewWidth  = viewport.OrthoWindowHeight;
                    renderer.Scene.defaultCamera.orthoViewHeight = viewport.OrthoWindowHeight;
                }
            }
            else
            {
                viewport.Orthographic = false;
                float fov = viewport.FieldOfView;
                renderer.Scene.defaultCamera.setFov(fov);
            }

            #endregion Camera

            renderer.Scene.addLight("Light1", new warp_Light(new warp_Vector(1.0f, 0.5f, 1f), 0xffffff, 0, 320, 40));
            renderer.Scene.addLight("Light2", new warp_Light(new warp_Vector(-1f, -1f, 1f), 0xffffff, 0, 100, 40));


            try {
                CreateWater(renderer, threeD);
                CreateTerrain(renderer, texTerrain);

                if (m_drawPrimVolume && m_primMesher != null)
                {
                    foreach (ISceneChildEntity part in m_scene.Entities.GetEntities().SelectMany(ent => ent.ChildrenEntities()))
                    {
                        CreatePrim(renderer, part, texPrims);
                    }
                }
            } catch (Exception ex) {
                MainConsole.Instance.Warn("[WarpTile generator]: Exception in the map generation, " + ex);
            }

            renderer.Render();
            Bitmap bitmap = renderer.Scene.getImage();

            // AntiAliasing
            using (Bitmap origBitmap = bitmap)
                bitmap = ImageUtils.ResizeImage(origBitmap, viewport.Width, viewport.Height);


            // Clean up
            SaveCache();
            foreach (var o in renderer.Scene.objectData.Values)
            {
                warp_Object obj = (warp_Object)o;
                obj.vertexData   = null;
                obj.triangleData = null;
            }

            renderer.Scene.removeAllObjects();
            renderer.Reset();
            m_colors.Clear();

            //Force GC to try to clean this mess up
            GC.Collect();

            return(bitmap);
        }