示例#1
0
 public GpuDemGeometry(Vector3 position, Vector3 dimensions, Vector3 center,
                       ulong vertexCount, uint primitiveCount, PrimitiveType primitivesType,
                       Device gDevice)
     : base(position, dimensions, center, vertexCount, primitiveCount, primitivesType, gDevice)
 {
     texturesCache = new SortedList <ulong, CachedTexture>();
     demPQT        = new PureQuadTree(new Vector2(position.X, position.Z), new Vector2(dimensions.X, dimensions.Z));
     geometryTree  = new List <GpuDemSubGeometry>();
 }
示例#2
0
        public Form1()
        {
            InitializeComponent();

            PureQuadTree tree = new PureQuadTree(new Vector2(), new Vector2(256, 256));

            tree.Fork(1, false);
            tree.Children[3].Fork(1, false);
            tree.Children[1].Fork(1, false);
            //tree.Children[3].Children[3].Fork(1, false);
            //tree.Children[1].Fork(2, false);
            ////tree.Children[2].Fork(1, false);
            //tree.Children[3].Children[1].Fork(1, false);

            //leafPatches = new Dictionary<ulong, byte>();
            //patchLevels = new Dictionary<ulong, ushort[]>();
            //foreach (PureQuadTreeNode leaf in tree)
            //{
            //    if (leaf.Level > 0)
            //    {
            //        TraceLeaf(leaf);
            //    }
            //}

            qTree   = tree;// new PureQuadTree(new Vector2(), new Vector2(256, 256));
            viewPos = new Vector2(200, 300);
            viewDir = Vector2.Normalize(new Vector2(128, 128) - viewPos);
            falloff = 250;

            Vector3    viewDir3 = new Vector3(viewDir.X, 0, viewDir.Y);
            Quaternion q        = Quaternion.RotationAxis(new Vector3(0, 1, 0), (float)Math.PI / 8);
            Matrix     rot      = Matrix.RotationQuaternion(q);
            Vector4    temp     = Vector3.Transform(viewDir3, rot);

            viewFOVp1 = new Vector2(temp.X, temp.Z);
            viewFOVp1.Normalize();
            viewFOVp1 = new Vector2(viewPos.X + (viewFOVp1 * falloff).X, viewPos.Y + (viewFOVp1 * falloff).Y);

            q         = Quaternion.RotationAxis(new Vector3(0, 1, 0), -(float)Math.PI / 8);
            rot       = Matrix.RotationQuaternion(q);
            temp      = Vector3.Transform(viewDir3, rot);
            viewFOVp2 = new Vector2(temp.X, temp.Z);
            viewFOVp2.Normalize();
            viewFOVp2 = new Vector2(viewPos.X + (viewFOVp2 * falloff).X, viewPos.Y + (viewFOVp2 * falloff).Y);

            Vector3 viewPos3 = new Vector3(viewPos.X, 0, viewPos.Y);

            q    = Quaternion.RotationAxis(new Vector3(0, 1, 0), ((float)Math.PI / 8) + ((float)Math.PI / 2));
            rot  = Matrix.RotationQuaternion(q);
            temp = Vector3.Transform(viewDir3, rot);
            Vector3 v3 = new Vector3(-temp.X, 0, -temp.Z);

            v3.Normalize();

            viewFOVpl1 = Plane.FromPointNormal(viewPos3, v3);

            q    = Quaternion.RotationAxis(new Vector3(0, 1, 0), -((float)Math.PI / 8) - ((float)Math.PI / 2));
            rot  = Matrix.RotationQuaternion(q);
            temp = Vector3.Transform(viewDir3, rot);
            v3   = new Vector3(-temp.X, 0, -temp.Z);
            v3.Normalize();

            viewFOVpl2 = Plane.FromPointNormal(viewPos3, v3);
            //Plane.FromPoints(viewDir3, new Vector3(viewDir3.X, 1, viewDir3.Z), new Vector3(viewDir3.X + viewFOVp2.X, 0, viewDir3.Z + viewFOVp2.Y));

            leafDetail = new Dictionary <ulong, short>();

            BuildTree();
        }
示例#3
0
        public Form1()
        {
            InitializeComponent();

            PureQuadTree tree = new PureQuadTree(new Vector2(), new Vector2(256, 256));
            tree.Fork(1, false);
            tree.Children[3].Fork(1, false);
            tree.Children[1].Fork(1, false);
            //tree.Children[3].Children[3].Fork(1, false);
            //tree.Children[1].Fork(2, false);
            ////tree.Children[2].Fork(1, false);
            //tree.Children[3].Children[1].Fork(1, false);

            //leafPatches = new Dictionary<ulong, byte>();
            //patchLevels = new Dictionary<ulong, ushort[]>();
            //foreach (PureQuadTreeNode leaf in tree)
            //{
            //    if (leaf.Level > 0)
            //    {
            //        TraceLeaf(leaf);
            //    }
            //}

            qTree = tree;// new PureQuadTree(new Vector2(), new Vector2(256, 256));
            viewPos = new Vector2(200, 300);
            viewDir = Vector2.Normalize(new Vector2(128, 128) - viewPos);
            falloff = 250;

            Vector3 viewDir3 = new Vector3(viewDir.X, 0, viewDir.Y);
            Quaternion q = Quaternion.RotationAxis(new Vector3(0, 1, 0), (float)Math.PI / 8);
            Matrix rot = Matrix.RotationQuaternion(q);
            Vector4 temp = Vector3.Transform(viewDir3, rot);
            viewFOVp1 = new Vector2(temp.X, temp.Z);
            viewFOVp1.Normalize();
            viewFOVp1 = new Vector2(viewPos.X + (viewFOVp1 * falloff).X, viewPos.Y + (viewFOVp1 * falloff).Y);

            q = Quaternion.RotationAxis(new Vector3(0, 1, 0), -(float)Math.PI / 8);
            rot = Matrix.RotationQuaternion(q);
            temp = Vector3.Transform(viewDir3, rot);
            viewFOVp2 = new Vector2(temp.X, temp.Z);
            viewFOVp2.Normalize();
            viewFOVp2 = new Vector2(viewPos.X + (viewFOVp2 * falloff).X, viewPos.Y + (viewFOVp2 * falloff).Y);

            Vector3 viewPos3 = new Vector3(viewPos.X, 0, viewPos.Y);

            q = Quaternion.RotationAxis(new Vector3(0, 1, 0), ((float)Math.PI / 8) + ((float)Math.PI / 2));
            rot = Matrix.RotationQuaternion(q);
            temp = Vector3.Transform(viewDir3, rot);
            Vector3 v3 = new Vector3(-temp.X, 0, -temp.Z);
            v3.Normalize();
            
            viewFOVpl1 = Plane.FromPointNormal(viewPos3, v3);

            q = Quaternion.RotationAxis(new Vector3(0, 1, 0), -((float)Math.PI / 8) - ((float)Math.PI / 2));
            rot = Matrix.RotationQuaternion(q);
            temp = Vector3.Transform(viewDir3, rot);
            v3 = new Vector3(-temp.X, 0, -temp.Z);
            v3.Normalize();

            viewFOVpl2 = Plane.FromPointNormal(viewPos3, v3);
                //Plane.FromPoints(viewDir3, new Vector3(viewDir3.X, 1, viewDir3.Z), new Vector3(viewDir3.X + viewFOVp2.X, 0, viewDir3.Z + viewFOVp2.Y));

            leafDetail = new Dictionary<ulong, short>();
            
            BuildTree();
        }