コード例 #1
0
ファイル: View.cs プロジェクト: RichardBradley/MMEd
 public View(Scene xiScene, Camera xiCamera, AbstractRenderer xiRenderer)
 {
     mScene = xiScene;
       mCamera = xiCamera;
       mRenderer = xiRenderer;
       xiRenderer.NextFrame += new AbstractRenderer.NextFrameEventHandler(Renderer_NextFrame);
 }
コード例 #2
0
ファイル: MMEdEditorView.cs プロジェクト: RichardBradley/MMEd
 public MMEdEditorView(ThreeDeeEditor xiViewer, Scene xiScene, Camera xiCamera, AbstractRenderer xiRenderer)
     : base(xiScene, xiCamera, xiRenderer)
 {
     mViewer = xiViewer;
 }
コード例 #3
0
ファイル: View.cs プロジェクト: RichardBradley/MMEd
 void Renderer_NextFrame(AbstractRenderer xiSender, EventArgs xiArgs)
 {
     RenderScene();
 }
コード例 #4
0
 public MMEdViewerView(ThreeDeeViewer xiViewer, Scene xiScene, Camera xiCamera, AbstractRenderer xiRenderer)
     : base(xiScene, xiCamera, xiRenderer)
 {
     mViewer = xiViewer;
 }
コード例 #5
0
ファイル: Export.cs プロジェクト: svn2github/wot-xvm
 public void genVehicleInfoData()
 {
     sortByLevelTypeNationName();
     renderer = new VehicleInfoData();
     renderer.buildFile(vehicles);
 }
コード例 #6
0
ファイル: Export.cs プロジェクト: svn2github/wot-xvm
 public void genVehicleNames()
 {
     sortByNationName();
     renderer = new VehicleNames();
     renderer.buildFile(vehicles);
 }
コード例 #7
0
 public override void Draw(AbstractRenderer renderer)
 {
     renderer.DrawState(this.SpritesInState);
     //// Globals.Graphics.GraphicsDevice.Clear(Color.CornflowerBlue);
 }
コード例 #8
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;
            }
        }
コード例 #9
0
ファイル: FlatChunk.cs プロジェクト: RichardBradley/MMEd
        private GLTK.Entity GetSurfaceEntity(Level xiLevel, eTextureMode xiTextureMode, eTexMetaDataEntries xiSelectedMetadata)
        {
            // notes:
            // invert the textures along the y-axis
            // use level co-ords, so z is down

            /////////////////////////////////////////////////////
            // The surface
            Entity lSurface = new MMEdEntity(this);

            Font  lNumberFont = null;
            Brush lNumberFGBrush = null, lNumberBGBrush = null;
            Pen   lWaypointPen = null, lKeyWaypointPen = null;

            if (xiTextureMode == eTextureMode.NormalTexturesWithMetadata)
            {
                lNumberFont     = new Font(FontFamily.GenericMonospace, 10);
                lNumberFGBrush  = new SolidBrush(Color.Black);
                lNumberBGBrush  = new SolidBrush(Color.White);
                lWaypointPen    = new Pen(Color.Black, 1f);
                lKeyWaypointPen = new Pen(Color.Red, 2f);
            }

            for (int x = 0; x < Width; x++)
            {
                for (int y = 0; y < Height; y++)
                {
                    Mesh lSquare = new OwnedMesh(this, PolygonMode.Quads);
                    lSquare.AddFace(
                        new Vertex(new Point(x, y, -GetTerrainHeightSafe(x, y)), 0, 0),
                        new Vertex(new Point(x + 1, y, -GetTerrainHeightSafe(x + 1, y)), 1, 0),
                        new Vertex(new Point(x + 1, y + 1, -GetTerrainHeightSafe(x + 1, y + 1)), 1, 1),
                        new Vertex(new Point(x, y + 1, -GetTerrainHeightSafe(x, y + 1)), 0, 1));

                    switch (xiTextureMode)
                    {
                    case eTextureMode.WireFrame:
                        lSquare.RenderMode = RenderMode.Wireframe;
                        break;

                    // normal textures, optionally with metadata drawn on
                    case eTextureMode.NormalTextures:
                    case eTextureMode.NormalTexturesWithMetadata:
                        TIMChunk lTIM = xiLevel.GetTileById(TextureIds[x][y]);

                        if (lTIM != null)
                        {
                            //some TIMs can't be loaded yet: they're null
                            Bitmap lTexture = lTIM.ToBitmap();
                            if (xiTextureMode == eTextureMode.NormalTexturesWithMetadata &&
                                TexMetaData != null)
                            {
                                byte lVal = TexMetaData[x][y][(int)xiSelectedMetadata];

                                if (lVal != 0)
                                {
                                    // we create a new bitmap based on the given texture
                                    // a) so that we can modify it freely
                                    // and b) to change it from indexed to full colour mode, to allow us
                                    // to draw on it (otherwise we'll get an exception)
                                    lTexture = new Bitmap(lTexture);

                                    Graphics g = Graphics.FromImage(lTexture);

                                    string lText = lVal.ToString();

                                    SizeF size = g.MeasureString(lText, lNumberFont);

                                    float xf = lTexture.Width / 2.0f - size.Width / 2.0f;
                                    float yf = lTexture.Height / 2.0f - size.Height / 2.0f;

                                    g.FillRectangle(lNumberBGBrush, xf, yf, size.Width, size.Height);

                                    g.DrawString(
                                        lText,
                                        lNumberFont,
                                        lNumberFGBrush,
                                        xf,
                                        yf);

                                    if (xiSelectedMetadata == eTexMetaDataEntries.Waypoint)
                                    {
                                        Pen lPen = xiLevel.WaypointIsKeyWaypoint(lVal)
                          ? lKeyWaypointPen
                          : lWaypointPen;

                                        g.DrawRectangle(
                                            lPen,
                                            0, 0, lTexture.Width - 1, lTexture.Height - 1);
                                    }
                                }
                            }

                            lSquare.Texture = AbstractRenderer.ImageToTextureId(lTexture);
                        }
                        break;

                    //draw the bumpmap textures on:
                    case eTextureMode.BumpmapTextures:
                        if (TexMetaData != null)
                        {
                            BumpImageChunk lBIC = xiLevel.GetBumpById(TexMetaData[x][y][(int)eTexMetaDataEntries.Bumpmap]);

                            if (lBIC != null)
                            {
                                Bitmap lTexture = lBIC.ToBitmap();
                                lSquare.Texture = AbstractRenderer.ImageToTextureId(lTexture);
                            }
                        }
                        break;

                    default: throw new Exception("Unexpected case");
                    } //end switch

                    lSurface.Meshes.Add(lSquare);
                }
            }

            lSurface.Scale(ScaleX, ScaleY, 1.0);
            if (RotationVector.Norm() != 0)
            {
                //the rotation is z-y-x
                lSurface.RotateAboutWorldOrigin(RotationVector.Z / 1024.0 * Math.PI / 2.0, Vector.ZAxis);
                lSurface.RotateAboutWorldOrigin(-RotationVector.Y / 1024.0 * Math.PI / 2.0, Vector.YAxis);
                lSurface.RotateAboutWorldOrigin(-RotationVector.X / 1024.0 * Math.PI / 2.0, Vector.XAxis);
            }

            Point lNewPos = ThreeDeeViewer.Short3CoordToPoint(OriginPosition);

            lSurface.Position = new Point(lNewPos.x, lNewPos.y, -lNewPos.z);

            return(lSurface);
        }