Ejemplo n.º 1
0
        private void button1_Click(object sender, EventArgs e)
        {
            src = Bitmap.FromFile(@"f:\output.bmp");
            src2 = Bitmap.FromFile(@"C:\Users\Andrew\Pictures\sense.jpg");

            RasterDatabase db = new RasterDatabase();
            DataLayer layer;
            db.AddLayer(layer = new DataLayer("DiffuseMap", 32, "X8R8G8B8"));
            layer.AddArea(new DataArea(new Rectangle(0, 0, 960, 1200), new RectangleF(0, 0, 1, 1), src));
            layer.AddArea(new DataArea(new Rectangle(1000, 50, 501, 501), new RectangleF(0, 0, 1, 1), src2));

            tree = layer.BuildQuadTree(512);

            DrawDepth();
        }
Ejemplo n.º 2
0
        private void button1_Click(object sender, EventArgs e)
        {
            src  = Bitmap.FromFile(@"f:\output.bmp");
            src2 = Bitmap.FromFile(@"C:\Users\Andrew\Pictures\sense.jpg");

            RasterDatabase db = new RasterDatabase();
            DataLayer      layer;

            db.AddLayer(layer = new DataLayer("DiffuseMap", 32, "X8R8G8B8"));
            layer.AddArea(new DataArea(new Rectangle(0, 0, 960, 1200), new RectangleF(0, 0, 1, 1), src));
            layer.AddArea(new DataArea(new Rectangle(1000, 50, 501, 501), new RectangleF(0, 0, 1, 1), src2));

            tree = layer.BuildQuadTree(512);

            DrawDepth();
        }
Ejemplo n.º 3
0
        public static GpuDemGeometry CreateGeometry(RasterDatabase.RasterDatabase rDatabase, Device gDevice,
                                                    out float maxValue, GDALReader reader)
        {
            // create actual geometry - tesselated plane
            IndexBuffer geomPlaneIndices;

            PlaneHelper.CreateIndexBuffer(gDevice, 14, 14, out geomPlaneIndices);
            VertexBuffer geomPlaneVerts;

            PlaneHelper.CreateVertexBufferInside(gDevice, 16, 16, new Vector2(1, 1), out geomPlaneVerts);
            VertexBuffer geomPatchVerts;

            PlaneHelper.CreatePatchVertexBuffer(gDevice, 16, 16, new Vector2(1, 1), out geomPatchVerts);
            IndexBuffer geomPatchIndices;

            PlaneHelper.CreatePatchIndexBuffer(gDevice, 16, 16, out geomPatchIndices);

            // create cache of all depths
            RectangleGroupQuadTree rTree = rDatabase.ProduceLayerMipMap(0, 256);

            RectangleGroupQuadTree.GroupNode[][] dataNodes = new RectangleGroupQuadTree.GroupNode[rTree.Depth][];
            for (int depth = 0; depth < rTree.Depth; depth++)
            {
                RectangleGroupQuadTree.GroupNode[] nodes;
                rTree.GetNodes(depth + 1, out nodes);
                dataNodes[depth] = nodes;
            }

            GpuDemGeometry geom = new GpuDemGeometry(new Vector3(), new Vector3(10, 0, 10), new Vector3(5, 0, 5),
                                                     16 * 16, 15 * 15 * 2, PrimitiveType.TriangleList,
                                                     gDevice);

            geom.geomPlaneVerts   = geomPlaneVerts;
            geom.geomPlaneIndices = geomPlaneIndices;
            geom.geomPatchIndices = geomPatchIndices;
            geom.geomPatchVerts   = geomPatchVerts;
            geom.reader           = reader;
            geom.dataNodes        = dataNodes;
            geom.ViewUpdated(new Vector3());

            maxValue = 1;
            return(geom);
        }
