void Initialize() { if (_ShapeGenerator == null) { _ShapeGenerator = new PlanetShapeGenerator(_ShapeSettings); } if (_MeshFilters == null || _MeshFilters.Length == 0) { _MeshFilters = new MeshFilter[6]; } _TerrainFaces = new TerrainFace[6]; Vector3[] terrainFaceDirections = { Vector3.up, Vector3.down, Vector3.left, Vector3.right, Vector3.forward, Vector3.back }; for (int iter = 0; iter < 6; ++iter) { if (_MeshFilters[iter] == null) { GameObject meshObj = new GameObject("mesh"); meshObj.transform.parent = this.transform; meshObj.AddComponent <MeshRenderer>().sharedMaterial = new Material(Shader.Find("Standard")); _MeshFilters[iter] = meshObj.AddComponent <MeshFilter>(); _MeshFilters[iter].sharedMesh = new Mesh(); } _TerrainFaces[iter] = new TerrainFace(_ShapeGenerator, _MeshFilters[iter].sharedMesh, _TerrainFaceResolution, terrainFaceDirections[iter]); } }
void Initialize() { shapeGenerator = new PlanetShapeGenerator(shapeSettings); if (meshFilters == null || meshFilters.Length == 0) { meshFilters = new MeshFilter[6]; } planetFaces = new PlanetFace[6]; Vector3[] directions = { Vector3.up, Vector3.down, Vector3.left, Vector3.right, Vector3.forward, Vector3.back }; for (int i = 0; i < 6; ++i) { if (meshFilters[i] == null) { GameObject meshObj = new GameObject("mesh"); meshObj.transform.parent = transform; meshObj.transform.position = transform.position; meshObj.AddComponent <MeshRenderer>().sharedMaterial = new Material(Shader.Find("Standard")); meshFilters[i] = meshObj.AddComponent <MeshFilter>(); meshFilters[i].sharedMesh = new Mesh(); } planetFaces[i] = new PlanetFace(shapeGenerator, meshFilters[i].sharedMesh, resolution, directions[i]); } }
// Initialize... initialize the planet void Initialize() { // declare the shape gene shapeGenerator = new PlanetShapeGenerator(shapeSettings); // declare 6 mesh faces if (meshFilters == null || meshFilters.Length == 0) { meshFilters = new MeshFilter[6]; } planetFaces = new PlanetFaceMesh[6]; // Create LocalUp Vector3[] directions = { Vector3.up, Vector3.down, Vector3.left, Vector3.right, Vector3.forward, Vector3.back }; for (int i = 0; i < meshFilters.Length; i++) // i use .Lenght instead of 6 because... we never know { if (meshFilters[i] == null) { // Create the GameObj of the face GameObject meshObj = new GameObject(string.Concat("face", i.ToString())); // link them to parent meshObj.transform.parent = transform; // create a mesh renderer meshObj.AddComponent <MeshRenderer>().sharedMaterial = new Material(Shader.Find("Standard")); meshFilters[i] = meshObj.AddComponent <MeshFilter>(); meshFilters[i].sharedMesh = new Mesh(); } // Create the Face planetFaces[i] = new PlanetFaceMesh(shapeGenerator, meshFilters[i].sharedMesh, resolution, directions[i]); } }
public PlanetTerrainFace(Mesh mesh, int resolution, Vector3 localUp, PlanetShapeGenerator shapeGenerator) { this.mesh = mesh; this.resolution = resolution; this.localUp = localUp; this.shapeGenerator = shapeGenerator; xAxis = new Vector3(localUp.y, localUp.z, localUp.x); zAxis = Vector3.Cross(localUp, xAxis); }
public TerrainFace(PlanetShapeGenerator shapeGenerator, Mesh mesh, int resolution, Vector3 localUp) { this.shapeGenerator = shapeGenerator; this.mesh = mesh; this.resolution = resolution; this.localUp = localUp; axisA = new Vector3(localUp.y, localUp.z, localUp.x); axisB = Vector3.Cross(localUp, axisA); }
public PlanetFace(PlanetShapeGenerator generator, Mesh _mesh, int _resolution, Vector3 _localUp) { shapeGenerator = generator; mesh = _mesh; resolution = _resolution; normal = _localUp.normalized; tangent = new Vector3(normal.y, normal.z, normal.x).normalized; bitangent = Vector3.Cross(normal, tangent).normalized; }
public TerrainFace(PlanetShapeGenerator shapeGenerator, Mesh mesh, int resolution, Vector3 localUp) { _ShapeGenerator = shapeGenerator; this._Mesh = mesh; this._Resolution = resolution; _Sight = new Vector3(localUp.y, localUp.z, localUp.x); _Horizon = Vector3.Cross(localUp, _Sight); _Banking = localUp; }
void Initialize() { if (mMeshFiliters == null) { mMeshFiliters = new MeshFilter[6]; } if (mTerrainface == null) { mTerrainface = new TerrainFace[6]; } Vector3[] dirs = new Vector3[] { Vector3.up, Vector3.down, Vector3.right, Vector3.forward, Vector3.back, Vector3.left, }; for (int i = 0; i < dirs.Length; ++i) { if (mMeshFiliters[i] == null) { GameObject go = new GameObject(dirs[i].ToString()); go.transform.SetParent(this.transform); go.transform.localPosition = Vector3.zero; mMeshFiliters[i] = go.AddComponent <MeshFilter>(); go.AddComponent <MeshRenderer>(); } if (mTerrainface[i] == null) { mTerrainface[i] = new TerrainFace(); } mTerrainface[i].Resolution = resoultion; mTerrainface[i].Up = dirs[i]; mMeshFiliters[i].sharedMesh = mTerrainface[i].Mesh; } if (mShapeGenerator == null) { mShapeGenerator = new PlanetShapeGenerator(); } mShapeGenerator.Initialize(ShapeSetting); if (mColorGenerator == null) { mColorGenerator = new PlanetColorGenerator(); } mColorGenerator.Initialize(ColorSetting); }
// Constructor public PlanetFaceMesh(PlanetShapeGenerator shapeGenerator, Mesh mesh, int resolution, Vector3 localUp) { // Set params this.shapeGenerator = shapeGenerator; this.mesh = mesh; this.resolution = resolution; this.localUp = localUp; // deduce axisA and B axisA = new Vector3(localUp.y, localUp.z, localUp.x); axisB = Vector3.Cross(localUp, axisA); // Cross is a fonc that search perp vector so the perp Vector of Up and A is B }
public void Construct(PlanetShapeGenerator shapeGenerator, PlanetColorGenerator colorGenerator) { List <Vector3> vertices = new List <Vector3>(mResolution * mResolution); List <Vector2> uvs = new List <Vector2>(mResolution * mResolution); List <int> indices = new List <int>(mResolution * mResolution * 6); Vector3 right = new Vector3(mUp.y, mUp.z, mUp.x); Vector3 forward = Vector3.Cross(right, mUp); for (int y = 0; y < mResolution; ++y) { for (int x = 0; x < mResolution; ++x) { Vector2 percent = new Vector2((float)x / (mResolution - 1), (float)y / (mResolution - 1)); Vector3 pointOnCube = mUp + (percent.y - 0.5f) * 2f * forward + (percent.x - 0.5f) * 2f * right; Vector3 pointOnCircle = pointOnCube.normalized; float unscaledElevation = shapeGenerator.CalculateUnscaledElevation(pointOnCircle); vertices.Add(pointOnCircle * shapeGenerator.GetScaledElevation(unscaledElevation)); uvs.Add(new Vector2(colorGenerator.CalculateBiomeOnPlanet(pointOnCircle), unscaledElevation)); } } for (int y = 0; y < mResolution - 1; ++y) { for (int x = 0; x < mResolution - 1; ++x) { int index = x + y * (mResolution); indices.Add(index); indices.Add(index + mResolution); indices.Add(index + 1); indices.Add(index + mResolution + 1); indices.Add(index + 1); indices.Add(index + mResolution); } } mMesh.Clear(); mMesh.SetVertices(vertices); mMesh.SetUVs(0, uvs); mMesh.SetTriangles(indices, 0); mMesh.RecalculateNormals(); mMesh.RecalculateTangents(); mMesh.UploadMeshData(false); colorGenerator.SetMinMaxValue(shapeGenerator.VecMinMax); }
void Initialize() { if (!this.gameObject.GetComponent(typeof(Rigidbody))) { this.gameObject.AddComponent <Rigidbody>().mass = 1; } if (shapeSettings == null) { Debug.Log("nullshapesettings..."); } shapeGenerator = new PlanetShapeGenerator(shapeSettings); if (meshFilters == null || meshFilters.Length == 0) { meshFilters = new MeshFilter[6]; } terrainFaces = new TerrainFace[6]; Vector3[] directions = { Vector3.up, Vector3.down, Vector3.left, Vector3.right, Vector3.forward, Vector3.back }; for (int i = 0; i < 6; i++) { if (meshFilters[i] == null) { GameObject meshObj = new GameObject("mesh"); meshObj.transform.parent = transform; meshObj.AddComponent <MeshRenderer>().sharedMaterial = new Material(Shader.Find("Standard")); meshObj.AddComponent <MeshCollider>().convex = true; MeshCollider meshCollider = meshObj.GetComponent(typeof(MeshCollider)) as MeshCollider; meshFilters[i] = meshObj.AddComponent <MeshFilter>(); meshFilters[i].sharedMesh = new Mesh(); meshCollider.sharedMesh = meshFilters[i].mesh; meshCollider.material = shapeSettings.material; } terrainFaces[i] = new TerrainFace(shapeGenerator, meshFilters[i].sharedMesh, resolution, directions[i]); } }