Exemplo n.º 1
0
        private static List <int> GetBackToFrontElements(BspTreeNode node, BspTreeNode.Orientation orientation, List <Vector3> allPoints, Vector3 eye)
        {
            List <int> list = new List <int>();

            for (int i = 0; i < node.getNumberOfElements(orientation); i++)
            {
                list.Add(node.getElement(orientation, i));
            }
            list.AddRange(GetBackToFront(node.GetChild(orientation), allPoints, eye));
            return(list);
        }
Exemplo n.º 2
0
        /**
         * Create VBO render vertices for the BSP tree planes.
         * */
        private List <RenderVertex> CreateVBOPlanes(BspTreeNode node, float scale)
        {
            List <RenderVertex> renderVertices = new List <RenderVertex>();

            if (node == null)
            {
                return(renderVertices);
            }
            Vector3 tangent = Vector3.Multiply(new Vector3(node.N.Y, -node.N.X, 0), scale);

            renderVertices.Add(new RenderVertex(Vector3.Add(node.P, tangent), normal, Color4.White));
            renderVertices.Add(new RenderVertex(Vector3.Subtract(node.P, tangent), normal, Color4.White));
            renderVertices.Add(new RenderVertex(node.P, normal, Color4.White));
            renderVertices.Add(new RenderVertex(Vector3.Add(node.P, Vector3.Multiply(node.N, scale * 0.3f)), normal, Color4.White));

            renderVertices.AddRange(CreateVBOPlanes(node.GetChild(BspTreeNode.Orientation.POSITIVE), scale * 0.5f));
            renderVertices.AddRange(CreateVBOPlanes(node.GetChild(BspTreeNode.Orientation.NEGATIVE), scale * 0.5f));

            return(renderVertices);
        }
Exemplo n.º 3
0
        /**
         * Create VBO render vertices for the elements in a node (front and back).
         */
        private List <RenderVertex> CreateVBOElements(BspTreeNode node)
        {
            List <RenderVertex> renderVertices = new List <RenderVertex>();

            if (node == null)
            {
                return(renderVertices);
            }
            for (int orientation = 0; orientation < 2; orientation++)
            {
                Color4 color = (orientation == 0) ? Color4.Magenta : Color4.Orange;
                for (int i = 0; i < node.getNumberOfElements((BspTreeNode.Orientation)orientation); i++)
                {
                    int index = node.getElement((BspTreeNode.Orientation)orientation, i);
                    renderVertices.Add(new RenderVertex(node.P, normal, color));
                    renderVertices.Add(new RenderVertex(points[index], normal, color));
                }
            }
            renderVertices.AddRange(CreateVBOElements(node.GetChild(BspTreeNode.Orientation.POSITIVE)));
            renderVertices.AddRange(CreateVBOElements(node.GetChild(BspTreeNode.Orientation.NEGATIVE)));
            return(renderVertices);
        }