/** * Create cube. * */ public static void CreateCube(ITriangleMesh mesh, float sideLength) { mesh.Clear(); mesh.AddVertex(new Vector3(-sideLength / 2.0f, -sideLength / 2.0f, -sideLength / 2.0f)); mesh.AddVertex(new Vector3(sideLength / 2.0f, -sideLength / 2.0f, -sideLength / 2.0f)); mesh.AddVertex(new Vector3(sideLength / 2.0f, sideLength / 2.0f, -sideLength / 2.0f)); mesh.AddVertex(new Vector3(-sideLength / 2.0f, sideLength / 2.0f, -sideLength / 2.0f)); mesh.AddVertex(new Vector3(-sideLength / 2.0f, -sideLength / 2.0f, sideLength / 2.0f)); mesh.AddVertex(new Vector3(sideLength / 2.0f, -sideLength / 2.0f, sideLength / 2.0f)); mesh.AddVertex(new Vector3(sideLength / 2.0f, sideLength / 2.0f, sideLength / 2.0f)); mesh.AddVertex(new Vector3(-sideLength / 2.0f, sideLength / 2.0f, sideLength / 2.0f)); mesh.AddTriangle(new Triangle(0, 2, 1)); mesh.AddTriangle(new Triangle(0, 3, 2)); mesh.AddTriangle(new Triangle(1, 2, 5)); mesh.AddTriangle(new Triangle(2, 6, 5)); mesh.AddTriangle(new Triangle(4, 5, 6)); mesh.AddTriangle(new Triangle(4, 6, 7)); mesh.AddTriangle(new Triangle(4, 7, 0)); mesh.AddTriangle(new Triangle(0, 7, 3)); mesh.AddTriangle(new Triangle(3, 7, 2)); mesh.AddTriangle(new Triangle(2, 7, 6)); mesh.AddTriangle(new Triangle(4, 0, 1)); mesh.AddTriangle(new Triangle(1, 5, 4)); mesh.ComputeTriangleNormals(); }
/** * Read an OBJ file an create a mesh from the content. * */ public void Read(string filename, ITriangleMesh mesh) { this.mesh = mesh; mesh.Clear(); // Read input string objSource = System.IO.File.ReadAllText(AssetPath.GetPathToAsset(filename)); string[] lines = objSource.Split('\n'); foreach (String line in lines) { string[] tokens = line.Trim().Split(' ', '\t'); if (tokens.Length > 0) { if (tokens [0].CompareTo("v") == 0) { ParseVertex(tokens); } else if (tokens [0].CompareTo("f") == 0) { ParseFacet(tokens); } else if (tokens [0].CompareTo("vt") == 0) { ParseTextureCoordinate(tokens); } } } mesh.ComputeTriangleNormals(); Console.WriteLine("Read mesh from file " + filename + " with " + mesh.GetNumberOfTriangles() + " triangles and " + mesh.GetNumberOfVertices() + " vertices."); }
public static void CreateSquare(ITriangleMesh mesh, float extend) { mesh.Clear(); mesh.AddVertex(new Vector3(-extend, 0, -extend)); mesh.AddVertex(new Vector3(extend, 0, -extend)); mesh.AddVertex(new Vector3(extend, 0, extend)); mesh.AddVertex(new Vector3(-extend, 0, extend)); mesh.AddTriangle(0, 2, 1); mesh.AddTriangle(0, 3, 2); mesh.ComputeTriangleNormals(); }
/** * Create sphere. * */ public static void CreateSphere(ITriangleMesh mesh, float radius, int resolution) { mesh.Clear(); float dTheta = (float)(Math.PI / (resolution + 1)); float dPhi = (float)(Math.PI * 2.0 / resolution); // Create vertices // 0-180 degrees: i, theta for (int i = 0; i < resolution; i++) { // 0-360 degres: j, phi for (int j = 0; j < resolution; j++) { Vector3 p0 = EvaluateSpherePoint((i + 1) * dTheta, j * dPhi, radius); mesh.AddVertex(p0); } } int leftIndex = mesh.AddVertex(new Vector3(0, 0, radius)); int rightIndex = mesh.AddVertex(new Vector3(0, 0, -radius)); // Add triangles for (int i = 0; i < resolution - 1; i++) { for (int j = 0; j < resolution; j++) { mesh.AddTriangle(GetSphereIndex(i, j, resolution), GetSphereIndex(i + 1, j, resolution), GetSphereIndex(i + 1, j + 1, resolution)); mesh.AddTriangle(GetSphereIndex(i, j, resolution), GetSphereIndex(i + 1, j + 1, resolution), GetSphereIndex(i, j + 1, resolution)); } } for (int j = 0; j < resolution; j++) { mesh.AddTriangle(GetSphereIndex(0, j, resolution), GetSphereIndex(0, (j + 1) % resolution, resolution), leftIndex); mesh.AddTriangle(GetSphereIndex(resolution - 1, j, resolution), rightIndex, GetSphereIndex(resolution - 1, (j + 1) % resolution, resolution)); } mesh.ComputeTriangleNormals(); }
public void CreateShadowPolygons(Vector3 lightPosition, float extend, ITriangleMesh shadowPolygonMesh) { shadowPolygonMesh.Clear(); ArrayList silhouetteEdges = GetSilhouette(lightPosition); for (int i = 0; i < silhouetteEdges.Count; i++) { Edge edge = (Edge)silhouetteEdges[i]; Vector3 v0 = GetVertex(edge.a); Vector3 v1 = GetVertex(edge.b); Vector3 dv0 = Vector3.Multiply(Vector3.Subtract(v0, lightPosition).Normalized(), extend); Vector3 dv1 = Vector3.Multiply(Vector3.Subtract(v1, lightPosition).Normalized(), extend); Vector3 v0Dash = Vector3.Add(v0, dv0); Vector3 v1Dash = Vector3.Add(v1, dv1); int v0Index = shadowPolygonMesh.AddVertex(v0); int v1Index = shadowPolygonMesh.AddVertex(v1); int v0DashIndex = shadowPolygonMesh.AddVertex(v0Dash); int v1DashIndex = shadowPolygonMesh.AddVertex(v1Dash); shadowPolygonMesh.AddTriangle(v0Index, v0DashIndex, v1DashIndex); shadowPolygonMesh.AddTriangle(v0Index, v1DashIndex, v1Index); } shadowPolygonMesh.ComputeTriangleNormals(); }