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(); }
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); } } }
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(); }
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); }