public Bitmap TerrainToBitmap(Bitmap mapBmp, int size)
        {
            mapBmp = null;
            int scaledRemovalFactor = m_scene.RegionInfo.RegionSizeX/(Constants.RegionSize/2);
            Vector3 camPos = new Vector3(m_scene.RegionInfo.RegionSizeX/2 - 0.5f,
                m_scene.RegionInfo.RegionSizeY/2 - 0.5f, 221.7025033688163f);
            Viewport viewport = new Viewport(camPos, -Vector3.UnitZ, 1024f, 0.1f,
                m_scene.RegionInfo.RegionSizeX - scaledRemovalFactor,
                m_scene.RegionInfo.RegionSizeY - scaledRemovalFactor,
                m_scene.RegionInfo.RegionSizeX - scaledRemovalFactor,
                m_scene.RegionInfo.RegionSizeY - scaledRemovalFactor);

            viewport.FieldOfView = 150;
            viewport.Width = size;
            viewport.Height = size;

            return TerrainBitmap (viewport, false);
        }
 public Bitmap CreateViewImage(Vector3 camPos, Vector3 camDir, float fov, int width, int height, bool useTextures)
 {
     Viewport viewport = new Viewport(camPos, camDir, fov, 1024f,  0.1f, width, height);
     return TerrainBitmap(viewport, true);
 }
        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;
        }
        public Bitmap TerrainToBitmap (Bitmap mapBmp, int size)
        {
            int scaledRemovalFactor = m_scene.RegionInfo.RegionSizeX / (Constants.RegionSize / 2);

            Vector3 camPos = new Vector3 (
                (m_scene.RegionInfo.RegionSizeX / 2f) - 0.5f,
                (m_scene.RegionInfo.RegionSizeY / 2f) - 0.5f,
                221f);  //.7025033688163f);


            Viewport viewport = new Viewport (camPos, -Vector3.UnitZ, 256f, 0.1f,
                m_scene.RegionInfo.RegionSizeX - scaledRemovalFactor,
                m_scene.RegionInfo.RegionSizeY - scaledRemovalFactor,
                m_scene.RegionInfo.RegionSizeX - scaledRemovalFactor,
                m_scene.RegionInfo.RegionSizeY - scaledRemovalFactor);

            viewport.FieldOfView = 150;

            //testing
            //viewport.Height = size;
            //viewport.Width = size;

            mapBmp = TerrainBitmap (viewport, false);
            return mapBmp;

        }