Beispiel #1
0
    public void Build()
    {
        if (Initialized == false)
        {
            throw new Exception("You forgot to call 'Initialise(...)'");
        }
        m_manualObject.BeginUpdate(0);
        if (lineVertices.Count > 0 && isEnabled)
        {
            m_manualObject.EstimateVertexCount(System.Convert.ToUInt32(lineVertices.Count));
            m_manualObject.EstimateIndexCount(System.Convert.ToUInt32(lineIndices.Count));
            LinkedList <KeyValuePair <Vector3, ColourValue> > .Enumerator i = lineVertices.GetEnumerator();
            while (i.MoveNext())
            {
                m_manualObject.Position(i.Current.Key);
                m_manualObject.Colour(i.Current.Value);
            }
            LinkedList <int> .Enumerator i2 = lineIndices.GetEnumerator();
            while (i2.MoveNext())
            {
                m_manualObject.Index(System.Convert.ToUInt16(i2.Current));
            }
        }
        m_manualObject.End();

        m_manualObject.BeginUpdate(1);
        if (triangleVertices.Count > 0 && isEnabled)
        {
            m_manualObject.EstimateVertexCount(System.Convert.ToUInt16((triangleVertices.Count)));
            m_manualObject.EstimateIndexCount(System.Convert.ToUInt16(triangleIndices.Count));
            LinkedList <KeyValuePair <Vector3, ColourValue> > .Enumerator i = triangleVertices.GetEnumerator();
            while (i.MoveNext())
            {
                m_manualObject.Position(i.Current.Key);
                m_manualObject.Colour(i.Current.Value.r, i.Current.Value.g, i.Current.Value.b, fillAlpha);
            }
            LinkedList <int> .Enumerator i2 = triangleIndices.GetEnumerator();
            while (i2.MoveNext())
            {
                m_manualObject.Index(System.Convert.ToUInt16(i2.Current));
            }
        }
        m_manualObject.End();
    }
Beispiel #2
0
        public override void UpdateDebugDisplay(Page p, SceneNode sn)
        {
            byte dbglvl = mManager.DebugDisplayLevel;

            if (dbglvl != 0)
            {
                // we could try to avoid updating the geometry every time here, but this
                // wouldn't easily deal with paging parameter changes. There shouldn't
                // be that many pages anyway, and this is debug after all, so update every time
                int x, y;
                var stratData = (Grid2DPageStrategyData)p.ParentSection.StrategyData;
                stratData.CalculateCell(p.PageID, out x, out y);

                var data = (Grid2DPageStrategyData)p.ParentSection.StrategyData;

                // Determine our centre point, we'll anchor here
                // Note that world points are initialised to ZERO since only 2 dimensions
                // are updated by the grid data (we could display this grid anywhere)
                Vector2 gridMidPoint  = Vector2.Zero;
                Vector3 worldMidPoint = Vector3.Zero;
                data.GetMidPointGridSpace(x, y, ref gridMidPoint);
                data.ConvertGridToWorldSpace(gridMidPoint, ref worldMidPoint);

                sn.Position = worldMidPoint;

                var gridCorners  = new Vector2[4];
                var worldCorners = new Vector3[4];

                data.GetCornersGridSpace(x, y, ref gridCorners);
                for (int i = 0; i < 4; ++i)
                {
                    worldCorners[i] = Vector3.Zero;
                    data.ConvertGridToWorldSpace(gridCorners[i], ref worldCorners[i]);
                    // make relative to mid point
                    worldCorners[i] -= worldMidPoint;
                }

                string matName = "Axiom/G2D/Debug";
                var    mat     = (Material)MaterialManager.Instance.GetByName(matName);
                if (mat == null)
                {
                    mat = (Material)MaterialManager.Instance.Create(matName, ResourceGroupManager.DefaultResourceGroupName);
                    Pass pass = mat.GetTechnique(0).GetPass(0);
                    pass.LightingEnabled     = false;
                    pass.VertexColorTracking = TrackVertexColor.Ambient;
                    pass.DepthWrite          = false;
                    mat.Load();
                }

                ManualObject mo = null;
                if (sn.ChildCount == 0)
                {
                    mo = p.ParentSection.SceneManager.CreateManualObject();
                    mo.Begin(matName, OperationType.LineStrip);
                }
                else
                {
                    mo = (ManualObject)sn.GetObject(0);
                    mo.BeginUpdate(0);
                }

                ColorEx vcol = ColorEx.Green;
                for (int i = 0; i < 5; ++i)
                {
                    mo.Position(worldCorners[i % 4]);
                    mo.Color(vcol);
                }

                mo.End();

                if (sn.ObjectCount == 0)
                {
                    sn.AttachObject(mo);
                }
            }
        }
