public void Generate(Mesh mesh) { int nvertices = 4 * 6; Vector3[] vertices = new Vector3[nvertices]; int vertexIdx = 0; Vector2[] uv = new Vector2[nvertices]; int uvsIdx = 0; Vector3[] normals = new Vector3[nvertices]; int normalIdx = 0; int [] indices = new int[6 * 8]; int indexIdx = 0; Mesh tempMesh = new Mesh(); QuadGenerator quadGenerator = new QuadGenerator(); QuadGenerator.QuadProperties quadProperties; Vector2 HalfSizeXZ = new Vector2(_properties.HalfSize.x, _properties.HalfSize.z); Vector2 HalfSizeXY = new Vector2(_properties.HalfSize.x, _properties.HalfSize.y); Vector2 HalfSizeZY = new Vector2(_properties.HalfSize.z, _properties.HalfSize.y); // Bottom Vector3 position = -_properties.Up * _properties.HalfSize.y; Vector3 front = -_properties.Up; Vector3 up = Vector3.Cross(_properties.Right, front); quadProperties = new QuadGenerator.QuadProperties(position, HalfSizeXZ, front, up); quadGenerator.SetProperties(quadProperties); quadGenerator.Generate(tempMesh); vertexIdx += AddVector3(vertices, tempMesh.vertices, vertexIdx); normalIdx += AddVector3(normals, tempMesh.normals, normalIdx); indexIdx += AddIndices(indices, tempMesh.triangles, indexIdx, 0); uvsIdx += AddUVs(uv, tempMesh.uv, uvsIdx); // Top position = _properties.Up * _properties.HalfSize.y; front = _properties.Up; up = Vector3.Cross(_properties.Right, front); quadProperties = new QuadGenerator.QuadProperties(position, HalfSizeXZ, front, up); quadGenerator.SetProperties(quadProperties); quadGenerator.Generate(tempMesh); vertexIdx += AddVector3(vertices, tempMesh.vertices, vertexIdx); normalIdx += AddVector3(normals, tempMesh.normals, normalIdx); indexIdx += AddIndices(indices, tempMesh.triangles, indexIdx, 4); uvsIdx += AddUVs(uv, tempMesh.uv, uvsIdx); // Left position = -_properties.Right * _properties.HalfSize.x; front = -_properties.Right; up = _properties.Up; quadProperties = new QuadGenerator.QuadProperties(position, HalfSizeZY, front, up); quadGenerator.SetProperties(quadProperties); quadGenerator.Generate(tempMesh); vertexIdx += AddVector3(vertices, tempMesh.vertices, vertexIdx); normalIdx += AddVector3(normals, tempMesh.normals, normalIdx); indexIdx += AddIndices(indices, tempMesh.triangles, indexIdx, 8); uvsIdx += AddUVs(uv, tempMesh.uv, uvsIdx); // Right position = _properties.Right * _properties.HalfSize.x; front = _properties.Right; up = _properties.Up; quadProperties = new QuadGenerator.QuadProperties(position, HalfSizeZY, front, up); quadGenerator.SetProperties(quadProperties); quadGenerator.Generate(tempMesh); vertexIdx += AddVector3(vertices, tempMesh.vertices, vertexIdx); normalIdx += AddVector3(normals, tempMesh.normals, normalIdx); indexIdx += AddIndices(indices, tempMesh.triangles, indexIdx, 12); uvsIdx += AddUVs(uv, tempMesh.uv, uvsIdx); // Front position = _properties.Front * _properties.HalfSize.z; front = _properties.Front; up = _properties.Up; quadProperties = new QuadGenerator.QuadProperties(position, HalfSizeXY, front, up); quadGenerator.SetProperties(quadProperties); quadGenerator.Generate(tempMesh); vertexIdx += AddVector3(vertices, tempMesh.vertices, vertexIdx); normalIdx += AddVector3(normals, tempMesh.normals, normalIdx); indexIdx += AddIndices(indices, tempMesh.triangles, indexIdx, 16); uvsIdx += AddUVs(uv, tempMesh.uv, uvsIdx); // Bottom position = -_properties.Front * _properties.HalfSize.z; front = -_properties.Front; up = _properties.Up; quadProperties = new QuadGenerator.QuadProperties(position, HalfSizeXY, front, up); quadGenerator.SetProperties(quadProperties); quadGenerator.Generate(tempMesh); vertexIdx += AddVector3(vertices, tempMesh.vertices, vertexIdx); normalIdx += AddVector3(normals, tempMesh.normals, normalIdx); indexIdx += AddIndices(indices, tempMesh.triangles, indexIdx, 20); uvsIdx += AddUVs(uv, tempMesh.uv, uvsIdx); mesh.vertices = vertices; mesh.normals = normals; mesh.triangles = indices; mesh.uv = uv; }
public void Generate(Mesh mesh) { int nvertices = 4 * 6; Vector3[] vertices = new Vector3[nvertices]; int vertexIdx = 0; Vector2[] uv = new Vector2[nvertices]; int uvsIdx = 0; Vector3[] normals = new Vector3[nvertices]; int normalIdx = 0; int [] indices = new int[6 * 8]; int indexIdx = 0; Mesh tempMesh = new Mesh(); QuadGenerator quadGenerator = new QuadGenerator(); QuadGenerator.QuadProperties quadProperties; Vector2 HalfSizeXZ = new Vector2(_properties.HalfSize.x, _properties.HalfSize.z); Vector2 HalfSizeXY = new Vector2(_properties.HalfSize.x, _properties.HalfSize.y); Vector2 HalfSizeZY = new Vector2(_properties.HalfSize.z, _properties.HalfSize.y); // Bottom Vector3 position = -_properties.Up * _properties.HalfSize.y; Vector3 front = -_properties.Up; Vector3 up = Vector3.Cross(_properties.Right, front); quadProperties = new QuadGenerator.QuadProperties(position, HalfSizeXZ, front, up); quadGenerator.SetProperties(quadProperties); quadGenerator.Generate(tempMesh); vertexIdx += AddVector3(vertices, tempMesh.vertices, vertexIdx); normalIdx += AddVector3(normals, tempMesh.normals, normalIdx); indexIdx += AddIndices(indices, tempMesh.triangles, indexIdx, 0); uvsIdx += AddUVs(uv, tempMesh.uv, uvsIdx); // Top position = _properties.Up * _properties.HalfSize.y; front = _properties.Up; up = Vector3.Cross(_properties.Right, front); quadProperties = new QuadGenerator.QuadProperties(position, HalfSizeXZ, front, up); quadGenerator.SetProperties(quadProperties); quadGenerator.Generate(tempMesh); vertexIdx += AddVector3(vertices, tempMesh.vertices, vertexIdx); normalIdx += AddVector3(normals, tempMesh.normals, normalIdx); indexIdx += AddIndices(indices, tempMesh.triangles, indexIdx, 4); uvsIdx += AddUVs(uv, tempMesh.uv, uvsIdx); // Left position = -_properties.Right * _properties.HalfSize.x; front = -_properties.Right; up = _properties.Up; quadProperties = new QuadGenerator.QuadProperties(position, HalfSizeZY, front, up); quadGenerator.SetProperties(quadProperties); quadGenerator.Generate(tempMesh); vertexIdx += AddVector3(vertices, tempMesh.vertices, vertexIdx); normalIdx += AddVector3(normals, tempMesh.normals, normalIdx); indexIdx += AddIndices(indices, tempMesh.triangles, indexIdx, 8); uvsIdx += AddUVs(uv, tempMesh.uv, uvsIdx); // Right position = _properties.Right * _properties.HalfSize.x; front = _properties.Right; up = _properties.Up; quadProperties = new QuadGenerator.QuadProperties(position, HalfSizeZY, front, up); quadGenerator.SetProperties(quadProperties); quadGenerator.Generate(tempMesh); vertexIdx += AddVector3(vertices, tempMesh.vertices, vertexIdx); normalIdx += AddVector3(normals, tempMesh.normals, normalIdx); indexIdx += AddIndices(indices, tempMesh.triangles, indexIdx, 12); uvsIdx += AddUVs(uv, tempMesh.uv, uvsIdx); // Front position = _properties.Front * _properties.HalfSize.z; front = _properties.Front; up = _properties.Up; quadProperties = new QuadGenerator.QuadProperties(position, HalfSizeXY, front, up); quadGenerator.SetProperties(quadProperties); quadGenerator.Generate(tempMesh); vertexIdx += AddVector3(vertices, tempMesh.vertices, vertexIdx); normalIdx += AddVector3(normals, tempMesh.normals, normalIdx); indexIdx += AddIndices(indices, tempMesh.triangles, indexIdx, 16); uvsIdx += AddUVs(uv, tempMesh.uv, uvsIdx); // Bottom position = -_properties.Front * _properties.HalfSize.z; front = -_properties.Front; up = _properties.Up; quadProperties = new QuadGenerator.QuadProperties(position, HalfSizeXY, front, up); quadGenerator.SetProperties(quadProperties); quadGenerator.Generate(tempMesh); vertexIdx += AddVector3(vertices, tempMesh.vertices, vertexIdx); normalIdx += AddVector3(normals, tempMesh.normals, normalIdx); indexIdx += AddIndices(indices, tempMesh.triangles, indexIdx, 20); uvsIdx += AddUVs(uv, tempMesh.uv, uvsIdx); mesh.vertices = vertices; mesh.normals = normals; mesh.triangles = indices; mesh.uv = uv; }