示例#1
0
        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);
        }
示例#2
0
        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);
        }
示例#3
0
        private void UpdateRaytraceMesh()
        {
            DefaultMesh mesh = new DefaultMesh();

            mesh.Add(Meshes.CreateCubeWithNormals(_voxelSize).Transform(Matrix4x4.CreateTranslation(_raytraceVoxelPosition)));

            _raytraceGeometry = VAOLoader.FromMesh(mesh, _raytraceShader);
        }
示例#4
0
        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);
            }
        }
示例#5
0
        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);
        }