public static ManualObject CreateTetrahedron3(String name, Mogre.Vector3 position, Single scale, String materialName) { ManualObject manObTetra = new ManualObject(name); manObTetra.CastShadows = false; // render just before overlays (so all objects behind the transparent tetrahedron are visible) manObTetra.RenderQueueGroup = (byte)RenderQueueGroupID.RENDER_QUEUE_OVERLAY - 1; // = 99 Mogre.Vector3[] c = new Mogre.Vector3[4]; // corners // calculate corners of tetrahedron (with point of origin in middle of volume) Single mbot = scale * 0.2f; // distance middle to bottom Single mtop = scale * 0.62f; // distance middle to top Single mf = scale * 0.289f; // distance middle to front Single mb = scale * 0.577f; // distance middle to back Single mlr = scale * 0.5f; // distance middle to left right // width / height / depth c[0] = new Mogre.Vector3(-mlr, -mbot, mf); // left bottom front c[1] = new Mogre.Vector3(mlr, -mbot, mf); // right bottom front c[2] = new Mogre.Vector3(0, -mbot, -mb); // (middle) bottom back c[3] = new Mogre.Vector3(0, mtop, 0); // (middle) top (middle) // add position offset for all corners (move tetrahedron) for (Int16 i = 0; i <= 3; i++) { c[i] += position; } // create bottom manObTetra.Begin(materialName, RenderOperation.OperationTypes.OT_TRIANGLE_LIST); manObTetra.Position(c[2]); manObTetra.Position(c[1]); manObTetra.Position(c[0]); manObTetra.Triangle(0, 1, 2); manObTetra.End(); // create right back side manObTetra.Begin(materialName, RenderOperation.OperationTypes.OT_TRIANGLE_LIST); manObTetra.Position(c[1]); manObTetra.Position(c[2]); manObTetra.Position(c[3]); manObTetra.Triangle(0, 1, 2); manObTetra.End(); // create left back side manObTetra.Begin(materialName, RenderOperation.OperationTypes.OT_TRIANGLE_LIST); manObTetra.Position(c[3]); manObTetra.Position(c[2]); manObTetra.Position(c[0]); manObTetra.Triangle(0, 1, 2); manObTetra.End(); // create front side manObTetra.Begin(materialName, RenderOperation.OperationTypes.OT_TRIANGLE_LIST); manObTetra.Position(c[0]); manObTetra.Position(c[1]); manObTetra.Position(c[3]); manObTetra.Triangle(0, 1, 2); manObTetra.End(); return(manObTetra); } // CreateTetrahedron
void CreateGrassMesh() { const float width = 25; const float height = 30; Vector3 vec = new Vector3(width / 2, 0, 0); ManualObject obj = _sceneManager.CreateManualObject("GrassObject"); Quaternion quat = new Quaternion(new Degree(60), Vector3.UNIT_Y); obj.Begin("Examples/GrassBlades", RenderOperation.OperationTypes.OT_TRIANGLE_LIST); for (uint i = 0; i < 3; ++i) { obj.Position(-vec.x, height, -vec.z); obj.TextureCoord(0, 0); obj.Position(vec.x, height, vec.z); obj.TextureCoord(1, 0); obj.Position(-vec.x, 0, -vec.z); obj.TextureCoord(0, 1); obj.Position(vec.x, 0, vec.z); obj.TextureCoord(1, 1); uint offset = 4 * i; obj.Triangle(offset, offset + 3, offset + 1); obj.Triangle(offset, offset + 2, offset + 3); vec = quat * vec; } obj.End(); obj.ConvertToMesh("grass"); _sceneManager.DestroyManualObject(obj); }
public VideoTexture(SceneManager scm, float width, float height, string aviFileName) { AviManager aviMgr = new AviManager(aviFileName, true); Stream = aviMgr.GetVideoStream(); TexturePtr VideoTexture = TextureManager.Singleton.CreateManual( "Video", ResourceGroupManager.DEFAULT_RESOURCE_GROUP_NAME, TextureType.TEX_TYPE_2D, Convert.ToUInt32(Stream.Width), Convert.ToUInt32(Stream.Height), 0, PixelFormat.PF_R8G8B8A8, (int)TextureUsage.TU_DYNAMIC_WRITE_ONLY_DISCARDABLE); MaterialPtr VideoMat = MaterialManager.Singleton.Create( "VideoMat", ResourceGroupManager.DEFAULT_RESOURCE_GROUP_NAME); VideoMat.GetTechnique(0).GetPass(0).LightingEnabled = false; VideoMat.GetTechnique(0).GetPass(0).CreateTextureUnitState("Video"); PixelBuffer = VideoTexture.GetBuffer(); screen = scm.CreateManualObject("Screen"); screen.Dynamic = true; screen.Begin("VideoMat", RenderOperation.OperationTypes.OT_TRIANGLE_LIST); screen.Position(0, 0, 0); screen.TextureCoord(0, 0); screen.Position(width, 0, 0); screen.TextureCoord(1, 0); screen.Position(width, height, 0); screen.TextureCoord(1, 1); screen.Triangle(0, 1, 2); screen.Position(0, 0, 0); screen.TextureCoord(0, 0); screen.Position(width, height, 0); screen.TextureCoord(1, 1); screen.Position(0, height, 0); screen.TextureCoord(0, 1); screen.Triangle(3, 4, 5); screen.End(); SceneNode node = scm.RootSceneNode.CreateChildSceneNode(); node.Position = new Vector3(0, 0, 0); node.AttachObject(screen); Stream.GetFrameOpen(); FrameNum = 0; }
public void AddTriangle(int a, int b, int c) { Console.WriteLine("AddTriangle: (" + a.ToString(nfi) + "; " + b.ToString(nfi) + "; " + c.ToString(nfi) + ")"); Point va = pointsList[a]; Point vb = pointsList[b]; Point vc = pointsList[c]; if ((va.X - vb.X) * (vb.Y - vc.Y) - (va.Y - vb.Y) * (vb.X - vc.X) > 0) { rendererObj.Triangle((ushort)a, (ushort)b, (ushort)c); } else { rendererObj.Triangle((ushort)c, (ushort)b, (ushort)a); } }
public MeshPtr LoadStaticBrfMeshIntoOgre(SceneManager sceneManager, MBBrfMesh brfMesh, int frame = 0) { //Convert Vertex and Faces to Ogre Mesh Format if (brfMesh == null) { return(null); } if (meshes.ContainsKey(brfMesh.Name)) { return(meshes[brfMesh.Name]); } ManualObject mo = sceneManager.CreateManualObject(brfMesh.Name + "-" + Guid.NewGuid().ToString()); mo.Begin(brfMesh.Material); int np = 0, nv = 0; for (int i = 0; i < brfMesh.Frames[frame].pos.Count; i++) { mo.Position( brfMesh.Frames[frame].pos[i].x, brfMesh.Frames[frame].pos[i].y, brfMesh.Frames[frame].pos[i].z ); np++; } for (int i = 0; i < brfMesh.Frames[frame].norm.Count; i++) { mo.Normal( -brfMesh.Frames[frame].norm[i].x, brfMesh.Frames[frame].norm[i].y, brfMesh.Frames[frame].norm[i].z ); mo.TextureCoord( brfMesh.Vertex[i].ta.X, brfMesh.Vertex[i].ta.Y ); nv++; } for (int i = 0; i < brfMesh.Faces.Count; i++) { for (int j = 0; j < 3; j++) { mo.Triangle( (uint)(brfMesh.Vertex[brfMesh.Faces[i].index[j]].index + 1 + cp), (uint)(brfMesh.Faces[i].index[j] + 1 + cv), (uint)(brfMesh.Faces[i].index[j] + 1 + cv) ); } } mo.End(); cp += np; cv += nv; return(mo.ConvertToMesh(brfMesh.Name + "-" + Guid.NewGuid().ToString())); }
public DebugRenderable( Node parent ) { _parent = parent; string materialName = "Axiom/Debug/AxesMat"; _material = (Material)MaterialManager.Instance[ materialName ]; if ( _material == null ) { _material = (Material)MaterialManager.Instance.Create( materialName, ResourceGroupManager.InternalResourceGroupName ); Pass p = _material.GetTechnique( 0 ).GetPass( 0 ); p.LightingEnabled = false; //TODO: p.PolygonModeOverrideable = false; p.VertexColorTracking = TrackVertexColor.Ambient; p.SetSceneBlending( SceneBlendType.TransparentAlpha ); p.CullingMode = CullingMode.None; p.DepthWrite = false; } string meshName = "Axiom/Debug/AxesMesh"; _mesh = MeshManager.Instance[ meshName ]; if ( _mesh == null ) { ManualObject mo = new ManualObject( "tmp" ); mo.Begin( Material.Name, OperationType.TriangleList ); /* 3 axes, each made up of 2 of these (base plane = XY) * .------------|\ * '------------|/ */ mo.EstimateVertexCount( 7 * 2 * 3 ); mo.EstimateIndexCount( 3 * 2 * 3 ); Quaternion[] quat = new Quaternion[ 6 ]; ColorEx[] col = new ColorEx[ 3 ]; // x-axis quat[ 0 ] = Quaternion.Identity; quat[ 1 ] = Quaternion.FromAxes( Vector3.UnitX, Vector3.NegativeUnitZ, Vector3.UnitY ); col[ 0 ] = ColorEx.Red; col[ 0 ].a = 0.8f; // y-axis quat[ 2 ] = Quaternion.FromAxes( Vector3.UnitY, Vector3.NegativeUnitX, Vector3.UnitZ ); quat[ 3 ] = Quaternion.FromAxes( Vector3.UnitY, Vector3.UnitZ, Vector3.UnitX ); col[ 1 ] = ColorEx.Green; col[ 1 ].a = 0.8f; // z-axis quat[ 4 ] = Quaternion.FromAxes( Vector3.UnitZ, Vector3.UnitY, Vector3.NegativeUnitX ); quat[ 5 ] = Quaternion.FromAxes( Vector3.UnitZ, Vector3.UnitX, Vector3.UnitY ); col[ 2 ] = ColorEx.Blue; col[ 2 ].a = 0.8f; Vector3[] basepos = new Vector3[ 7 ] { // stalk new Vector3(0f, 0.05f, 0f), new Vector3(0f, -0.05f, 0f), new Vector3(0.7f, -0.05f, 0f), new Vector3(0.7f, 0.05f, 0f), // head new Vector3(0.7f, -0.15f, 0f), new Vector3(1f, 0f, 0f), new Vector3(0.7f, 0.15f, 0f) }; // vertices // 6 arrows for ( int i = 0; i < 6; ++i ) { // 7 points for ( int p = 0; p < 7; ++p ) { Vector3 pos = quat[ i ] * basepos[ p ]; mo.Position( pos ); mo.Color( col[ i / 2 ] ); } } // indices // 6 arrows for ( int i = 0; i < 6; ++i ) { ushort baseIndex = (ushort)( i * 7 ); mo.Triangle( (ushort)( baseIndex + 0 ), (ushort)( baseIndex + 1 ), (ushort)( baseIndex + 2 ) ); mo.Triangle( (ushort)( baseIndex + 0 ), (ushort)( baseIndex + 2 ), (ushort)( baseIndex + 3 ) ); mo.Triangle( (ushort)( baseIndex + 4 ), (ushort)( baseIndex + 5 ), (ushort)( baseIndex + 6 ) ); } mo.End(); _mesh = mo.ConvertToMesh( meshName, ResourceGroupManager.InternalResourceGroupName ); } }
public static ManualObject CreateTetrahedron3(String name, Mogre.Vector3 position, Single scale, String materialName) { ManualObject manObTetra = new ManualObject(name); manObTetra.CastShadows = false; // render just before overlays (so all objects behind the transparent tetrahedron are visible) manObTetra.RenderQueueGroup = (byte)RenderQueueGroupID.RENDER_QUEUE_OVERLAY - 1; // = 99 Mogre.Vector3[] c = new Mogre.Vector3[4]; // corners // calculate corners of tetrahedron (with point of origin in middle of volume) Single mbot = scale * 0.2f; // distance middle to bottom Single mtop = scale * 0.62f; // distance middle to top Single mf = scale * 0.289f; // distance middle to front Single mb = scale * 0.577f; // distance middle to back Single mlr = scale * 0.5f; // distance middle to left right // width / height / depth c[0] = new Mogre.Vector3(-mlr, -mbot, mf); // left bottom front c[1] = new Mogre.Vector3(mlr, -mbot, mf); // right bottom front c[2] = new Mogre.Vector3(0, -mbot, -mb); // (middle) bottom back c[3] = new Mogre.Vector3(0, mtop, 0); // (middle) top (middle) // add position offset for all corners (move tetrahedron) for (Int16 i = 0; i <= 3; i++) c[i] += position; // create bottom manObTetra.Begin(materialName, RenderOperation.OperationTypes.OT_TRIANGLE_LIST); manObTetra.Position(c[2]); manObTetra.Position(c[1]); manObTetra.Position(c[0]); manObTetra.Triangle(0, 1, 2); manObTetra.End(); // create right back side manObTetra.Begin(materialName, RenderOperation.OperationTypes.OT_TRIANGLE_LIST); manObTetra.Position(c[1]); manObTetra.Position(c[2]); manObTetra.Position(c[3]); manObTetra.Triangle(0, 1, 2); manObTetra.End(); // create left back side manObTetra.Begin(materialName, RenderOperation.OperationTypes.OT_TRIANGLE_LIST); manObTetra.Position(c[3]); manObTetra.Position(c[2]); manObTetra.Position(c[0]); manObTetra.Triangle(0, 1, 2); manObTetra.End(); // create front side manObTetra.Begin(materialName, RenderOperation.OperationTypes.OT_TRIANGLE_LIST); manObTetra.Position(c[0]); manObTetra.Position(c[1]); manObTetra.Position(c[3]); manObTetra.Triangle(0, 1, 2); manObTetra.End(); return manObTetra; } // CreateTetrahedron
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 static ManualObject GenerateCubeHelper(float x, float y, float z, String name, Material frontFace, Material backFace, Material leftFace, Material rightFace, Material topFace, Material bottomFace, Vector3 positionOffset) { float xOffset = positionOffset.x; float yOffset = positionOffset.y; float zOffset = positionOffset.z; x /= 2; y /= 2; z /= 2; ManualObject cube = Engine.Renderer.Scene.CreateManualObject(name); cube.Dynamic = true; //START GENERATION cube.Begin(bottomFace.Name); cube.Position(x + xOffset, -y + yOffset, z + zOffset); cube.Normal(0.408248f, -0.816497f, 0.408248f); cube.TextureCoord(1, 0); //1 cube.Position(-x + xOffset, -y + yOffset, -z + zOffset); cube.Normal(-0.408248f, -0.816497f, -0.408248f); cube.TextureCoord(0, 1); //2 cube.Position(x + xOffset, -y + yOffset, -z + zOffset); cube.Normal(0.666667f, -0.333333f, -0.666667f); cube.TextureCoord(1, 1); //3 cube.Position(-x + xOffset, -y + yOffset, z + zOffset); cube.Normal(-0.666667f, -0.333333f, 0.666667f); cube.TextureCoord(0, 0); cube.Triangle(0, 1, 2); cube.Triangle(3, 1, 0); cube.End(); cube.Begin(backFace.Name); //4 cube.Position(x + xOffset, y + yOffset, z + zOffset); cube.Normal(0.666667f, 0.333333f, 0.666667f); cube.TextureCoord(1, 0); //5 cube.Position(-x + xOffset, -y + yOffset, z + zOffset); cube.Normal(-0.666667f, -0.333333f, 0.666667f); cube.TextureCoord(0, 1); //6 cube.Position(x + xOffset, -y + yOffset, z + zOffset); cube.Normal(0.408248f, -0.816497f, 0.408248f); cube.TextureCoord(1, 1); //7 cube.Position(-x + xOffset, y + yOffset, z + zOffset); cube.Normal(-0.408248f, 0.816497f, 0.408248f); cube.TextureCoord(0, 0); cube.Triangle(0, 1, 2); cube.Triangle(0, 3, 1); cube.End(); cube.Begin(leftFace.Name); //7 cube.Position(-x + xOffset, y + yOffset, z + zOffset); cube.Normal(-0.408248f, 0.816497f, 0.408248f); cube.TextureCoord(0, 0); //8 cube.Position(-x + xOffset, y + yOffset, -z + zOffset); cube.Normal(-0.666667f, 0.333333f, -0.666667f); cube.TextureCoord(0, 1); //9 cube.Position(-x + xOffset, -y + yOffset, -z + zOffset); cube.Normal(-0.408248f, -0.816497f, -0.408248f); cube.TextureCoord(1, 1); //10 cube.Position(-x + xOffset, -y + yOffset, z + zOffset); cube.Normal(-0.666667f, -0.333333f, 0.666667f); cube.TextureCoord(1, 0); cube.Triangle(1, 2, 3); cube.Triangle(3, 0, 1); cube.End(); cube.Begin(rightFace.Name); //4 cube.Position(x + xOffset, y + yOffset, z + zOffset); cube.Normal(0.666667f, 0.333333f, 0.666667f); cube.TextureCoord(1, 0); //11 cube.Position(x + xOffset, -y + yOffset, -z + zOffset); cube.Normal(0.666667f, -0.333333f, -0.666667f); cube.TextureCoord(0, 1); //12 cube.Position(x + xOffset, y + yOffset, -z + zOffset); cube.Normal(0.408248f, 0.816497f, -0.408248f); cube.TextureCoord(1, 1); //13 cube.Position(x + xOffset, -y + yOffset, z + zOffset); cube.Normal(0.408248f, -0.816497f, 0.408248f); cube.TextureCoord(0, 0); cube.Triangle(0, 1, 2); cube.Triangle(0, 3, 1); cube.End(); cube.Begin(frontFace.Name); //8 cube.Position(-x + xOffset, y + yOffset, -z + zOffset); cube.Normal(-0.666667f, 0.333333f, -0.666667f); cube.TextureCoord(0, 1); //12 cube.Position(x + xOffset, y + yOffset, -z + zOffset); cube.Normal(0.408248f, 0.816497f, -0.408248f); cube.TextureCoord(1, 1); //14 cube.Position(x + xOffset, -y + yOffset, -z + zOffset); cube.Normal(0.666667f, -0.333333f, -0.666667f); cube.TextureCoord(1, 0); //15 cube.Position(-x + xOffset, -y + yOffset, -z + zOffset); cube.Normal(-0.408248f, -0.816497f, -0.408248f); cube.TextureCoord(0, 0); cube.Triangle(2, 0, 1); cube.Triangle(2, 3, 0); cube.End(); cube.Begin(topFace.Name); //16 cube.Position(-x + xOffset, y + yOffset, z + zOffset); cube.Normal(-0.408248f, 0.816497f, 0.408248f); cube.TextureCoord(1, 0); //17 cube.Position(x + xOffset, y + yOffset, -z + zOffset); cube.Normal(0.408248f, 0.816497f, -0.408248f); cube.TextureCoord(0, 1); //18 cube.Position(-x + xOffset, y + yOffset, -z + zOffset); cube.Normal(-0.666667f, 0.333333f, -0.666667f); cube.TextureCoord(1, 1); //19 cube.Position(x + xOffset, y + yOffset, z + zOffset); cube.Normal(0.666667f, 0.333333f, 0.666667f); cube.TextureCoord(0, 0); cube.Triangle(0, 1, 2); cube.Triangle(0, 3, 1); cube.End(); return(cube); }
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); }