Beispiel #3
0
        private void Draw(bool update)
        {
            int         largeGrid = 8;
            float       width     = (float)columnCount * unitSize;
            float       depth     = (float)rowCount * unitSize;
            Vector3     center    = new Vector3(-width / 2.0f, -depth / 2.0f, 0);
            ColourValue colour;
            ColourValue colourLight = new ColourValue(0.5f, 0.5f, 0.5f, 0.2f);
            ColourValue colourDark = new ColourValue(1.0f, 1.0f, 1.0f, 0.3f);
            Vector3     start, end;

            if (update)
            {
                manualObject.BeginUpdate(0);
            }
            else
            {
                manualObject.Begin("Editor/Grid", RenderOperation.OperationTypes.OT_LINE_LIST);
            }

            for (int i = 0; i <= rowCount; i++)
            {
                start.x = 0.0f;
                start.y = i * unitSize;
                start.z = 0.0f;

                end.x = width;
                end.y = i * unitSize;
                end.z = 0.0f;

                if (i * unitSize % largeGrid != 0)
                {
                    colour = colourLight;
                }
                else
                {
                    colour = colourDark;
                }

                manualObject.Position(start + center);
                manualObject.Colour(colour);
                manualObject.Position(end + center);
                manualObject.Colour(colour);
            }

            for (int i = 0; i <= columnCount; i++)
            {
                start.x = i * unitSize;
                start.y = depth;
                start.z = 0.0f;

                end.x = i * unitSize;
                end.y = 0.0f;
                end.z = 0.0f;

                if (i * unitSize % largeGrid != 0)
                {
                    colour = colourLight;
                }
                else
                {
                    colour = colourDark;
                }

                manualObject.Position(start + center);
                manualObject.Colour(colour);
                manualObject.Position(end + center);
                manualObject.Colour(colour);
            }

            manualObject.End();
        }
