/// <summary> /// Renders the mesh usign World matrix from Node, the View matrix from camera and the Material /// </summary> /// <param name="node"></param> /// <param name="camera"></param> /// <param name="material"></param> public void Draw(Node node, Camera camera, Material material, RenderableMeshPart meshPart, List <Light> lights = null) { UpdateInternal(); //Matrix matrix=Matrix.Identity; //Internal.Draw(ref matrix, ref matrix, ref matrix, material); Internal.Draw(ref node.WorldMatrix, ref camera.View, ref camera.Projection, material, camera, ref meshPart, lights); }
/// <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); }