Beispiel #1
0
        /* Apply an inefficient but simple-to-implement subdivision scheme for a triangle. */
        static void TriangleDivide(ManualObject obj, int depth,
            float[] a, float[] b, float[] c,
            float[] ca, float[] cb, float[] cc)
        {
            if (depth == 0)
            {
                obj.Position(c[0], c[1], 0);
                obj.Colour(cc[0], cc[1], cc[2]);
                obj.Position(b[0], b[1], 0);
                obj.Colour(cb[0], cb[1], cb[2]);
                obj.Position(a[0], a[1], 0);
                obj.Colour(ca[0], ca[1], ca[2]);
            }
            else
            {
                float[] d = new float[2] { (a[0] + b[0]) / 2, (a[1] + b[1]) / 2 };
                float[] e = new float[2] { (b[0] + c[0]) / 2, (b[1] + c[1]) / 2 };
                float[] f = new float[2] { (c[0] + a[0]) / 2, (c[1] + a[1]) / 2 };
                float[] cd = new float[3] { (ca[0] + cb[0]) / 2, (ca[1] + cb[1]) / 2, (ca[2] + cb[2]) / 2 };
                float[] ce = new float[3] { (cb[0] + cc[0]) / 2, (cb[1] + cc[1]) / 2, (cb[2] + cc[2]) / 2 };
                float[] cf = new float[3] { (cc[0] + ca[0]) / 2, (cc[1] + ca[1]) / 2, (cc[2] + ca[2]) / 2 };

                depth -= 1;
                TriangleDivide(obj, depth, a, d, f, ca, cd, cf);
                TriangleDivide(obj, depth, d, b, e, cd, cb, ce);
                TriangleDivide(obj, depth, f, e, c, cf, ce, cc);
                TriangleDivide(obj, depth, d, e, f, cd, ce, cf);
            }
        }
        public BulletDebugDrawer()
        {
            sceneMgr = LKernel.GetG<SceneManager>();

            lines = new ManualObject("physics lines");
            triangles = new ManualObject("physics triangles");
            lines.Dynamic = true;
            triangles.Dynamic = true;

            sceneMgr.RootSceneNode.AttachObject(lines);
            sceneMgr.RootSceneNode.AttachObject(triangles);

            string matName = "BulletDebugDrawerMaterial";
            MaterialPtr mtl = MaterialManager.Singleton.GetDefaultSettings().Clone(matName);
            mtl.ReceiveShadows = false;
            mtl.SetSceneBlending(SceneBlendType.SBT_TRANSPARENT_ALPHA);
            mtl.SetDepthBias(0.1f, 0);

            TextureUnitState tu = mtl.GetTechnique(0).GetPass(0).CreateTextureUnitState();
            tu.SetColourOperationEx(LayerBlendOperationEx.LBX_SOURCE1, LayerBlendSource.LBS_DIFFUSE);
            mtl.GetTechnique(0).SetLightingEnabled(false);

            lines.Begin(matName, RenderOperation.OperationTypes.OT_LINE_LIST);
            begin = true;
            lines.Position(Vector3.ZERO);
            lines.Colour(ColourValue.Blue);
            lines.Position(Vector3.ZERO);
            lines.Colour(ColourValue.Blue);
            lines.End();

            triangles.Begin(matName, RenderOperation.OperationTypes.OT_TRIANGLE_LIST);
            triangles.Position(Vector3.ZERO);
            triangles.Colour(ColourValue.Blue);
            triangles.Position(Vector3.ZERO);
            triangles.Colour(ColourValue.Blue);
            triangles.Position(Vector3.ZERO);
            triangles.Colour(ColourValue.Blue);
            triangles.End();
            begin = false;

            DebugMode = DebugDrawModes.DrawWireframe | /*DebugDrawModes.DrawAabb |*/ DebugDrawModes.FastWireframe
                | DebugDrawModes.EnableCCD | DebugDrawModes.DrawNormals;

            levelMgr = LKernel.GetG<LevelManager>();
            mainPlayerKartNode = LKernel.GetG<PlayerManager>().MainPlayer.Kart.RootNode;

            PhysicsMain.PreSimulate += PreSimulate;
            PhysicsMain.PostSimulate += PostSimulate;

            LKernel.GetG<PhysicsMain>().World.DebugDrawer = this;
        }
