/// <summary>
        ///     Dibujar objetos de la isla en forma optimizada, utilizando la grilla para Frustm Culling
        /// </summary>
        public void render(TgcFrustum frustum, bool debugEnabled, Escenario esc)
        {
            var pMax = sceneBounds.PMax;
            var pMin = sceneBounds.PMin;

            foreach (var mesh in modelos)
            {
                mesh.Enabled = false;
            }
            findVisibleMeshes(frustum);

            DrawCount = 0;
            //Renderizar
            foreach (var mesh in modelos)
            {
                if (mesh.Enabled)
                {
                    esc.RenderObject(mesh);
                    DrawCount++;
                }
            }

            if (debugEnabled)
            {
                foreach (var debugBox in debugBoxes)
                {
                    debugBox.Render();
                }
            }
        }
Esempio n. 2
0
        public override void render(float elapsedTime)
        {
            bool frustumCullingEnabled = (bool)GuiController.Instance.Modifiers["culling"];

            //Renderizar sin ninguna optimizacion
            if (!frustumCullingEnabled)
            {
                tgcScene.renderAll();
                GuiController.Instance.UserVars.setValue("Meshes renderizadas", tgcScene.Meshes.Count);
            }

            //Renderizar con Frustum Culling
            else
            {
                //Analizar cada malla contra el Frustum - con fuerza bruta
                TgcFrustum frustum     = GuiController.Instance.Frustum;
                int        totalMeshes = 0;
                foreach (TgcMesh mesh in tgcScene.Meshes)
                {
                    //Nos ocupamos solo de las mallas habilitadas
                    if (mesh.Enabled)
                    {
                        //Solo mostrar la malla si colisiona contra el Frustum
                        TgcCollisionUtils.FrustumResult r = TgcCollisionUtils.classifyFrustumAABB(frustum, mesh.BoundingBox);
                        if (r != TgcCollisionUtils.FrustumResult.OUTSIDE)
                        {
                            mesh.render();
                            totalMeshes++;
                        }
                    }
                }
                //Actualizar cantidad de meshes dibujadas
                GuiController.Instance.UserVars.setValue("Meshes renderizadas", totalMeshes);
            }
        }
Esempio n. 3
0
        //====================================
        // Renderiza las imagenes
        //====================================

        public override void render(float Tiempo)
        {
            Device device = GuiController.Instance.D3dDevice;

            //Mover mesh
            //Vector3 meshPos = (Vector3)GuiController.Instance.Modifiers["MeshPos"];
            //mesh4.Position = meshPos;

            bool showBB = (bool)GuiController.Instance.Modifiers.getValue("showBoundingBox");
            //FRUSTUM CULLING
            TgcFrustum frustum = GuiController.Instance.Frustum;

            if (mesh4.Enabled)
            {
                //Solo mostrar la malla si colisiona contra el Frustum
                TgcCollisionUtils.FrustumResult r = TgcCollisionUtils.classifyFrustumAABB(frustum, mesh4.BoundingBox);
                if (r != TgcCollisionUtils.FrustumResult.OUTSIDE)
                {
                    mesh4.render();
                }
                if (showBB)
                {
                    mesh4.BoundingBox.render();
                }
            }

            if (disparando)
            {
                disparar(Tiempo);
            }
        }
Esempio n. 4
0
        /// <summary>
        ///     Hacer visible las meshes de un nodo si es visible por el Frustum
        /// </summary>
        private void testChildVisibility(TgcFrustum frustum, QuadtreeNode childNode,
                                         float boxLowerX, float boxLowerY, float boxLowerZ, float boxUpperX, float boxUpperY, float boxUpperZ)
        {
            //test frustum-box intersection
            var caja = new TgcBoundingAxisAlignBox(
                new TGCVector3(boxLowerX, boxLowerY, boxLowerZ),
                new TGCVector3(boxUpperX, boxUpperY, boxUpperZ));

            var distanceToCamera = caja.calculateBoxCenter() - Camera.Position;

            if (TGCVector3.Length(distanceToCamera) > 10000 + caja.calculateBoxRadius())
            {
                return;
            }

            var c = TgcCollisionUtils.classifyFrustumAABB(frustum, caja);

            //complementamente adentro: cargar todos los hijos directamente, sin testeos
            if (c == TgcCollisionUtils.FrustumResult.INSIDE)
            {
                addAllLeafMeshes(childNode);
            }

            //parte adentro: seguir haciendo testeos con hijos
            else if (c == TgcCollisionUtils.FrustumResult.INTERSECT)
            {
                findVisibleMeshes(frustum, childNode, boxLowerX, boxLowerY, boxLowerZ, boxUpperX, boxUpperY, boxUpperZ);
            }
        }
