public MainVisual(IRenderState renderState, IContentLoader contentLoader) { renderState.Set(new DepthTest(true)); renderState.Set(new FaceCullingModeState(FaceCullingMode.BACK_SIDE)); shaderProgramPhong = contentLoader.Load <IShaderProgram>("phong.*"); var mesh = new DefaultMesh(); var roomSize = 8; //off-center plane var plane = Meshes.CreatePlane(roomSize, roomSize, 2, 2).Transform(Transformation.Translation(0, -roomSize / 2, 0)); mesh.Add(plane); //rotate plane to create box mesh.Add(plane.Transform(Transformation.Rotation(90f, Axis.Z))); mesh.Add(plane.Transform(Transformation.Rotation(180f, Axis.Z))); mesh.Add(plane.Transform(Transformation.Rotation(270f, Axis.Z))); mesh.Add(plane.Transform(Transformation.Rotation(90f, Axis.X))); mesh.Add(plane.Transform(Transformation.Rotation(-90f, Axis.X))); var sphere = Meshes.CreateSphere(1); sphere.SetConstantUV(Vector2.Zero); //all other meshes have texture coordinates mesh.Add(sphere); var suzanne = contentLoader.Load <DefaultMesh>("suzanne"); mesh.Add(suzanne.Transform(Transformation.Translation(2, 2, -2))); geometryPhong = VAOLoader.FromMesh(mesh, shaderProgramPhong); shaderProgramToon = contentLoader.Load <IShaderProgram>("toon.*"); geometryToon = VAOLoader.FromMesh(suzanne.Transform(Transformation.Translation(2, 0, 0)), shaderProgramToon); }
public MainVisual(IRenderState renderState, IContentLoader contentLoader) { renderState.Set(BoolState <IDepthState> .Enabled); renderState.Set(BoolState <IBackfaceCullingState> .Enabled); renderState.Set(BlendStates.AlphaBlend); shaderProgram = contentLoader.Load <IShaderProgram>("phong.*"); var mesh = new DefaultMesh(); var roomSize = 8; //off-center plane var plane = Meshes.CreatePlane(roomSize, roomSize, 2, 2).Transform(new Translation3D(0, -roomSize / 2, 0)); mesh.Add(plane); //rotate plane to create box mesh.Add(plane.Transform(new Rotation3D(Axis.Z, 90f))); mesh.Add(plane.Transform(new Rotation3D(Axis.Z, 180f))); mesh.Add(plane.Transform(new Rotation3D(Axis.Z, 270f))); mesh.Add(plane.Transform(new Rotation3D(Axis.X, 90f))); mesh.Add(plane.Transform(new Rotation3D(Axis.X, -90f))); var sphere = Meshes.CreateSphere(1); sphere.SetConstantUV(new Vector2(0, 0)); mesh.Add(sphere); var suzanne = contentLoader.Load <DefaultMesh>("suzanne"); mesh.Add(suzanne.Transform(new Translation3D(2, 2, -2))); geometry = VAOLoader.FromMesh(mesh, shaderProgram); }
private void UpdateRaytraceMesh() { DefaultMesh mesh = new DefaultMesh(); mesh.Add(Meshes.CreateCubeWithNormals(_voxelSize).Transform(Matrix4x4.CreateTranslation(_raytraceVoxelPosition))); _raytraceGeometry = VAOLoader.FromMesh(mesh, _raytraceShader); }
public void Add(VoxelMesh voxelMesh) { DefaultMesh.Add(voxelMesh.DefaultMesh); TexCoord3D.AddRange(voxelMesh.TexCoord3D); MaterialAmount.AddRange(voxelMesh.MaterialAmount); MaterialId.AddRange(voxelMesh.MaterialId); uint max = 0; if (VoxelId.Count > 0) { max = (uint)(VoxelId.Last() + 1); } foreach (var voxelId in voxelMesh.VoxelId) { VoxelId.Add(voxelId + max); } }
private void GenerateVoronoi(int sizeX, int sizeY, Vector3 scale) { Random rand = new Random(345546); float RandFloat() => (float)rand.NextDouble(); float[,] heights = new float[sizeX + 2, sizeY + 2]; Vector2[,] centers = new Vector2[sizeX + 2, sizeY + 2]; for (int x = 0; x < sizeX + 2; x++) { for (int y = 0; y < sizeY + 2; y++) { heights[x, y] = RandFloat() * scale.Y; centers[x, y] = new Vector2((RandFloat() + x - ((sizeX + 2)) / 2) * scale.X, (RandFloat() + y - ((sizeY + 2) / 2)) * scale.Z); } } for (int x = 1; x < sizeX + 1; x++) { for (int y = 1; y < sizeY + 1; y++) { List <Vector2> neighbors = new List <Vector2>() { centers[x - 1, y - 1], centers[x - 1, y], centers[x - 1, y + 1], centers[x, y - 1], centers[x, y + 1], centers[x + 1, y - 1], centers[x + 1, y], centers[x + 1, y + 1] }; GenerateVoronoiTower(centers[x, y], neighbors, heights[x, y]); } } DefaultMesh plane = Meshes.CreatePlane(sizeX * scale.X, sizeY * scale.Z, 1, 1); plane.TexCoord.Clear(); Mesh.Add(plane); }