Beispiel #3
0
        private void DrawLine(ManualObject manualObject, int index0, int index1, ColourValue colour)
        {
            Vector3 p0     = corners[index0];
            Vector3 p1     = corners[index1];
            float   length = (p1 - p0).Length;

            manualObject.Position(p0);
            manualObject.Colour(colour);
            manualObject.TextureCoord(0);

            manualObject.Position(p1);
            manualObject.Colour(colour);
            manualObject.TextureCoord(length);
        }
        public int AddVertex(float x, float y, ScenicColor color, float tu1, float tv1)
        {
            int vertex = AddVertex(x, y);

            rendererObj.Colour(color.red, color.green, color.blue, color.alpha);
            return(vertex);
        }
        private void UpdateCloudPoints(List <Point3D> PointsList, Decimal d_threshold_meters)
        {
            if (manual == null)
            {
                return;
            }
            if (PointsList == null)
            {
                return;
            }

            double threshold = (double)d_threshold_meters * 1000d; // convert to mm

            try
            {
                manual.Begin("BaseWhiteNoLighting", RenderOperation.OperationTypes.OT_POINT_LIST);

                // Real data
                foreach (Point3D sp in PointsList)
                {
                    ColourValue cv = sp.color;
                    Vector3     v  = new Vector3((float)sp.x, (float)sp.y, (float)sp.z);

                    manual.Position(v);
                    manual.Colour(cv);
                }
                manual.End();
            }
            catch (Exception e)
            {
                MessageBox.Show("Exception when plotting points: " + e.Message);
                // ignore throw e;
            }
        }
Beispiel #6
0
        static ManualObject DrawTriangle(ManualObject obj)
        {
            RenderOperation.OperationTypes operation = RenderOperation.OperationTypes.OT_TRIANGLE_LIST;

            obj.Begin("CgTutorials/C3E2_Material", operation);
            obj.Position(0.0f, -0.8f, 0.0f);
            obj.Colour(0, 0, 1);  /* Blue */

            obj.Position(0.8f, 0.8f, 0.0f);
            obj.Colour(0, 1, 0);  /* Green */

            obj.Position(-0.8f, 0.8f, 0.0f);
            obj.Colour(1, 0, 0);  /* Red */

            obj.End();

            return obj;
        }
Beispiel #7
0
        static ManualObject DrawTriangle(ManualObject obj)
        {
            RenderOperation.OperationTypes operation = RenderOperation.OperationTypes.OT_TRIANGLE_LIST;

            obj.Begin("CgTutorials/C3E2_Material", operation);
            obj.Position(0.0f, -0.8f, 0.0f);
            obj.Colour(0, 0, 1);  /* Blue */

            obj.Position(0.8f, 0.8f, 0.0f);
            obj.Colour(0, 1, 0);  /* Green */

            obj.Position(-0.8f, 0.8f, 0.0f);
            obj.Colour(1, 0, 0);  /* Red */

            obj.End();

            return(obj);
        }
Beispiel #8
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 #9
0
    public void Initialise(SceneManager aSceneManager, float aFillAlpha)
    {
        if (isInitialised)
        {
            // Initialization multiple call guard
            return;
        }

        if (aSceneManager == null)
        {
            return;
        }

        m_sceneManager = aSceneManager;
        fillAlpha      = aFillAlpha;
        m_manualObject = null;
        linesIndex     = 0;
        trianglesIndex = 0;

        m_manualObject             = m_sceneManager.CreateManualObject("debugDrawer_object");
        m_manualObject.CastShadows = false;

        m_sceneManager.RootSceneNode.CreateChildSceneNode("debugDrawer_object").AttachObject(m_manualObject);
        m_manualObject.Dynamic = (true);

        icoSphere.Create(this.DEFAULT_ICOSPHERE_RECURSION_LEVEL);

        m_manualObject.Begin("debug_draw", RenderOperation.OperationTypes.OT_LINE_LIST);
        m_manualObject.Position(Vector3.ZERO);
        m_manualObject.Colour(ColourValue.ZERO);
        m_manualObject.Index(0);
        m_manualObject.End();
        m_manualObject.Begin("debug_draw", RenderOperation.OperationTypes.OT_TRIANGLE_LIST);
        m_manualObject.Position(Vector3.ZERO);
        m_manualObject.Colour(ColourValue.ZERO);
        m_manualObject.Index(0);
        m_manualObject.End();

        trianglesIndex = 0;
        linesIndex     = trianglesIndex;

        isInitialised = true;
        // Initialization multiple call guard
    }