Esempio n. 5
0
        /// <summary>
        /// Renderizar en forma optimizado utilizando el Quadtree para hacer FrustumCulling
        /// </summary>
        public void render(TgcFrustum frustum, bool debugEnabled, string name)
        {
            Vector3 pMax = sceneBounds.PMax;
            Vector3 pMin = sceneBounds.PMin;

            findVisibleMeshes(frustum, quadtreeRootNode,
                              pMin.X, pMin.Y, pMin.Z,
                              pMax.X, pMax.Y, pMax.Z);

            //Renderizar
            foreach (TgcMesh mesh in modelos)
            {
                if (mesh.Enabled && mesh.Name.Contains(name))
                {
                    mesh.render();
                    mesh.Enabled = false;
                    GameManager.Instance.vegetacionVisible++;
                    if (debugEnabled)
                    {
                        mesh.BoundingBox.render();
                    }
                }
            }

            if (debugEnabled)
            {
                foreach (TgcDebugBox debugBox in debugQuadtreeBoxes)
                {
                    debugBox.render();
                }
            }
        }
Esempio n. 6
0
        /// <summary>
        /// Renderiza el terreno
        /// </summary>
        public void render()
        {
            TgcFrustum frustum = GuiController.Instance.Frustum;

            for (int i = 0; i < vbTerrains.Count; i++)
            {
                TgcCollisionUtils.FrustumResult c = TgcCollisionUtils.classifyFrustumAABB(frustum, boundingBoxes[i]);

                if (c == TgcCollisionUtils.FrustumResult.INSIDE || c == TgcCollisionUtils.FrustumResult.INTERSECT)
                {
                    Vector3 centroBB = (boundingBoxes[i].PMax + boundingBoxes[i].PMin);
                    centroBB.Multiply(0.5f);
                    if (((CustomFpsCamera.Instance.eye - centroBB).Length() < CustomFpsCamera.FAR_PLANE / 1.5f))
                    {
                        renderTerrain(vbTerrains[i]);
                        GameManager.Instance.terrenosVisibles++;
                    }
                }
                bool drawBoundingBoxes = GameManager.Instance.drawBoundingBoxes;

                if (drawBoundingBoxes)
                {
                    boundingBoxes[i].render();
                }
            }
        }
Esempio n. 7
0
        /// <summary>
        ///     Renderizar en forma optimizado utilizando el Octree para hacer FrustumCulling
        /// </summary>
        public void render(TgcFrustum frustum, bool debugEnabled)
        {
            var pMax = sceneBounds.PMax;
            var pMin = sceneBounds.PMin;

            findVisibleMeshes(frustum, octreeRootNode,
                              pMin.X, pMin.Y, pMin.Z,
                              pMax.X, pMax.Y, pMax.Z);

            //Renderizar
            foreach (var mesh in modelos)
            {
                if (mesh.Enabled)
                {
                    mesh.Render();
                    mesh.Enabled = false;
                }
            }

            if (debugEnabled)
            {
                foreach (var debugBox in debugOctreeBoxes)
                {
                    debugBox.Render();
                }
            }
        }
