示例#1
0
        public override void Render()
        {
            PreRender();

            //Obtener boolean para saber si hay que mostrar Bounding Box
            var showBB = showBoundingBoxModifier.Value;

            if (collisionManager.Collision)
            {
                collisionNormalArrow.Render();
                collisionPoint.Render();
            }

            //Render de mallas
            foreach (var mesh in escenario.Meshes)
            {
                mesh.Render();
            }

            //Render personaje
            personaje.animateAndRender(ElapsedTime);
            if (showBB)
            {
                characterSphere.Render();
            }

            //Render linea
            directionArrow.Render();

            //Render SkyBox
            skyBox.Render();

            PostRender();
        }
        public override void Render()
        {
            PreRender();
            //Dibujar todo.
            //Una vez actualizadas las diferentes posiciones internas solo debemos asignar la matriz de world.
            mesh.Transform =
                TGCMatrix.Scaling(mesh.Scale)
                * TGCMatrix.RotationYawPitchRoll(mesh.Rotation.Y, mesh.Rotation.X, mesh.Rotation.Z)
                * TGCMatrix.Translation(mesh.Position);
            mesh.Render();
            //Actualmente los bounding box se actualizan solos en momento de hacer render, esto no es recomendado ya que trae overhead
            //Igualmente aqui podemos tener un objeto debug de nuestro mesh.
            mesh.BoundingBox.Render();

            box2.Transform =
                TGCMatrix.Scaling(box2.Scale)
                * TGCMatrix.RotationYawPitchRoll(box2.Rotation.Y, box2.Rotation.X, box2.Rotation.Z)
                * TGCMatrix.Translation(box2.Position);
            box2.Render();

            //Los bounding volume por la forma actual de framework no realizan transformaciones entonces podemos hacer esto:
            //D3DDevice.Instance.Device.Transform.World =
            //    TGCMatrix.Scaling(new TGCVector3(sphere.Radius, sphere.Radius, sphere.Radius))
            //                * TGCMatrix.Identity //No tienen sentido las rotaciones con la esfera.
            //                * TGCMatrix.Translation(sphere.Position);
            boundingSphere.Render();

            //Las mesh por defecto tienen el metodo UpdateMeshTransform que realiza el set por defecto.
            //Esto es igual que utilizar AutoTransform en true, con lo cual no es recomendado para casos complejos.
            meshObb.UpdateMeshTransform();
            meshObb.Render();
            //La implementacion de Obb por el momento reconstruye el obb debug siempre. Practica no recomendada.
            obb.Render();

            //triangulo
            D3DDevice.Instance.Device.Transform.World = TGCMatrix.Identity.ToMatrix();
            D3DDevice.Instance.Device.VertexFormat    = CustomVertex.PositionColored.Format;
            D3DDevice.Instance.Device.DrawUserPrimitives(PrimitiveType.TriangleList, 1, triangle);

            PostRender();
        }
        public override void Render()
        {
            PreRender();

            //Bounding volumes.
            //Los bounding volumes realizan un update de los vertices en momento de render, por ello pueden ser mas lentos que utilizar transformadas.
            if (fixedYModifier.Value)
            {
                colliderCylinderFixedY.Render();
            }
            else
            {
                colliderCylinder.Render();
            }

            //Render personaje
            personaje.Transform =
                TGCMatrix.Scaling(personaje.Scale)
                * TGCMatrix.RotationYawPitchRoll(personaje.Rotation.Y, personaje.Rotation.X, personaje.Rotation.Z)
                * TGCMatrix.Translation(personaje.Position);
            personaje.animateAndRender(ElapsedTime);
            if (fixedYModifier.Value)
            {
                personaje.BoundingBox.Render();
            }

            //Render de objetos estaticos
            collisionableSphere.Render();
            collisionableMeshAABB.BoundingBox.Render();
            collisionableCylinder.Render();

            //Dibujar todo mallas.
            //Una vez actualizadas las diferentes posiciones internas solo debemos asignar la matriz de world.
            collisionableMeshAABB.Transform = TGCMatrix.Scaling(collisionableMeshAABB.Scale) * TGCMatrix.Translation(collisionableMeshAABB.Position);
            collisionableMeshAABB.Render();

            PostRender();
        }
        public override void Render()
        {
            PreRender();

            //Obtener boolean para saber si hay que mostrar Bounding Box
            var showBB = showBoundingBoxModifier.Value;

            //Render mallas que no se interponen
            foreach (var mesh in objectsInFront)
            {
                mesh.Render();
                if (showBB)
                {
                    mesh.BoundingBox.Render();
                }
            }

            //Para las mallas que se interponen a la cámara, solo renderizar su BoundingBox
            foreach (var mesh in objectsBehind)
            {
                mesh.BoundingBox.Render();
            }

            //Render personaje
            personaje.animateAndRender(ElapsedTime);
            if (showBB)
            {
                characterSphere.Render();
            }

            //Render linea
            directionArrow.Render();

            //Render SkyBox
            skyBox.Render();

            PostRender();
        }
示例#5
0
        public override void Render()
        {
            PreRender();
            //Dibujar todo.
            //Una vez actualizadas las diferentes posiciones internas solo debemos asignar la matriz de world.
            mesh.Transform = TGCMatrix.Scaling(mesh.Scale) *
                             TGCMatrix.RotationYawPitchRoll(mesh.Rotation.Y, mesh.Rotation.X, mesh.Rotation.Z) *
                             TGCMatrix.Translation(mesh.Position);
            mesh.Render();
            //Actualmente los bounding box se actualizan solos en momento de hacer render, esto no es recomendado ya que trae overhead
            //Igualmente aqui podemos tener un objeto debug de nuestro mesh.
            mesh.BoundingBox.Render();

            box2.Transform = TGCMatrix.Scaling(box2.Scale) *
                             TGCMatrix.RotationYawPitchRoll(box2.Rotation.Y, box2.Rotation.X, box2.Rotation.Z) *
                             TGCMatrix.Translation(box2.Position);
            box2.Render();

            boundingSphere.Render();

            //Las mesh por defecto tienen el metodo UpdateMeshTransform que realiza el set por defecto.
            meshObb.Transform = TGCMatrix.Scaling(meshObb.Scale) *
                                TGCMatrix.RotationYawPitchRoll(meshObb.Rotation.Y, meshObb.Rotation.X, meshObb.Rotation.Z) *
                                TGCMatrix.Translation(meshObb.Position);
            meshObb.Render();

            //La implementacion de Obb por el momento reconstruye el obb debug siempre. Practica no recomendada.
            obb.Render();

            //triangulo
            D3DDevice.Instance.Device.Transform.World = TGCMatrix.Identity.ToMatrix();
            D3DDevice.Instance.Device.VertexFormat    = CustomVertex.PositionColored.Format;
            D3DDevice.Instance.Device.DrawUserPrimitives(PrimitiveType.TriangleList, 1, triangle);

            PostRender();
        }