Beispiel #10
0
        /* Apply an inefficient but simple-to-implement subdivision scheme for a triangle. */
        static void TriangleDivide(ManualObject obj, int depth,
                                   float[] a, float[] b, float[] c,
                                   float[] ca, float[] cb, float[] cc)
        {
            if (depth == 0)
            {
                obj.Position(c[0], c[1], 0);
                obj.Colour(cc[0], cc[1], cc[2]);
                obj.Position(b[0], b[1], 0);
                obj.Colour(cb[0], cb[1], cb[2]);
                obj.Position(a[0], a[1], 0);
                obj.Colour(ca[0], ca[1], ca[2]);
            }
            else
            {
                float[] d = new float[2] {
                    (a[0] + b[0]) / 2, (a[1] + b[1]) / 2
                };
                float[] e = new float[2] {
                    (b[0] + c[0]) / 2, (b[1] + c[1]) / 2
                };
                float[] f = new float[2] {
                    (c[0] + a[0]) / 2, (c[1] + a[1]) / 2
                };
                float[] cd = new float[3] {
                    (ca[0] + cb[0]) / 2, (ca[1] + cb[1]) / 2, (ca[2] + cb[2]) / 2
                };
                float[] ce = new float[3] {
                    (cb[0] + cc[0]) / 2, (cb[1] + cc[1]) / 2, (cb[2] + cc[2]) / 2
                };
                float[] cf = new float[3] {
                    (cc[0] + ca[0]) / 2, (cc[1] + ca[1]) / 2, (cc[2] + ca[2]) / 2
                };

                depth -= 1;
                TriangleDivide(obj, depth, a, d, f, ca, cd, cf);
                TriangleDivide(obj, depth, d, b, e, cd, cb, ce);
                TriangleDivide(obj, depth, f, e, c, cf, ce, cc);
                TriangleDivide(obj, depth, d, e, f, cd, ce, cf);
            }
        }
Beispiel #11
0
            public void vertex(object vertexData)
            {
#if TESSELLATION_TRACE
                Console.WriteLine(System.Reflection.MethodBase.GetCurrentMethod() + " vertex=" + vertexData);
#endif
                manualObj.Position((Vector3)vertexData);
                manualObj.TextureCoord(((Vector3)vertexData).x * materialScale.x, ((Vector3)vertexData).z * materialScale.y);
                if (vec3 != null)
                {
                    Vector3 v = Registry.instance().GetEngine("Python").run(vec3, feature, null).asVec3();
                    manualObj.Colour(v.x, v.y, v.z);
                }
                //if (Material != null)
                //{
                //    manualObj.TextureCoord(0);
                //}
            }
Beispiel #12
0
                                 1, 2, 3 }; // back face

