Esempio n. 1
0
        public void Render(Personaje personaje, SuvirvalCraft contexto)
        {
            d3dDevice.Transform.View = Matrix.LookAtLH(personaje.PosicionAlturaCabeza(),
                                                       personaje.DireccionAlturaCabeza(150), new Vector3(0, 1, 0));

            //Actualizar volumen del Frustum con nuevos valores de camara
            frustum.updateVolume(d3dDevice.Transform.View, d3dDevice.Transform.Projection);

            //El personaje no debe animarse cuando se esta en primera persona
            personaje.RenderizarPrimeraPersona(contexto);
        }
Esempio n. 2
0
        public void Render(Personaje personaje, SuvirvalCraft contexto)
        {
            //Hacer que la camara siga al personaje en su nueva posicion. Sumamos 100 en el posición de Y porque queremos que la cámara este un poco más alta.
            camaraTgc.Target = personaje.mesh.Position + new Vector3(0, 100, 0);
            //Actualizamos la rotacion si es que hubo
            camaraTgc.RotationY = personaje.mesh.Rotation.Y;
            //Porque el personaje esta rotado 180 grados respecto de la camara.
            camaraTgc.rotateY(Geometry.DegreeToRadian(180f));

            //Actualizar volumen del Frustum con nuevos valores de camara
            frustum.updateVolume(d3dDevice.Transform.View, d3dDevice.Transform.Projection);

            personaje.RenderizarTerceraPersona(contexto);
        }
Esempio n. 3
0
        /// <summary>
        /// Renderizar escenario BSP utilizando matriz PVS para descartar clusters no visibles
        /// </summary>
        /// <param name="camPos">Posición actual de la camara</param>
        public void render(Vector3 camPos)
        {
            Device device = GuiController.Instance.D3dDevice;

            float elapsedTime = GuiController.Instance.ElapsedTime;

            time += elapsedTime;

            //Obtener leaf actual
            int actualLeaf = FindLeaf(camPos);

            //Obtener clusters visibles segun PVS
            int actualCluster = data.leafs[actualLeaf].cluster;

            if (actualCluster != antCluster)
            {
                antCluster = actualCluster;
                clusterVis.Clear();
                for (int i = 0; i < data.leafs.Length; i++)
                {
                    if (isClusterVisible(actualCluster, data.leafs[i].cluster))
                    {
                        clusterVis.Add(i);
                    }
                }
            }

            //Actualizar volumen del Frustum con nuevos valores de camara
            TgcFrustum frustum = GuiController.Instance.Frustum;

            frustum.updateVolume(device.Transform.View, device.Transform.Projection);

            foreach (int nleaf in clusterVis)
            {
                //Frustum Culling con el AABB del cluster
                TgcCollisionUtils.FrustumResult result = TgcCollisionUtils.classifyFrustumAABB(frustum, data.leafs[nleaf].boundingBox);
                if (result == TgcCollisionUtils.FrustumResult.OUTSIDE)
                {
                    continue;
                }

                //Habilitar meshes de este leaf
                QLeaf currentLeaf = data.leafs[nleaf];
                for (int i = currentLeaf.firstLeafSurface; i < currentLeaf.firstLeafSurface + currentLeaf.numLeafSurfaces; i++)
                {
                    int     iMesh = data.leafSurfaces[i];
                    TgcMesh mesh  = meshes[iMesh];
                    if (mesh != null)
                    {
                        meshes[iMesh].Enabled = true;
                    }
                }
            }

            //Renderizar meshes visibles
            mViewProj = device.Transform.View * device.Transform.Projection;
            for (int i = 0; i < meshes.Count; i++)
            {
                //Ignonar si no está habilitada
                TgcMesh mesh = meshes[i];
                if (mesh == null || !mesh.Enabled)
                {
                    continue;
                }


                QShaderData shader = data.shaderXSurface[i];

                //Renderizado con shaders
                //TODO: Mejorar el renderizado de shaders. Por ahora esta deshabilitado
                if (shader != null && shader.Stages.Count > 0)
                {
                    renderShaderMesh(mesh, shader);
                }
                //Renderizado normal
                else
                {
                    //render
                    mesh.render();

                    //deshabilitar para la proxima vuelta
                    mesh.Enabled = false;
                }
            }
        }