Esempio n. 8
0
        /// <summary>
        /// Renderizar en forma optimizado utilizando el Quadtree para hacer FrustumCulling
        /// </summary>
        public void render(TgcFrustum frustum, bool debugEnabled)
        {
            Vector3 pMax = sceneBounds.PMax;
            Vector3 pMin = sceneBounds.PMin;

            findVisibleMeshes(frustum, quadtreeRootNode,
                              pMin.X, pMin.Y, pMin.Z,
                              pMax.X, pMax.Y, pMax.Z);

            //Renderizar
            foreach (TgcMesh mesh in modelos)
            {
                if (mesh.Enabled)
                {
                    mesh.render();
                    mesh.Enabled = false;
                }
            }

            if (debugEnabled)
            {
                foreach (TgcDebugBox debugBox in debugQuadtreeBoxes)
                {
                    debugBox.render();
                }
            }
        }
Esempio n. 9
0
        /// <summary>
        ///     Recorrer recursivamente el Quadtree para encontrar los nodos visibles
        /// </summary>
        private void findVisibleMeshes(TgcFrustum frustum, QuadtreeNode node,
                                       float boxLowerX, float boxLowerY, float boxLowerZ,
                                       float boxUpperX, float boxUpperY, float boxUpperZ)
        {
            var children = node.children;

            //es hoja, cargar todos los meshes
            if (children == null)
            {
                selectLeafMeshes(node);
            }

            //recursividad sobre hijos
            else
            {
                var midX = FastMath.Abs((boxUpperX - boxLowerX) / 2);
                var midZ = FastMath.Abs((boxUpperZ - boxLowerZ) / 2);

                //00
                testChildVisibility(frustum, children[0], boxLowerX + midX, boxLowerY, boxLowerZ + midZ, boxUpperX,
                                    boxUpperY, boxUpperZ);

                //01
                testChildVisibility(frustum, children[1], boxLowerX + midX, boxLowerY, boxLowerZ, boxUpperX, boxUpperY,
                                    boxUpperZ - midZ);

                //10
                testChildVisibility(frustum, children[2], boxLowerX, boxLowerY, boxLowerZ + midZ, boxUpperX - midX,
                                    boxUpperY, boxUpperZ);

                //11
                testChildVisibility(frustum, children[3], boxLowerX, boxLowerY, boxLowerZ, boxUpperX - midX, boxUpperY,
                                    boxUpperZ - midZ);
            }
        }
Esempio n. 10
0
        /// <summary>
        ///     Hacer visible las meshes de un nodo si es visible por el Frustum
        /// </summary>
        private void testChildVisibility(TgcFrustum frustum, OctreeNode childNode,
                                         float boxLowerX, float boxLowerY, float boxLowerZ, float boxUpperX, float boxUpperY, float boxUpperZ)
        {
            if (childNode == null)
            {
                return;
            }

            //test frustum-box intersection
            var caja = new TgcBoundingAxisAlignBox(
                new TGCVector3(boxLowerX, boxLowerY, boxLowerZ),
                new TGCVector3(boxUpperX, boxUpperY, boxUpperZ));
            var c = TgcCollisionUtils.classifyFrustumAABB(frustum, caja);

            //complementamente adentro: cargar todos los hijos directamente, sin testeos
            if (c == TgcCollisionUtils.FrustumResult.INSIDE)
            {
                addAllLeafMeshes(childNode);
            }

            //parte adentro: seguir haciendo testeos con hijos
            else if (c == TgcCollisionUtils.FrustumResult.INTERSECT)
            {
                findVisibleMeshes(frustum, childNode, boxLowerX, boxLowerY, boxLowerZ, boxUpperX, boxUpperY, boxUpperZ);
            }
        }
        /// <summary>
        ///     Actualiza la visibilidad de todos los modelos de las celdas.
        ///     Las modelos visibles se cargan como Enable = true, mientras que el
        ///     resto se deshabilita.
        /// </summary>
        /// <param name="cameraPos">Posición de la cámara</param>
        public void updateVisibility(Vector3 cameraPos, TgcFrustum frustum)
        {
            //Armar Frustum para uso internor, en base al Frustum actual
            var currentFrustumPlanes = new Plane[6];

            currentFrustumPlanes    = new Plane[6];
            currentFrustumPlanes[0] = frustum.NearPlane;
            currentFrustumPlanes[1] = frustum.FarPlane;
            currentFrustumPlanes[2] = frustum.LeftPlane;
            currentFrustumPlanes[3] = frustum.RightPlane;
            currentFrustumPlanes[4] = frustum.BottomPlane;
            currentFrustumPlanes[5] = frustum.TopPlane;

            //Deshabilitar todas las celdas
            foreach (var cell in Cells)
            {
                cell.Visited = false;
                foreach (var connection in cell.Connections)
                {
                    connection.Portal.Visited = false;
                }
            }

            //Buscar la celda actual en la que se encuentra la cámara
            var currentCell = findCellFromPoint(cameraPos);

            if (currentCell == null)
            {
                return;
            }

            //Recorrer grafo de celdas desde la celda actual
            currentCell.Visited = true;
            traverseCellGraph(cameraPos, currentFrustumPlanes, currentCell);
        }
        override public void Render(TgcFrustum frustum)
        {
            ClearScreen();

            skyBox.Render();

            drawer.BeginDrawSprite();
            //drawer.DrawSprite(spriteSubnautica);
            drawer.DrawSprite(spriteBlackRectangle);
            drawer.DrawSprite(title);
            drawer.EndDrawSprite();

            DrawTextSmall.drawText("Start", (int)x, yStartWord, colors[(int)pointer]);
            DrawTextSmall.drawText("Exit", (int)x, yStartWord + yOffset, colors[(((int)pointer) + 1) % 2]);
            DrawTextSmall.drawText("->", (int)x - 40, yStartWord + (int)pointer * yOffset, Color.OrangeRed);

            if (Cheats.GodMode)
            {
                this.DrawTextSmall.drawText("God Mode", 300, 300, Color.Gold);
            }

            if (Cheats.StartingItems)
            {
                this.DrawTextSmall.drawText("Starting items", 300, 360, Color.Gold);
            }
        }