/*
 *      static public void CreateBoidMesh(string name, string color)
 *      {
 *          Vector3[] colors = baseColors;
 *          if (color.Equals("green"))
 *          {
 *              colors[0] = colors[1] = colors[2] = new Vector3(0.0f, 1.0f, 0.0f);
 *          }
 *          else if (color.Equals("red"))
 *          {
 *              colors[0] = colors[1] = colors[2] = new Vector3(1.0f, 0.0f, 0.0f);
 *          }
 *
 *          // Return now if already exists
 *          if (MeshManager.Singleton.ResourceExists(name))
 *              return;
 *
 *          MeshBuilderHelper mbh = new MeshBuilderHelper(name, "Flocking", false, 0, (uint)pts.Length);
 *
 *          UInt32 offPos = mbh.AddElement(VertexElementType.VET_FLOAT3, VertexElementSemantic.VES_POSITION).Offset;
 *          UInt32 offDiff = mbh.AddElement(VertexElementType.VET_FLOAT3, VertexElementSemantic.VES_DIFFUSE).Offset;
 *
 *          mbh.CreateVertexBuffer(HardwareBuffer.Usage.HBU_STATIC_WRITE_ONLY);
 *          for (int count = 0; count < pts.Length; count++)
 *          {
 *              mbh.SetVertFloat((uint)count, offPos, pts[count].x, pts[count].y, pts[count].z);           //position
 *              mbh.SetVertFloat((uint)count, offDiff, colors[count].x, colors[count].y, colors[count].z); //color
 *          }
 *
 *          mbh.CreateIndexBuffer((uint)(indices.Length / 3), HardwareIndexBuffer.IndexType.IT_16BIT, HardwareBuffer.Usage.HBU_STATIC_WRITE_ONLY);
 *          for (uint index = 0; index < indices.Length / 3; index++)
 *          {
 *              mbh.SetIndex16bit(index, (UInt16)(indices[index * 3]),
 *                                       (UInt16)(indices[index * 3 + 1]),
 *                                       (UInt16)(indices[index * 3 + 2]));
 *          }
 *
 *          MaterialPtr material = MaterialManager.Singleton.CreateOrRetrieve("Test/ColourTest", ResourceGroupManager.DEFAULT_RESOURCE_GROUP_NAME).first;
 *          material.GetTechnique(0).GetPass(0).VertexColourTracking = (int)TrackVertexColourEnum.TVC_AMBIENT;
 *          MeshPtr m = mbh.Load("Test/ColourTest");
 *          m._setBounds(new AxisAlignedBox(-1.0f, -1.0f, -1.0f,
 *                                           1.0f, 1.0f, 1.0f), false);
 *          m._setBoundingSphereRadius((float)System.Math.Sqrt(1.0f * 1.0f + 1.0f * 1.0f));
 *      }
 */

        public static ManualObject CreateBoidObject(string name, SceneManager sceneMgr, string color)
        {
            Vector3[] colors = baseColors;
            if (color.Equals("green"))
            {
                colors[0] = colors[1] = colors[2] = new Vector3(0.0f, 1.0f, 0.0f);
            }
            else if (color.Equals("red"))
            {
                colors[0] = colors[1] = colors[2] = new Vector3(1.0f, 0.0f, 0.0f);
            }

            // Return now if already exists
            if (MeshManager.Singleton.ResourceExists(name))
            {
                return(null);
            }

            ManualObject boidObj = sceneMgr.CreateManualObject(name);

            RenderOperation.OperationTypes operation = RenderOperation.OperationTypes.OT_TRIANGLE_LIST;
            MaterialPtr material = MaterialManager.Singleton.CreateOrRetrieve("Test/Boid", ResourceGroupManager.DEFAULT_RESOURCE_GROUP_NAME).first;

            material.GetTechnique(0).GetPass(0).VertexColourTracking = (int)TrackVertexColourEnum.TVC_AMBIENT;

            boidObj.Begin("Test/Boid", operation);

            for (int count = 0; count < pts.Length; count++)
            {
                boidObj.Position(pts[count]);                                      //position
                boidObj.Colour(colors[count].x, colors[count].y, colors[count].z); //color
            }
            for (uint index = 0; index < indices.Length / 3; index++)
            {
                boidObj.Index((ushort)(indices[index * 3]));
                boidObj.Index((ushort)(indices[index * 3 + 1]));
                boidObj.Index((ushort)(indices[index * 3 + 2]));
            }

            boidObj.End();

            return(boidObj);
        }
Beispiel #13
0
        public MeshPtr LoadWorldMap(string worldMapID, SceneManager sceneManager, MBWorldMap worldMap, bool faceted = false)
        {
            //Convert Vertex and Faces to Ogre Mesh Format
            if (worldMap == null)
            {
                return(null);
            }
            if (meshes.ContainsKey(worldMapID))
            {
                return(meshes[worldMapID]);
            }
            ManualObject worldMapTerrain = sceneManager.CreateManualObject("WORLDMAP-MANUAL-OBJECT-" + worldMapID);

            worldMapTerrain.Begin("", RenderOperation.OperationTypes.OT_TRIANGLE_LIST);

            calculateNormal(worldMapTerrain, worldMap);

            for (int i = 0; i < worldMap.Faces.Count; i++)
            {
                int vindex1 = worldMap.Faces[i].indexFirst;
                int vindex2 = worldMap.Faces[i].indexSecond;
                int vindex3 = worldMap.Faces[i].indexThird;

                float[] vnindex1 = worldMap.fcn[i];
                float[] vnindex2 = worldMap.fcn[i];
                float[] vnindex3 = worldMap.fcn[i];

                worldMapTerrain.Position(
                    worldMap.Vertics[vindex1].x,
                    worldMap.Vertics[vindex1].z,
                    worldMap.Vertics[vindex1].y
                    );
                worldMapTerrain.Normal(vnindex1[0], vnindex1[1], vnindex1[2]);
                worldMapTerrain.Colour(worldMap.Color[worldMap.Faces[i].TerrainType]);

                worldMapTerrain.Position(
                    worldMap.Vertics[vindex2].x,
                    worldMap.Vertics[vindex2].z,
                    worldMap.Vertics[vindex2].y
                    );
                worldMapTerrain.Normal(vnindex2[0], vnindex2[1], vnindex2[2]);
                worldMapTerrain.Colour(worldMap.Color[worldMap.Faces[i].TerrainType]);

                worldMapTerrain.Position(
                    worldMap.Vertics[vindex3].x,
                    worldMap.Vertics[vindex3].z,
                    worldMap.Vertics[vindex3].y
                    );
                worldMapTerrain.Normal(vnindex3[0], vnindex3[1], vnindex3[2]);
                worldMapTerrain.Colour(worldMap.Color[worldMap.Faces[i].TerrainType]);

                worldMapTerrain.Triangle(
                    (uint)(vindex1),
                    (uint)(vindex2),
                    (uint)(vindex3)
                    );
            }

            worldMapTerrain.End();

            var mesh = worldMapTerrain.ConvertToMesh("WORLDMAP-" + worldMapID);

            meshes.Add(worldMapID, mesh);
            return(mesh);
        }