Ejemplo n.º 4
0
        public static CpuDemGeometry CreateGeometry(RasterDatabase.RasterDatabase rDatabase, Device gDevice,
                                                    out float maxValue)
        {
            // TODO: Still some atifact problems?

            // just use default LOD for now
            RectangleGroupQuadTree rTree = rDatabase.ProduceLayerMipMap(0, maxRes);

            maxValue = rTree.MaxDataValue;

            // use bottom level only for now
            RectangleGroupQuadTree.GroupNode[] nodes;
            rTree.GetNodes(rTree.Depth, out nodes);

            // create sub-geometry for each node/area
            CpuDEMSubGeometry[] subGeometry = new CpuDEMSubGeometry[nodes.Length];
            for (int i = 0; i < nodes.Length; i++)
            {
                subGeometry[i] = CpuDEMSubGeometry.CreatePointList(nodes[i], gDevice, maxRes / numSamples,
                                                                   rDatabase.Layers[0].Area.Size,
                                                                   rTree.MinDataValue, rTree.MaxDataValue);
            }

            // TODO: Produce diffuse-maps (etc.) for the tree

            IndexBuffer[] iBuffers = CpuDEMSubGeometry.CreateSampleTriStripsIndices(numSamples, numSamples, gDevice);

            CpuDemGeometry geom = new CpuDemGeometry(new Vector3(), new Vector3(), new Vector3(),
                                                     0, 0, PrimitiveType.PointList, gDevice);

            geom.subGeometry = subGeometry;
            geom.iBuffers    = iBuffers;
            geom.tex         = new Texture[nodes.Length];
            geom.rTree       = rTree;
            geom.nodes       = nodes;

            geom.iBuffersLong2 = CpuDEMSubGeometry.CreateSampleTriStripsIndices(numSamples + 1, numSamples + 1, gDevice);
            return(geom);
        }
Ejemplo n.º 5
0
        public static TextureMatrixLayer[] RenderDatabaseTree(RasterDatabase.RasterDatabase db, Device device)
        {
            // setup device
            device.RenderState.ZBufferEnable = false;
            device.Indices      = null;
            device.VertexFormat = CustomVertex.TransformedTextured.Format;
            //device.Transform.World = Matrix.Identity;
            Surface rt0 = device.GetRenderTarget(0);

            // setup template quad
            CustomVertex.TransformedTextured[] tQuad = new CustomVertex.TransformedTextured[4];

            foreach (DataLayer layer in db.Layers)
            {
                RectangleGroupQuadTree tree     = db.ProduceLayerMipMap(layer, 2048);
                Texture[][]            textures = new Texture[tree.Depth][];
                for (int i = 1; i <= tree.Depth; i++)
                {
                    RectangleGroupQuadTree.GroupNode[] nodes;
                    tree.GetNodes(i, out nodes);
                    textures[i] = new Texture[nodes.Length];

                    // render each node to texture
                    int texIdx = 0;
                    foreach (RectangleGroupQuadTree.GroupNode node in nodes)
                    {
                        Texture texture = textures[i][texIdx++] = new Texture(device, node.NodeArea.Width,
                                                                              node.NodeArea.Height, 0,
                                                                              Usage.WriteOnly, Format.X8R8G8B8,
                                                                              Pool.Managed);
                        device.SetRenderTarget(0, texture.GetSurfaceLevel(0));

                        device.Clear(ClearFlags.Target, Color.Black, 1, 0);
                        device.BeginScene();

                        // draw each rectangle quad
                        foreach (DataArea area in node.Rectangles)
                        {
                            // setup quad
                            tQuad[0] = new CustomVertex.TransformedTextured(area.Area.Left, area.Area.Top, 1, 1,
                                                                            area.TexCoords.Left, area.TexCoords.Top);
                            tQuad[1] = new CustomVertex.TransformedTextured(area.Area.Right, area.Area.Top, 1, 1,
                                                                            area.TexCoords.Right, area.TexCoords.Top);
                            tQuad[2] = new CustomVertex.TransformedTextured(area.Area.Left, area.Area.Bottom, 1, 1,
                                                                            area.TexCoords.Left, area.TexCoords.Bottom);
                            tQuad[3] = new CustomVertex.TransformedTextured(area.Area.Right, area.Area.Bottom, 1, 1,
                                                                            area.TexCoords.Right, area.TexCoords.Bottom);

                            // render quad
                            device.SetTexture(0, (Texture)area.Data);
                            device.DrawUserPrimitives(PrimitiveType.TriangleStrip, 2, tQuad);
                        }
                        device.EndScene();
                    }
                }
            }

            device.SetRenderTarget(0, rt0);
            device.RenderState.ZBufferEnable = true;

            return(null);
        }