Esempio n. 13
0
        /// <summary>
        ///     Dibujar objetos de la isla en forma optimizada, utilizando la grilla para Frustm Culling
        /// </summary>
        public void render(TgcFrustum frustum, bool debugEnabled)
        {
            var pMax = sceneBounds.PMax;
            var pMin = sceneBounds.PMin;

            findVisibleMeshes(frustum);

            //Renderizar
            foreach (var mesh in modelos)
            {
                if (mesh.Enabled)
                {
                    mesh.render();
                    mesh.Enabled = false;
                }
            }

            if (debugEnabled)
            {
                foreach (var debugBox in debugBoxes)
                {
                    debugBox.render();
                }
            }
        }
Esempio n. 14
0
        /// <summary>
        ///     Renderizar en forma optimizado utilizando el Quadtree para hacer FrustumCulling
        /// </summary>
        public void render(TgcFrustum frustum, bool debugEnabled)
        {
            cantModelosRender = 0;
            var pMax = sceneBounds.PMax;
            var pMin = sceneBounds.PMin;

            findVisibleMeshes(frustum, quadtreeRootNode,
                              pMin.X, pMin.Y, pMin.Z,
                              pMax.X, pMax.Y, pMax.Z);

            //Renderizar
            foreach (var mesh in modelos)
            {
                if (mesh.Enabled)
                {
                    mesh.Render();
                    mesh.Enabled = false;
                    cantModelosRender++;
                }
            }

            /*
             * if (debugEnabled)
             * {
             * foreach (var debugBox in debugQuadtreeBoxes)
             * {
             * debugBox.Render();
             * }
             * }
             */
        }
Esempio n. 15
0
        public void Render(TgcCamera camera, TgcFrustum frustum)
        {
            var toRender = ToRender(camera.Position, frustum);
            var elements = new List <Element>();

            elements.AddRange(elementsToUpdate.FindAll(entity => entity.asCube().isIn(frustum)));

            elements.ForEach(element => {
                if (element.Mesh != null)
                {
                    if (!element.HasDefaultShader())
                    {
                        element.Mesh.Effect    = ShaderRepository.WorldWaterFog;
                        element.Mesh.Technique = "WorldWaterFog";
                    }
                }
                element.Render();
            });

            elementsRendered = elements.Count;

            toRender.ForEach(chunk => chunk.Render());

            shark.Mesh.Effect    = ShaderRepository.WorldWaterFog;
            shark.Mesh.Technique = "WorldWaterFog";
            shark.Render();

            //waterSurface.Render(camera.Position);
            //Floor.Render();
        }