Beispiel #14
0
        private SceneNode buildElement(DPOW.Reader.Element elem, string name)
        {
            if (mgr.HasSceneNode(name + "_node"))
            {
                return(mgr.GetSceneNode(name + "_node"));
            }

            SceneNode node = mgr.CreateSceneNode(name + "_node");

            node.SetPosition(elem.Position.X * 200, -elem.Position.Y * 200, -elem.Position.Z * 10);

            for (int i = 0; i < elem.Images.Length; i++)
            {
                string imgname = name + "_text" + i.ToString();

                SceneNode    textnode = node.CreateChildSceneNode(name + "_text" + i.ToString() + "_node", new Vector3(elem.Images[i].Position.X * 200, -elem.Images[i].Position.Y * 200, -elem.Images[i].Position.Z * 10));
                ManualObject manual   = mgr.CreateManualObject(name + "_text" + i.ToString());
                string       matname;
                matname = dpow.Textures[elem.Images[i].TextureId];
                // Build new material, if it's selected
                if (imgname == SelectedItem)
                {
                    matname = "Selected";
                }

                /*else
                 * {
                 *  MaterialPtr newmat = ((MaterialPtr)MaterialManager.Singleton.GetByName(matname, ResourceGroupManager.DEFAULT_RESOURCE_GROUP_NAME)).Clone(imgname + "_mat");
                 *  matname = imgname + "_mat";
                 * }*/
                manual.Begin(matname, RenderOperation.OperationTypes.OT_TRIANGLE_STRIP);

                for (int j = 0; j < elem.Images[i].Points.Length; j++)
                {
                    manual.Position(elem.Images[i].Points[j].X * 200, -elem.Images[i].Points[j].Y * 200, -elem.Images[i].Points[j].Z * 10);
                    manual.TextureCoord(elem.Images[i].Points[j].U, elem.Images[i].Points[j].V);
                    if (elem.Images[i].isGradient)
                    {
                        manual.Colour((float)elem.Images[i].Points[j].Color.R / 255, (float)elem.Images[i].Points[j].Color.G / 255, (float)elem.Images[i].Points[j].Color.B / 255, (float)elem.Images[i].Points[j].Color.A / 255);
                    }
                }

                manual.End();

                textnode.AttachObject(manual);
            }

            for (int i = 0; i < elem.Texts.Length; i++)
            {
                SceneNode strnode = node.CreateChildSceneNode(name + "_str" + i.ToString() + "_node", new Vector3(elem.Texts[i].Position.X * 200, -elem.Texts[i].Position.Y * 200, -elem.Texts[i].Position.Z * 10));

                ManualObject manual = mgr.CreateManualObject(name + "_str" + i.ToString());
                manual.Begin("String", RenderOperation.OperationTypes.OT_TRIANGLE_STRIP);

                float left   = 0;
                float right  = elem.Texts[i].Size.X * 200;
                float bottom = -elem.Texts[i].Size.Y * 200.0f;
                float top    = 0;
                manual.Position(left, bottom, 0);
                manual.Position(right, bottom, 0);
                manual.Position(left, top, 0);
                manual.Position(right, top, 0);

                manual.End();

                strnode.AttachObject(manual);
            }

            for (int i = 0; i < elem.Icons.Length; i++)
            {
                SceneNode flagnode = node.CreateChildSceneNode(name + "_flag" + i.ToString() + "_node", new Vector3(elem.Icons[i].Position.X * 200, -elem.Icons[i].Position.Y * 200, -elem.Icons[i].Position.Z * 10));

                ManualObject manual = mgr.CreateManualObject(name + "_flag" + i.ToString());
                manual.Begin("Flag", RenderOperation.OperationTypes.OT_TRIANGLE_STRIP);

                float left   = 0;
                float right  = elem.Icons[i].Size.X * 200;
                float bottom = -elem.Icons[i].Size.Y * 200.0f;
                float top    = 0;
                if (elem.Icons[i].WTF == 0)
                {
                    left   = -elem.Icons[i].Size.X / 2 * 200;
                    right  = elem.Icons[i].Size.X / 2 * 200;
                    bottom = -elem.Icons[i].Size.Y / 2 * 200.0f;
                    top    = elem.Icons[i].Size.Y / 2 * 200.0f;
                }
                manual.Position(left, bottom, 0);
                manual.Position(right, bottom, 0);
                manual.Position(left, top, 0);
                manual.Position(right, top, 0);

                manual.End();

                flagnode.AttachObject(manual);
            }

            return(node);
        }
