Example #1
0
        private void InitialiseThreeDeeView()
        {
            if (mSubject == null)
              {
            return;
              }

              int SCALE = 256;
              int GRIDSIZE = 9; // Should be an odd number so the centre is the middle of a tile.
              mRenderer = new ImmediateModeRenderer();
              mRenderer.Attach(mMainForm.CameraRenderingSurface);

              mScene = new Scene();
              mCamera = new Camera(80, 0.1, 1e10);
              mView = new GLTK.View(mScene, mCamera, mRenderer);

              mScene.Clear();
              if (mMainForm.CurrentLevel != null)
              {
            // Create a surface and fill it with a 10 x 10 grid of squares
            MMEdEntity lSurface = new MMEdEntity(mSubject);

            for (int x = 0; x < GRIDSIZE; x++)
            {
              for (int y = 0; y < GRIDSIZE; y++)
              {
            Mesh lSquare = new OwnedMesh(mSubject, PolygonMode.Quads);
            lSquare.AddFace(
              new Vertex(new GLTK.Point(x, y, 0), 0, 0),
              new Vertex(new GLTK.Point(x + 1, y, 0), 1, 0),
              new Vertex(new GLTK.Point(x + 1, y + 1, 0), 1, 1),
              new Vertex(new GLTK.Point(x, y + 1, 0), 0, 1));
            lSquare.RenderMode = RenderMode.Wireframe;
            lSurface.Meshes.Add(lSquare);
              }
            }

            // Add it to the scene at the origin
            lSurface.Scale(SCALE, SCALE, 1.0);
            short lOffset = (short)(-SCALE * GRIDSIZE / 2);
            GLTK.Point lNewPos = ThreeDeeViewer.Short3CoordToPoint(new Short3Coord(lOffset, lOffset, 0));
            lSurface.Position = new GLTK.Point(lNewPos.x, lNewPos.y, -lNewPos.z);
            mScene.AddRange(new MMEdEntity[] { lSurface });

            // Use a random object from the level for now.
            Level lLevel = mMainForm.CurrentLevel;
            TMDChunk lObject = lLevel.GetObjtById(1);
            mScene.AddRange(lObject.GetEntities(
              mMainForm.CurrentLevel,
              MMEd.Viewers.ThreeDee.eTextureMode.NormalTextures,
              eTexMetaDataEntries.Steering));

            string lExceptionWhen = "opening file";
            try
            {
              ThreeDeeViewer.SceneHolder sh;
              string lFilename = string.Format("{0}{1}..{1}camera-editor-scene.xml",
            Path.GetDirectoryName(
              new Uri(System.Reflection.Assembly.GetExecutingAssembly().CodeBase).LocalPath),
            Path.DirectorySeparatorChar);

              using (FileStream fs = File.OpenRead(lFilename))
              {
            lExceptionWhen = "deserialising the scene";
            XmlSerializer xs = new XmlSerializer(typeof(ThreeDeeViewer.SceneHolder));
            sh = (ThreeDeeViewer.SceneHolder)xs.Deserialize(fs);
              }
              lExceptionWhen = "fixing texture ids";
              Dictionary<int, int> lSavedTexIdsToLiveTexIds = new Dictionary<int, int>();
              foreach (ThreeDeeViewer.TextureHolder th in sh.Textures)
              {
            if (th.Bitmap != null)
            {
              lSavedTexIdsToLiveTexIds[th.ID] = AbstractRenderer.ImageToTextureId(th.Bitmap);
            }
            else
            {
              lSavedTexIdsToLiveTexIds[th.ID] = 0;
            }
              }
              foreach (Entity ent in sh.Entities)
              {
            foreach (Mesh m in ent.Meshes)
            {
              if (m.RenderMode == RenderMode.Textured)
              {
                m.Texture = lSavedTexIdsToLiveTexIds[m.Texture];
              }
            }
              }
              mScene.Objects.Clear();
              mScene.AddRange(sh.Entities);
            }
            catch (Exception err)
            {
              System.Diagnostics.Trace.WriteLine(err);
              MessageBox.Show(string.Format("Exception occurred while {0}: {1}", lExceptionWhen, err.Message), "Error", MessageBoxButtons.OK, MessageBoxIcon.Error);
            }

            UpdateCameraThreeDee();
              }
              else
              {
            System.Windows.Forms.MessageBox.Show("3D view is only available when editing a level");
            mMainForm.CameraRenderingSurface.Visible = false;
              }
        }