Esempio n. 4
0
        /// <summary>
        /// Hacer render del ejemplo
        /// </summary>
        internal void render()
        {
            Device d3dDevice = tgcD3dDevice.D3dDevice;

            elapsedTime = HighResolutionTimer.Instance.FrameTime;

            tgcD3dDevice.doClear();

            //Acutalizar input
            tgcD3dInput.update();

            //Actualizar camaras (solo una va a estar activada a la vez)
            if (currentCamera.Enable)
            {
                this.currentCamera.updateCamera();
                this.currentCamera.updateViewMatrix(d3dDevice);
            }

            //actualizar posicion de pantalla en barra de estado de UI
            setStatusPosition();

            //actualizar el Frustum
            frustum.updateVolume(d3dDevice.Transform.View, d3dDevice.Transform.Projection);

            //limpiar texturas
            texturesManager.clearAll();

            //actualizar Listener3D
            directSound.updateListener3d();


            //Hacer render delegando control total al ejemplo
            if (customRenderEnabled)
            {
                //Ejecutar render del ejemplo
                if (currentExample != null)
                {
                    currentExample.render(elapsedTime);
                }
            }

            //Hacer render asistido (mas sencillo para el ejemplo)
            else
            {
                //Iniciar escena 3D
                d3dDevice.BeginScene();

                //Actualizar contador de FPS si esta activo
                if (fpsCounterEnable)
                {
                    text3d.drawText("FPS: " + HighResolutionTimer.Instance.FramesPerSecond, 0, 0, Color.Yellow);
                }

                //Ejecutar render del ejemplo
                if (currentExample != null)
                {
                    currentExample.render(elapsedTime);
                }


                //Ejes cartesianos
                if (axisLines.Enable)
                {
                    axisLines.render();
                }

                //Finalizar escena 3D
                d3dDevice.EndScene();
            }



            d3dDevice.Present();
            //this.Invalidate();
        }
Esempio n. 5
0
        /// <summary>
        ///     Renderizar escenario BSP utilizando matriz PVS para descartar clusters no visibles
        /// </summary>
        /// <param name="camPos">Posición actual de la camara</param>
        public void render(TGCVector3 camPos, TgcFrustum frustum, float elapsedTime)
        {
            time += elapsedTime;

            //Obtener leaf actual
            var actualLeaf = FindLeaf(camPos);

            //Obtener clusters visibles segun PVS
            var actualCluster = Data.leafs[actualLeaf].cluster;

            if (actualCluster != antCluster)
            {
                antCluster = actualCluster;
                clusterVis.Clear();
                for (var i = 0; i < Data.leafs.Length; i++)
                {
                    if (isClusterVisible(actualCluster, Data.leafs[i].cluster))
                    {
                        clusterVis.Add(i);
                    }
                }
            }

            //Actualizar volumen del Frustum con nuevos valores de camara;
            //TODO: esto creo que ya lo hace solo el example en el preupdate.
            frustum.updateVolume(TGCMatrix.FromMatrix(D3DDevice.Instance.Device.Transform.View), TGCMatrix.FromMatrix(D3DDevice.Instance.Device.Transform.Projection));

            foreach (var nleaf in clusterVis)
            {
                //Frustum Culling con el AABB del cluster
                var result = TgcCollisionUtils.classifyFrustumAABB(frustum, Data.leafs[nleaf].boundingBox);
                if (result == TgcCollisionUtils.FrustumResult.OUTSIDE)
                {
                    continue;
                }

                //Habilitar meshes de este leaf
                var currentLeaf = Data.leafs[nleaf];
                for (var i = currentLeaf.firstLeafSurface;
                     i < currentLeaf.firstLeafSurface + currentLeaf.numLeafSurfaces;
                     i++)
                {
                    var iMesh = Data.leafSurfaces[i];
                    var mesh  = Meshes[iMesh];
                    if (mesh != null)
                    {
                        Meshes[iMesh].Enabled = true;
                    }
                }
            }

            //TODO: No deberia manipular Matrix de DX.
            //Renderizar meshes visibles
            mViewProj = TGCMatrix.FromMatrix(D3DDevice.Instance.Device.Transform.View * D3DDevice.Instance.Device.Transform.Projection);
            for (var i = 0; i < Meshes.Count; i++)
            {
                //Ignonar si no está habilitada
                var mesh = Meshes[i];
                if (mesh == null || !mesh.Enabled)
                {
                    continue;
                }

                var shader = Data.shaderXSurface[i];

                //Renderizado con shaders
                //TODO: Mejorar el renderizado de shaders. Por ahora esta deshabilitado
                if (shader != null && shader.Stages.Count > 0)
                {
                    renderShaderMesh(mesh, shader);
                }
                //Renderizado normal
                else
                {
                    //render
                    mesh.Render();

                    //deshabilitar para la proxima vuelta
                    mesh.Enabled = false;
                }
            }
        }