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