Esempio n. 16
0
        public void render(float deltaTime, TgcFrustum frustum)
        {
            if (escenarioActual == -1)
            {
                return;
            }

            escenarios[escenarioActual].render(deltaTime, frustum);
        }
Esempio n. 17
0
        /// <summary>
        ///     Actualiza modelos que se deberán dibujar
        /// </summary>
        /// <param name="frustum"></param>
        public void update(TgcFrustum frustum)
        {
            var pMax = sceneBounds.PMax;
            var pMin = sceneBounds.PMin;

            findVisibleMeshes(frustum, octreeRootNode,
                              pMin.X, pMin.Y, pMin.Z,
                              pMax.X, pMax.Y, pMax.Z);
        }
Esempio n. 18
0
        /// <summary>
        /// Crea todos los modulos necesarios de la aplicacion
        /// </summary>
        internal void initGraphics(MainForm mainForm, Control panel3d)
        {
            this.mainForm        = mainForm;
            this.panel3d         = panel3d;
            this.fullScreenPanel = new FullScreenPanel();
            panel3d.Focus();

            //Iniciar graficos
            this.tgcD3dDevice    = new TgcD3dDevice(panel3d);
            this.texturesManager = new TgcTexture.Manager();
            this.tgcD3dDevice.OnResetDevice(tgcD3dDevice.D3dDevice, null);

            //Iniciar otras herramientas
            this.texturesPool      = new TgcTexture.Pool();
            this.logger            = new Logger(mainForm.LogConsole);
            this.text3d            = new TgcDrawText(tgcD3dDevice.D3dDevice);
            this.tgcD3dInput       = new TgcD3dInput(mainForm, panel3d);
            this.fpsCamera         = new TgcFpsCamera();
            this.rotCamera         = new TgcRotationalCamera();
            this.thirdPersonCamera = new TgcThirdPersonCamera();
            this.axisLines         = new TgcAxisLines(tgcD3dDevice.D3dDevice);
            this.userVars          = new TgcUserVars(mainForm.getDataGridUserVars());
            this.modifiers         = new TgcModifiers(mainForm.getModifiersPanel());
            this.elapsedTime       = -1;
            this.frustum           = new TgcFrustum();
            this.mp3Player         = new TgcMp3Player();
            this.directSound       = new TgcDirectSound();
            this.fog                 = new TgcFog();
            this.currentCamera       = this.rotCamera;
            this.customRenderEnabled = false;
            this.drawer2D            = new TgcDrawer2D();
            this.shaders             = new TgcShaders();

            //toogles
            this.rotCamera.Enable         = true;
            this.fpsCamera.Enable         = false;
            this.thirdPersonCamera.Enable = false;
            this.fpsCounterEnable         = true;
            this.axisLines.Enable         = true;

            //Cargar algoritmos
            exampleLoader          = new ExampleLoader();
            examplesDir            = System.Environment.CurrentDirectory + "\\" + ExampleLoader.EXAMPLES_DIR + "\\";
            examplesMediaDir       = examplesDir + "Media" + "\\";
            alumnoEjemplosDir      = System.Environment.CurrentDirectory + "\\" + "AlumnoEjemplos" + "\\";
            alumnoEjemplosMediaDir = alumnoEjemplosDir + "AlumnoMedia" + "\\";
            exampleLoader.loadExamplesInGui(mainForm.TreeViewExamples, new string[] { examplesDir, alumnoEjemplosDir });

            //Cargar shaders del framework
            this.shaders.loadCommonShaders();

            //Cargar ejemplo default
            TgcExample defaultExample = exampleLoader.getExampleByName(mainForm.Config.defaultExampleName, mainForm.Config.defaultExampleCategory);

            executeExample(defaultExample);
        }
