public Chunk() { List <Vector3> Vertices = new List <Vector3>(); List <Vector2> UVs = new List <Vector2>(); List <INDEX_TYPE> TexIDs = new List <INDEX_TYPE>(); /*JSONVoxels Torus = Libraria.Serialization.JSON.Deserialize<JSONVoxels>(Files.ReadAllText("torus.json")); * XSize = Torus.dimension[0].width + 1; * YSize = Torus.dimension[0].height + 1; * ZSize = Torus.dimension[0].depth + 1; * * //XSize = YSize = ZSize = 24; * Blocks = new int[XSize * YSize * ZSize]; * * for (int i = 0; i < Torus.voxels.Length; i++) { * JSONVoxels.VoxelElement E = Torus.voxels[i]; * SetBlock(E.x, E.y, E.z, 24); * }*/ /////////////////////// FastNoise Noise = new FastNoise(); Noise.SetNoiseType(FastNoise.NoiseType.Simplex); Noise.SetFrequency(0.01f); XSize = YSize = ZSize = 60; Blocks = new int[XSize * YSize * ZSize]; for (int X = 0; X < XSize; X++) { for (int Y = 0; Y < YSize; Y++) { for (int Z = 0; Z < ZSize; Z++) { float Weight = ((float)Y / YSize) * 2 - 1; SetBlock(X, Y, Z, Noise.GetNoise(X, Z, Y) > Weight ? 1 : 0); //24 } } } /////////////////////// int C = 0; for (int i = 0; i < Blocks.Length; i++) { if (Blocks[i] != 0) { C++; } } Console.WriteLine("{0} blocks {1} vertices {2} triangles", C, 6 * 6 * C, (6 * 6 * C) / 3); for (int x = 0; x < XSize; x++) { for (int y = 0; y < YSize; y++) { for (int z = 0; z < ZSize; z++) { GenerateBlock(Vertices, UVs, TexIDs, new Vector3(x, y, z)); } } } /*const float Scale = 100; * ObjTriangle[] Triangles = ObjLoader.Load("basegame\\objmdl\\cube\\cube.objmdl"); * for (int i = 0; i < Triangles.Length; i++) { * Vertices.AddRange(new Vector3[] { Triangles[i].A * Scale, Triangles[i].B * Scale, Triangles[i].C * Scale }); * UVs.AddRange(new Vector2[] { Triangles[i].A_UV, Triangles[i].B_UV, Triangles[i].C_UV }); * TexIDs.AddRange(new float[] { 1, 1, 1 }); * }*/ ChunkShader = new ShaderProgram("basegame\\shaders\\chunk"); ///////////////////////// /*string[] TextureFiles = Files.GetFilesInDirectory("textures\\blocks", SearchPattern: "*.png"); * int I = 0; * * foreach (var TFile in TextureFiles) { * Texture2D Tex = Texture2D.FromFile(Files.GetFullPath(TFile), GenerateMipmap: false, UseSRGBA: true); * Tex.SetFilterMode(TexFilterMode.Nearest, TexFilterMode.LinearMipmapLinear); * Tex.GenerateMipmap(); * Tex.Resident = true; * TexList.Add(Tex); * * ChunkShader.SetUniform("Textures", I++, Tex.TextureHandle); * //ChunkShader.SetUniform("Textures", I++, new long[] { Tex.TextureHandle, 0, 0, 0, 0 }); * }*/ TestMaterial = PBRMaterial.FromDirectory("basegame\\pbr\\brick"); TestMaterial.MaterialAtlasTexture.Resident = true; ////////////////// RObj = new RenderObject(DrawPrimitiveType.Triangles); RObj.BindShader(ChunkShader); if (!RObj.BindBuffer("in_Vertex", () => new VertexBuffer().SetData(Vertices.ToArray()))) { throw new Exception(); } if (!RObj.BindBuffer("in_UV", () => DataBuffer.CreateFromData(UVs))) { throw new Exception(); } if (!RObj.BindBuffer("in_TextureID", () => DataBuffer.CreateFromData(TexIDs))) { throw new Exception(); } RObj.BindIndexBuffer(new IndexBuffer().SetSequence((uint)Vertices.Count)); }