Beispiel #4
0
        private static ManualObject UpdateCubeHelper(ManualObject updating, float x, float y, float z, Material frontFace, Material backFace, Material leftFace, Material rightFace, Material topFace, Material bottomFace, Face updatedFaces, Vector3 positionOffset)
        {
            float xOffset = positionOffset.x;
            float yOffset = positionOffset.y;
            float zOffset = positionOffset.z;

            x /= 2;
            y /= 2;
            z /= 2;

            //START GENERATION

            updating.BeginUpdate(0);

            updating.Position(x + xOffset, -y + yOffset, z + zOffset);
            updating.Normal(0.408248f, -0.816497f, 0.408248f);
            updating.TextureCoord(1, 0);

            //1
            updating.Position(-x + xOffset, -y + yOffset, -z + zOffset);
            updating.Normal(-0.408248f, -0.816497f, -0.408248f);
            updating.TextureCoord(0, 1);

            //2
            updating.Position(x + xOffset, -y + yOffset, -z + zOffset);
            updating.Normal(0.666667f, -0.333333f, -0.666667f);
            updating.TextureCoord(1, 1);

            //3
            updating.Position(-x + xOffset, -y + yOffset, z + zOffset);
            updating.Normal(-0.666667f, -0.333333f, 0.666667f);
            updating.TextureCoord(0, 0);

            updating.Triangle(0, 1, 2);
            updating.Triangle(3, 1, 0);

            updating.End();
            updating.BeginUpdate(1);

            //4
            updating.Position(x + xOffset, y + yOffset, z + zOffset);
            updating.Normal(0.666667f, 0.333333f, 0.666667f);
            updating.TextureCoord(1, 0);

            //5
            updating.Position(-x + xOffset, -y + yOffset, z + zOffset);
            updating.Normal(-0.666667f, -0.333333f, 0.666667f);
            updating.TextureCoord(0, 1);

            //6
            updating.Position(x + xOffset, -y + yOffset, z + zOffset);
            updating.Normal(0.408248f, -0.816497f, 0.408248f);
            updating.TextureCoord(1, 1);

            //7
            updating.Position(-x + xOffset, y + yOffset, z + zOffset);
            updating.Normal(-0.408248f, 0.816497f, 0.408248f);
            updating.TextureCoord(0, 0);

            updating.Triangle(0, 1, 2);
            updating.Triangle(0, 3, 1);

            updating.End();
            updating.BeginUpdate(2);

            //7
            updating.Position(-x + xOffset, y + yOffset, z + zOffset);
            updating.Normal(-0.408248f, 0.816497f, 0.408248f);
            updating.TextureCoord(0, 0);

            //8
            updating.Position(-x + xOffset, y + yOffset, -z + zOffset);
            updating.Normal(-0.666667f, 0.333333f, -0.666667f);
            updating.TextureCoord(0, 1);

            //9
            updating.Position(-x + xOffset, -y + yOffset, -z + zOffset);
            updating.Normal(-0.408248f, -0.816497f, -0.408248f);
            updating.TextureCoord(1, 1);

            //10
            updating.Position(-x + xOffset, -y + yOffset, z + zOffset);
            updating.Normal(-0.666667f, -0.333333f, 0.666667f);
            updating.TextureCoord(1, 0);

            updating.Triangle(1, 2, 3);
            updating.Triangle(3, 0, 1);

            updating.End();
            updating.BeginUpdate(3);

            //4
            updating.Position(x + xOffset, y + yOffset, z + zOffset);
            updating.Normal(0.666667f, 0.333333f, 0.666667f);
            updating.TextureCoord(1, 0);

            //11
            updating.Position(x + xOffset, -y + yOffset, -z + zOffset);
            updating.Normal(0.666667f, -0.333333f, -0.666667f);
            updating.TextureCoord(0, 1);

            //12
            updating.Position(x + xOffset, y + yOffset, -z + zOffset);
            updating.Normal(0.408248f, 0.816497f, -0.408248f);
            updating.TextureCoord(1, 1);

            //13
            updating.Position(x + xOffset, -y + yOffset, z + zOffset);
            updating.Normal(0.408248f, -0.816497f, 0.408248f);
            updating.TextureCoord(0, 0);

            updating.Triangle(0, 1, 2);
            updating.Triangle(0, 3, 1);

            updating.End();
            updating.BeginUpdate(4);

            //8
            updating.Position(-x + xOffset, y + yOffset, -z + zOffset);
            updating.Normal(-0.666667f, 0.333333f, -0.666667f);
            updating.TextureCoord(0, 1);

            //12
            updating.Position(x + xOffset, y + yOffset, -z + zOffset);
            updating.Normal(0.408248f, 0.816497f, -0.408248f);
            updating.TextureCoord(1, 1);

            //14
            updating.Position(x + xOffset, -y + yOffset, -z + zOffset);
            updating.Normal(0.666667f, -0.333333f, -0.666667f);
            updating.TextureCoord(1, 0);

            //15
            updating.Position(-x + xOffset, -y + yOffset, -z + zOffset);
            updating.Normal(-0.408248f, -0.816497f, -0.408248f);
            updating.TextureCoord(0, 0);

            updating.Triangle(2, 0, 1);
            updating.Triangle(2, 3, 0);

            updating.End();
            updating.BeginUpdate(5);

            //16
            updating.Position(-x + xOffset, y + yOffset, z + zOffset);
            updating.Normal(-0.408248f, 0.816497f, 0.408248f);
            updating.TextureCoord(1, 0);

            //17
            updating.Position(x + xOffset, y + yOffset, -z + zOffset);
            updating.Normal(0.408248f, 0.816497f, -0.408248f);
            updating.TextureCoord(0, 1);

            //18
            updating.Position(-x + xOffset, y + yOffset, -z + zOffset);
            updating.Normal(-0.666667f, 0.333333f, -0.666667f);
            updating.TextureCoord(1, 1);

            //19
            updating.Position(x + xOffset, y + yOffset, z + zOffset);
            updating.Normal(0.666667f, 0.333333f, 0.666667f);
            updating.TextureCoord(0, 0);

            updating.Triangle(0, 1, 2);
            updating.Triangle(0, 3, 1);

            updating.End();

            updating.BoundingBox = new AxisAlignedBox(
                new Vector3(
                    -x + xOffset,
                    -y + yOffset,
                    -z + zOffset),
                new Vector3(
                    x + xOffset,
                    y + yOffset,
                    z + zOffset));

            return(updating);
        }