Esempio n. 19
0
        internal void RenderDull(float elapsedTime)
        {
            terrain.Technique = "DullRender";

            Device d3dDevice = GuiController.Instance.D3dDevice;

            terrain.render();

            TgcFrustum frustum = GuiController.Instance.Frustum;
        }
        public override void Render()
        {
            D3DDevice.Instance.Device.BeginScene();
            TexturesManager.Instance.clearAll();

            CurrentScene.Render(this.Frustum);
            GameModel.frustum = this.Frustum;

            PostRender();
        }
        public override void Render(TgcFrustum frustum)
        {
            if (stateID == StateID.CLOSED)
            {
                return;
            }

            drawer.BeginDrawSprite();
            drawer.DrawSprite(darknessCover);
            drawer.DrawSprite(PDA);
            drawer.EndDrawSprite();

            this.itemHighlighted = null;

            if (stateID == StateID.OPENED)
            {
                bool       hovering   = false;
                TGCVector2 baseVector = PDA.Position + new TGCVector2(375, 175);
                drawer.BeginDrawSprite();
                byte xOffset         = 110;
                byte yOffset         = 110;
                byte maxItemsPerLine = 5;
                byte i = 0;
                foreach (var item in character.Inventory.Items)
                {
                    int x = i % maxItemsPerLine;
                    int y = i / maxItemsPerLine;
                    //text.drawText("-" + i++ + ": " + item.Name + " | " + item.Description + " | " + item.type.ToString(), 500, 300 + 30 * i, Color.White);
                    bubble.Position = baseVector + new TGCVector2(xOffset * x, yOffset * y);
                    if (cursorOverBubble())
                    {
                        bubble.Scaling       = bubbleDefaultScale + GetScaleForSpriteByPixels(bubble, 10, 10);
                        item.Icon.Scaling    = item.DefaultScale + GetScaleForSpriteByPixels(item.Icon, 10, 10);
                        hovering             = true;
                        this.itemHighlighted = item;
                    }
                    else
                    {
                        bubble.Scaling    = bubbleDefaultScale;
                        item.Icon.Scaling = item.DefaultScale;
                    }
                    CenterIconToCurrentBubble(item.Icon);
                    drawer.DrawSprite(bubble);
                    drawer.DrawSprite(item.Icon);
                    ++i;
                }

                cursor.Color = hovering ? Color.Yellow : cursorDefaultColor;
                drawer.DrawSprite(cursor);
                drawer.EndDrawSprite();
            }
        }
Esempio n. 22
0
        public void render(float deltaTime, TgcFrustum frustum)
        {
            sprite.Begin(SpriteFlags.AlphaBlend | SpriteFlags.SortDepthFrontToBack);

            var scaling = new TGCVector3((float)vp.Width / trustMe.Width, (float)vp.Height / trustMe.Height, 0);

            sprite.Transform = TGCMatrix.Scaling(scaling);
            sprite.Draw(trustMe.D3dTexture, Rectangle.Empty, Vector3.Empty, Vector3.Empty, Color.White);

            sprite.End();

            inicio.Render();
        }
        public override void Render(TgcFrustum frustum)
        {
            preRender();

            drawer.BeginDrawSprite();
            drawer.DrawSprite(darknessCover);
            drawer.EndDrawSprite();

            textBig.drawText("PAUSE", xTitle + 50, yTitle, Color.DarkGray);
            textSmall.drawText("BACK TO THE GAME", xTitle, yTitle + yOffsetFirstOption, colors[(int)pointer]);
            textSmall.drawText("GO TO START MENU", xTitle, yTitle + yOffsetFirstOption + ySecondOption, colors[(((int)pointer) + 1) % 2]);
            textSmall.drawText("->", xTitle - 45, yTitle + yOffsetFirstOption + (int)pointer * ySecondOption, Color.White);
        }
Esempio n. 24
0
        public void update(TgcFrustum frustum)
        {
            foreach (var modelo in modelos)
            {
                modelo.mesh.Enabled = false;
            }

            var pMax = sceneBounds.PMax;
            var pMin = sceneBounds.PMin;

            findVisibleMeshes(frustum, quadtreeRootNode,
                              pMin.X, pMin.Y, pMin.Z,
                              pMax.X, pMax.Y, pMax.Z);
        }
