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>(); }
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(); }
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(); }