Example #2
0
        private ThreeDeeViewer(MainForm xiMainForm)
            : base(xiMainForm)
        {
            mMainForm.KeyPreview = true;
              mMainForm.KeyPress += new KeyPressEventHandler(this.KeyPressHandle);
              mMainForm.FormClosing += new FormClosingEventHandler(mMainForm_FormClosing);
              mMainForm.Viewer3DRenderingSurface.MouseDown += new MouseEventHandler(Viewer3DRenderingSurface_MouseDown);
              mMainForm.Viewer3DRenderingSurface.MouseUp += new MouseEventHandler(Viewer3DRenderingSurface_MouseUp);
              mMainForm.Viewer3DRenderingSurface.MouseMove += new MouseEventHandler(Viewer3DRenderingSurface_MouseMove);
              mMainForm.ChunkTreeView.NodeMouseClick += new TreeNodeMouseClickEventHandler(ChunkTreeView_NodeMouseClick);

              mRenderer = new ImmediateModeRenderer();
              mRenderer.Attach(mMainForm.Viewer3DRenderingSurface);

              mScene = new Scene();
              mCamera = new Camera(80, 0.1, 1e10);
              mView = new MMEdViewerView(this, mScene, mCamera, mRenderer);
              mLight = new Light();
              mLight.DiffuseIntensity = 0.1;
              mLight.SpecularIntensity = 0.02;

              //add view mode menus:
              mOptionsMenu = new ToolStripMenuItem("3D");
              //
              PropertyController lMoveCtrl = new PropertyController(this, "MovementMode");
              mOptionsMenu.DropDownItems.AddRange(lMoveCtrl.CreateMenuItems());
              mOptionsMenu.DropDownItems.Add(new ToolStripSeparator());
              //
              PropertyController lLightCtrl = new PropertyController(this, "LightingMode");
              mOptionsMenu.DropDownItems.AddRange(lLightCtrl.CreateMenuItems());
              mOptionsMenu.DropDownItems.Add(new ToolStripSeparator());
              //
              PropertyController lNormCtrl = new PropertyController(this, "DrawNormalsMode");
              mOptionsMenu.DropDownItems.AddRange(lNormCtrl.CreateMenuItems());
              mOptionsMenu.DropDownItems.Add(new ToolStripSeparator());
              //
              PropertyController lTexModeCtrl = new PropertyController(this, "TextureMode");
              mOptionsMenu.DropDownItems.AddRange(lTexModeCtrl.CreateMenuItems());
              mOptionsMenu.DropDownItems.Add(new ToolStripSeparator());
              //
              PropertyController lSelMetaCtrl = new PropertyController(this, "SelectedMetadata");
              mOptionsMenu.DropDownItems.Add(lSelMetaCtrl.CreateToolStripComboBox());
              mOptionsMenu.DropDownItems.Add(new ToolStripSeparator());
              //
              mOptionsMenu.DropDownItems.Add(new ToolStripMenuItem("Hide all invisible Flats", null, new EventHandler(this.HideAllFlatsWithoutFlgDClicked)));
              //
              if (DEBUG_ALLOW_LOAD_SAVE_SCENE)
              {
            mOptionsMenu.DropDownItems.Add(new ToolStripSeparator());
            mOptionsMenu.DropDownItems.Add(new ToolStripMenuItem(
              "Save scene to XML...",
              null,
              SaveSceneToXML));
            mOptionsMenu.DropDownItems.Add(new ToolStripMenuItem(
              "Load scene from XML...",
              null,
              LoadSceneFromXML));
              }
              mOptionsMenu.DropDownItems.Add(new ToolStripMenuItem(
            "Export scene to VRML...",
            null,
            ExportSceneToVRML));
              //
              mMainForm.mMenuStrip.Items.Add(mOptionsMenu);
        }
Example #3
0
        void CreateView(RenderingSurface xiSurface, Scene xiScene, Camera xiCamera, RenderMode xiFixedRenderMode)
        {
            xiSurface.MouseDown += new MouseEventHandler(Viewer3DRenderingSurface_MouseDown);
              xiSurface.MouseUp += new MouseEventHandler(Viewer3DRenderingSurface_MouseUp);
              xiSurface.MouseMove += new MouseEventHandler(Viewer3DRenderingSurface_MouseMove);
              xiSurface.MouseWheel += new MouseEventHandler(Viewer3DRenderingSurface_MouseWheel);
              xiSurface.GotFocus += new EventHandler(Viewer3DRenderingSurface_GotFocus);

              ImmediateModeRenderer lRenderer = new ImmediateModeRenderer();
              lRenderer.FixedRenderMode = xiFixedRenderMode;
              lRenderer.Attach(xiSurface);

              MMEdEditorView lView = new MMEdEditorView(this, xiScene, xiCamera, lRenderer);

              mViews.Add(xiSurface, lView);
        }