Esempio n. 25
0
        public void UpdateVisibleObjects(TgcFrustum frustum)
        {
            foreach (var objeto in objetos)
            {
                objeto.RenderEnabled = false;
            } //???

            var pMax = sceneBounds.PMax;
            var pMin = sceneBounds.PMin;

            findVisibleMeshes(frustum, QuadTreeRootNode,
                              pMin.X, pMin.Y, pMin.Z,
                              pMax.X, pMax.Y, pMax.Z);
        }
 protected CustomModel(UnderseaModel gameModel,
                       TgcCamera camera,
                       TgcD3dInput input,
                       string mediaDir,
                       string shadersDir,
                       TgcFrustum frustum,
                       TgcText2D drawText)
 {
     GameModel  = gameModel;
     Camera     = camera;
     Input      = input;
     MediaDir   = mediaDir;
     ShadersDir = shadersDir;
     Frustum    = frustum;
     DrawText   = drawText;
 }
Esempio n. 27
0
        /// <summary>
        /// Hacer FrustumCulling por fuerza bruta para detectar que modelos se ven
        /// </summary>
        private void doFrustumCulling()
        {
            TgcFrustum frustum = GuiController.Instance.Frustum;

            foreach (SceneEditorMeshObject meshObj in meshObjects)
            {
                TgcCollisionUtils.FrustumResult r = TgcCollisionUtils.classifyFrustumAABB(frustum, meshObj.mesh.BoundingBox);
                if (r == TgcCollisionUtils.FrustumResult.OUTSIDE)
                {
                    meshObj.visible = false;
                }
                else
                {
                    meshObj.visible = true;
                }
            }
        }
Esempio n. 28
0
        internal void RenderBrigth(float elapsedTime)
        {
            TgcFrustum frustum = GuiController.Instance.Frustum;

            foreach (Enemy enemigo in enemies)
            {
                TgcCollisionUtils.FrustumResult result = TgcCollisionUtils.classifyFrustumAABB(frustum, enemigo.mesh.BoundingBox);
                if (result == TgcCollisionUtils.FrustumResult.INSIDE || result == TgcCollisionUtils.FrustumResult.INTERSECT)
                {
                    enemigo.Render(elapsedTime);
                }
            }

            proyectiles.ForEach(proyectil => proyectil.Render(elapsedTime));

            quadTree.render(frustum, drawBoundingBoxes, "Oil");
        }
Esempio n. 29
0
        /// <summary>
        /// Activar modelos dentro de celdas visibles
        /// </summary>
        public void UpdateVisibleMeshes(TgcFrustum frustum)
        {
            for (int x = 0; x < grid.GetUpperBound(0); x++)
            {
                for (int y = 0; y < grid.GetUpperBound(1); y++)
                {
                    for (int z = 0; z < grid.GetUpperBound(2); z++)
                    {
                        GrillaRegularNode node            = grid[x, y, z];
                        TgcCollisionUtils.FrustumResult r = TgcCollisionUtils.classifyFrustumAABB(frustum, node.BoundingBox);

                        if (r != TgcCollisionUtils.FrustumResult.OUTSIDE)
                        {
                            node.activateCellMeshes();
                        }
                    }
                }
            }
        }
Esempio n. 30
0
        /// <summary>
        ///     Activar modelos dentro de celdas visibles
        /// </summary>
        private void findVisibleMeshes(TgcFrustum frustum)
        {
            for (var x = 0; x < grid.GetUpperBound(0); x++)
            {
                for (var y = 0; y < grid.GetUpperBound(1); y++)
                {
                    for (var z = 0; z < grid.GetUpperBound(2); z++)
                    {
                        var node = grid[x, y, z];
                        var r    = TgcCollisionUtils.classifyFrustumAABB(frustum, node.BoundingBox);

                        if (r != TgcCollisionUtils.FrustumResult.OUTSIDE)
                        {
                            node.activateCellMeshes();
                        }
                    }
                }
            }
        }