Beispiel #15
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();
        }
    public void Initialise(SceneManager aSceneManager, float aFillAlpha)
    {
        if (isInitialised) {
            // Initialization multiple call guard
            return;
        }

        if (aSceneManager == null) {
            return;
        }

        m_sceneManager = aSceneManager;
        fillAlpha = aFillAlpha;
        m_manualObject = null;
        linesIndex = 0;
        trianglesIndex = 0;

        m_manualObject = m_sceneManager.CreateManualObject("debugDrawer_object");
        m_manualObject.CastShadows = false;

        m_sceneManager.RootSceneNode.CreateChildSceneNode("debugDrawer_object").AttachObject(m_manualObject);
        m_manualObject.Dynamic = (true);

        icoSphere.Create(this.DEFAULT_ICOSPHERE_RECURSION_LEVEL);

        m_manualObject.Begin("debug_draw", RenderOperation.OperationTypes.OT_LINE_LIST);
        m_manualObject.Position(Vector3.ZERO);
        m_manualObject.Colour(ColourValue.ZERO);
        m_manualObject.Index(0);
        m_manualObject.End();
        m_manualObject.Begin("debug_draw", RenderOperation.OperationTypes.OT_TRIANGLE_LIST);
        m_manualObject.Position(Vector3.ZERO);
        m_manualObject.Colour(ColourValue.ZERO);
        m_manualObject.Index(0);
        m_manualObject.End();

        trianglesIndex = 0;
        linesIndex = trianglesIndex;

        isInitialised = true;
        // Initialization multiple call guard
    }
Beispiel #17
0
        private void DrawLine(ManualObject manualObject, int index0, int index1, ColourValue colour)
        {
            Vector3 p0 = corners[index0];
            Vector3 p1 = corners[index1];
            float length = (p1 - p0).Length;

            manualObject.Position(p0);
            manualObject.Colour(colour);
            manualObject.TextureCoord(0);

            manualObject.Position(p1);
            manualObject.Colour(colour);
            manualObject.TextureCoord(length);
        }
        public void Initialise() {
            manualObject = sceneManager.CreateManualObject("debug_object");
            sceneManager.RootSceneNode.CreateChildSceneNode("debug_object").AttachObject(manualObject);
            manualObject.Dynamic = true;

            _icoSphere.create(DEFAULT_ICOSPHERE_RECURSION_LEVEL);

            manualObject.Begin("debug_draw", RenderOperation.OperationTypes.OT_LINE_LIST);
            manualObject.Position(Vector3.ZERO);
            manualObject.Colour(ColourValue.ZERO);
            manualObject.Index(0);
            manualObject.End();
            manualObject.Begin("debug_draw", RenderOperation.OperationTypes.OT_TRIANGLE_LIST);
            manualObject.Position(Vector3.ZERO);
            manualObject.Colour(ColourValue.ZERO);
            manualObject.Index(0);
            manualObject.End();

            trianglesIndex = 0;
            linesIndex = trianglesIndex;
        }