/// <summary> /// Default constructor. Automatically creates the <see cref="MeshParts"/> and <see cref="Materials"/> List with 0 elements. /// </summary> /// <param name="engine"></param> /// <param name="material"></param> public RenderableMeshMultiMaterial(RenderableMeshMultiMaterial source) { this.Mesh = source.Mesh; Materials = new List <Material>(source.Materials); Visible = source.Visible; }
/// <summary> /// Clones this object. All the properties will be cloned /// </summary> /// <returns></returns> public RenderableMeshMultiMaterial Clone() { RenderableMeshMultiMaterial newObject = new RenderableMeshMultiMaterial(this); return(newObject); }
/// <summary> /// Creates a RenderableMeshMultiMaterial for a 1 unit Cube with 6 faces /// Each face has is own TextureCoords, so you could assign one texture to each face /// Face 0 is Rear Face /// Face 1 is Front /// Face 2 is Top /// Face 3 is Bottom /// Face 4 is Left /// Face 5 is Right /// </summary> /// <param name="device"></param> public static RenderableMeshMultiMaterial CreateCube(VisualEngine engine) { MeshBasic mesh = new MeshBasic(engine, 24, 36); Vector3[] vb = mesh.Position; Vector3[] normal = mesh.Normal = new Vector3[mesh.NumVertices]; Vector2[,] texCoord = mesh.TexCoord = new Vector2[1, mesh.NumVertices]; mesh.Tangent = new Vector3[mesh.NumVertices]; mesh.VertexColor = new Vector4[mesh.NumVertices]; uint[] ib = mesh.Indices; uint i = 0; // Rear 0 vb[i] = new Vector3(0.5f, 0.5f, -0.5f); normal[i] = new Vector3(0, 0, -1); texCoord[0, i] = new Vector2(0, 0); i++; vb[i] = new Vector3(-0.5f, 0.5f, -0.5f); normal[i] = new Vector3(0, 0, -1); texCoord[0, i] = new Vector2(1, 0); i++; vb[i] = new Vector3(-0.5f, -0.5f, -0.5f); normal[i] = new Vector3(0, 0, -1); texCoord[0, i] = new Vector2(1, 1); i++; vb[i] = new Vector3(0.5f, -0.5f, -0.5f); normal[i] = new Vector3(0, 0, -1); texCoord[0, i] = new Vector2(0, 1); i++; // Front 4 vb[i] = new Vector3(-0.5f, 0.5f, 0.5f); normal[i] = new Vector3(0, 0, 1); texCoord[0, i] = new Vector2(0, 0); i++; vb[i] = new Vector3(0.5f, 0.5f, 0.5f); normal[i] = new Vector3(0, 0, 1); texCoord[0, i] = new Vector2(1, 0); i++; vb[i] = new Vector3(0.5f, -0.5f, 0.5f); normal[i] = new Vector3(0, 0, 1); texCoord[0, i] = new Vector2(1, 1); i++; vb[i] = new Vector3(-0.5f, -0.5f, 0.5f); normal[i] = new Vector3(0, 0, 1); texCoord[0, i] = new Vector2(0, 1); i++; // Top 8 vb[i] = new Vector3(-0.5f, 0.5f, -0.5f); normal[i] = new Vector3(0, 1, 0); texCoord[0, i] = new Vector2(0, 0); i++; vb[i] = new Vector3(0.5f, 0.5f, -0.5f); normal[i] = new Vector3(0, 1, 0); texCoord[0, i] = new Vector2(1, 0); i++; vb[i] = new Vector3(0.5f, 0.5f, 0.5f); normal[i] = new Vector3(0, 1, 0); texCoord[0, i] = new Vector2(1, 1); i++; vb[i] = new Vector3(-0.5f, 0.5f, 0.5f); normal[i] = new Vector3(0, 1, 0); texCoord[0, i] = new Vector2(0, 1); i++; // Bottom 12 vb[i] = new Vector3(0.5f, -0.5f, -0.5f); normal[i] = new Vector3(0, -1, 0); texCoord[0, i] = new Vector2(0, 0); i++; vb[i] = new Vector3(-0.5f, -0.5f, -0.5f); normal[i] = new Vector3(0, -1, 0); texCoord[0, i] = new Vector2(1, 0); i++; vb[i] = new Vector3(-0.5f, -0.5f, 0.5f); normal[i] = new Vector3(0, -1, 0); texCoord[0, i] = new Vector2(1, 1); i++; vb[i] = new Vector3(0.5f, -0.5f, 0.5f); normal[i] = new Vector3(0, -1, 0); texCoord[0, i] = new Vector2(0, 1); i++; // Left 16 vb[i] = new Vector3(-0.5f, 0.5f, -0.5f); normal[i] = new Vector3(-1, 0, 0); texCoord[0, i] = new Vector2(0, 0); i++; vb[i] = new Vector3(-0.5f, 0.5f, 0.5f); normal[i] = new Vector3(-1, 0, 0); texCoord[0, i] = new Vector2(1, 0); i++; vb[i] = new Vector3(-0.5f, -0.5f, 0.5f); normal[i] = new Vector3(-1, 0, 0); texCoord[0, i] = new Vector2(1, 1); i++; vb[i] = new Vector3(-0.5f, -0.5f, -0.5f); normal[i] = new Vector3(-1, 0, 0); texCoord[0, i] = new Vector2(0, 1); i++; // Right 20 vb[i] = new Vector3(0.5f, 0.5f, 0.5f); normal[i] = new Vector3(1, 0, 0); texCoord[0, i] = new Vector2(0, 0); i++; vb[i] = new Vector3(0.5f, 0.5f, -0.5f); normal[i] = new Vector3(1, 0, 0); texCoord[0, i] = new Vector2(1, 0); i++; vb[i] = new Vector3(0.5f, -0.5f, -0.5f); normal[i] = new Vector3(1, 0, 0); texCoord[0, i] = new Vector2(1, 1); i++; vb[i] = new Vector3(0.5f, -0.5f, 0.5f); normal[i] = new Vector3(1, 0, 0); texCoord[0, i] = new Vector2(0, 1); i++; for (int k = 0; k < i; k++) { // Tangent vectors are always the same for a cube mesh.Tangent[k] = new Vector3(1, 0, 0); mesh.VertexColor[k] = new Vector4(1, 1, 1, 1); } // OGL COUNTER-ClockWISE order i = 0; for (uint face = 0; face < 6; face++) { uint vertex = face * 4; ib[i++] = vertex + 2; ib[i++] = vertex + 1; ib[i++] = vertex + 0; ib[i++] = vertex + 2; ib[i++] = vertex + 0; ib[i++] = vertex + 3; } // Create the RenderableMeshPart, six parts, one part for each face RenderableMeshMultiMaterial renderable = new RenderableMeshMultiMaterial(mesh); renderable.Mesh.MeshParts = new List <RenderableMeshPart>(6); for (i = 0; i < 6; i++) { RenderableMeshPart meshPart = new RenderableMeshPart(6, i * 6, 0); renderable.Mesh.MeshParts.Add(meshPart); } return(renderable); }