//********************************************* /* Carga el tanque de Guerra */ //********************************************* public void CargarTanque() { Device d3dDevice = GuiController.Instance.D3dDevice; TgcSceneLoader loader7 = new TgcSceneLoader(); loader7.MeshFactory = new CustomMeshShaderFactory(); TgcScene scene7 = loader7.loadSceneFromFile(GuiController.Instance.ExamplesMediaDir + "MeshCreator\\Meshes\\Vehiculos\\TanqueFuturistaRuedas\\TanqueFuturistaRuedas-TgcScene.xml"); mesh4 = (TgcMeshShader)scene7.Meshes[0]; mesh4.Position = C_PosicionActual; mesh4.Scale = new Vector3(0.2f, 0.2f, 0.2f); C_PosicionAnt = C_PosicionActual; C_PosicionActual = mesh4.Position; C_Estado = "Vivo"; //Cargar Shader de PhonhShading string compilationErrors; mesh4.Effect = Effect.FromFile(d3dDevice, GuiController.Instance.ExamplesMediaDir + "Shaders\\PhongShading.fx", null, null, ShaderFlags.None, null, out compilationErrors); if (mesh4.Effect == null) { throw new Exception("Error al cargar shader. Errores: " + compilationErrors); } //Configurar Technique mesh4.Effect.Technique = "DefaultTechnique"; //Crear caja para indicar ubicacion de la luz lightBox = TgcBox.fromSize(new Vector3(50, 50, 50), Color.Yellow); }
public NightRecarga(Vector3 pos) { this.init(); this.posicion = pos; this.colision = TgcBox.fromSize(posicion, new Vector3(30, 100, 30)); this.mesh.Position = posicion; }
private void createMeshes(int cajasPorCuadrante) { var cantCajasPorNivel = cajasPorCuadrante * cajasPorCuadrante; //Crear nuevas cajas var boxSize = 3f; cajasNivel1 = new TgcBox[cantCajasPorNivel]; cajasNivel2 = new TgcBox[cantCajasPorNivel]; cajasNivel3 = new TgcBox[cantCajasPorNivel]; var cajas = 0; for (var i = 0; i < cajasPorCuadrante; i++) { for (var j = 0; j < cajasPorCuadrante; j++) { //Crear tres niveles de caja, una abajo y otra arriba, con texturas diferentes cajasNivel1[cajas] = TgcBox.fromSize(new Vector3(i * boxSize, 0, j * boxSize * 1.5f), new Vector3(boxSize, boxSize, boxSize), box1Texture); cajasNivel1[cajas].AutoTransformEnable = true; cajasNivel2[cajas] = TgcBox.fromSize(new Vector3(i * boxSize, boxSize, j * boxSize * 1.5f), new Vector3(boxSize, boxSize, boxSize), box2Texture); cajasNivel2[cajas].AutoTransformEnable = true; cajasNivel3[cajas] = TgcBox.fromSize(new Vector3(i * boxSize, boxSize * 2, j * boxSize * 1.5f), new Vector3(boxSize, boxSize, boxSize), box3Texture); cajasNivel3[cajas].AutoTransformEnable = true; cajas++; } } }
public override void Init() { //Cargar 25 cajas formando una matriz var loader = new TgcSceneLoader(); boxes = new List <TgcBox>(); var texture = TgcTexture.createTexture(D3DDevice.Instance.Device, MediaDir + "Texturas\\granito.jpg"); var boxSize = new Vector3(30, 30, 30); for (var i = 0; i < 5; i++) { for (var j = 0; j < 5; j++) { var center = new Vector3((boxSize.X + boxSize.X / 2) * i, (boxSize.Y + boxSize.Y / 2) * j, 0); var box = TgcBox.fromSize(center, boxSize, texture); boxes.Add(box); } } //Iniciarlizar PickingRay pickingRay = new TgcPickingRay(); Camara = new TgcRotationalCamera(new Vector3(100f, 100f, -250f), 600f); //FIXME esta camara deberi ser estatica y no rotacional, ya que sino trae problemas con el picking. //Crear caja para marcar en que lugar hubo colision collisionPointMesh = TgcBox.fromSize(new Vector3(3, 3, 3), Color.Red); selected = false; //UserVars para mostrar en que punto hubo colision UserVars.addVar("CollP-X:"); UserVars.addVar("CollP-Y:"); UserVars.addVar("CollP-Z:"); }
public override void init() { Device d3dDevice = GuiController.Instance.D3dDevice; //Crear loader TgcSceneLoader loader = new TgcSceneLoader(); //Cargar mesh TgcScene scene = loader.loadSceneFromFile(GuiController.Instance.ExamplesMediaDir + "ModelosTgc\\Olla\\Olla-TgcScene.xml"); mesh = scene.Meshes[0]; //Crear caja para indicar ubicacion de la luz lightMesh = TgcBox.fromSize(new Vector3(20, 20, 20), Color.Yellow); //Modifiers de la luz GuiController.Instance.Modifiers.addBoolean("lightEnable", "lightEnable", true); GuiController.Instance.Modifiers.addVertex3f("lightPos", new Vector3(-500, -500, -500), new Vector3(500, 800, 500), new Vector3(0, 500, 0)); GuiController.Instance.Modifiers.addColor("ambient", Color.Gray); GuiController.Instance.Modifiers.addColor("diffuse", Color.Blue); GuiController.Instance.Modifiers.addColor("specular", Color.White); GuiController.Instance.Modifiers.addFloat("specularEx", 0, 40, 20f); //Centrar camara rotacional respecto a este mesh GuiController.Instance.RotCamera.targetObject(mesh.BoundingBox); }
public LucesAuto(Auto auto, Ruedas r1, Ruedas r2, TgcCamera cam) { camara = cam; lightMesh = TgcBox.fromSize(new Vector3(10, 10, 10), Color.Red); //lista para todos los meshes lstMeshes = new List <TgcMesh>(); var scene = auto.ciudadScene; //agrego meshes del scene a la lista foreach (var mesh in scene.Meshes) { lstMeshes.Add(mesh); } //agrego auto //lstMeshes.Add(auto); //agrego ruedas lstMeshes.Add(r1.RuedaMeshDer); lstMeshes.Add(r1.RuedaMeshIzq); lstMeshes.Add(r2.RuedaMeshIzq); lstMeshes.Add(r2.RuedaMeshDer); }
public void luzAguaTormentoso(TgcBox lightMesh) { luzTormentoso(lightMesh); cargarEfectoLuz(this.effect); //return posLuz; }
public override void Init() { //Color de fondo //GuiController.Instance.BackgroundColor = Color.DarkGray; //Camara en 1ra persona //GuiController.Instance.FpsCamera.Enable = true; //GuiController.Instance.FpsCamera.MovementSpeed = 100f; //GuiController.Instance.FpsCamera.JumpSpeed = 50f; //GuiController.Instance.FpsCamera.setCamera(new Vector3(40, 30, 35), new Vector3(0, 0, 0)); this.effect = TgcShaders.loadEffect(this.pathRecursos + "Shaders\\ParcialPixelShader.fx"); //Piso this.boxFloor = TgcBox.fromSize(new Vector3(0, 0, 0), new Vector3(30, 0, 30), Color.DarkSeaGreen); this.boxFloor.Effect = this.effect; //Pared this.boxWall = TgcBox.fromSize(new Vector3(0, 10, -15), new Vector3(30, 20, 0), Color.Red); this.boxWall.Effect = this.effect; //Figura this.boxFigure = TgcBox.fromSize(new Vector3(0, 5, 0), new Vector3(10, 10, 5), Color.SteelBlue); this.boxFigure.Effect = this.effect; //Luz this.boxLuz = TgcBox.fromSize(new Vector3(0, 20, 20), new Vector3(2, 2, 2), Color.LightYellow); this.CrearTetera(); this.CrearBuggy(); }
private TgcMesh CrearTribunaPopular(string pathRecursos, TgcBox cancha, int sentido) { TgcMesh platea = this.CrearTribuna(pathRecursos + Settings.Default.meshFileTribunePo, sentido * -(float)Math.PI / 2, new Vector3(14, 12, 15)); platea.Position = new Vector3(sentido * (cancha.Size.X / 2 + platea.BoundingBox.PMax.Z + 120), cancha.Position.Y + platea.BoundingBox.PMax.Y, cancha.Position.Z); return(platea); }
public override void init() { Device d3dDevice = GuiController.Instance.D3dDevice; //Crear Sprite animado animatedSprite = new TgcAnimatedSprite( GuiController.Instance.ExamplesMediaDir + "\\Texturas\\Sprites\\Explosion.png", //Textura de 256x256 new Size(64, 64), //Tamaño de un frame (64x64px en este caso) 16, //Cantidad de frames, (son 16 de 64x64px) 10 //Velocidad de animacion, en cuadros x segundo ); //Ubicarlo centrado en la pantalla Size screenSize = GuiController.Instance.Panel3d.Size; Size textureSize = animatedSprite.Sprite.Texture.Size; animatedSprite.Position = new Vector2(screenSize.Width / 2 - textureSize.Width / 2, screenSize.Height / 2 - textureSize.Height / 2); //Modifiers para variar parametros del sprite GuiController.Instance.Modifiers.addFloat("frameRate", 1, 30, 10); GuiController.Instance.Modifiers.addVertex2f("position", new Vector2(0, 0), new Vector2(screenSize.Width, screenSize.Height), animatedSprite.Position); GuiController.Instance.Modifiers.addVertex2f("scaling", new Vector2(0, 0), new Vector2(4, 4), animatedSprite.Scaling); GuiController.Instance.Modifiers.addFloat("rotation", 0, 360, 0); //Creamos un Box3D para que se vea como el Sprite es en 2D y se dibuja siempre arriba de la escena 3D box = TgcBox.fromSize(new Vector3(10, 10, 10), TgcTexture.createTexture(GuiController.Instance.ExamplesMediaDir + "\\Texturas\\pasto.jpg")); //Hacer que la camara se centre en el box3D GuiController.Instance.RotCamera.targetObject(box.BoundingBox); }
/// <summary> /// Dibujar el esqueleto de la malla /// </summary> protected void renderSkeletonMesh() { Device device = GuiController.Instance.D3dDevice; Vector3 ceroVec = new Vector3(0, 0, 0); //Dibujar huesos y joints for (int i = 0; i < bones.Length; i++) { TgcSkeletalBone bone = bones[i]; //Renderizar Joint TgcBox jointBox = skeletonRenderJoints[i]; jointBox.Transform = bone.MatFinal * this.transform; jointBox.render(); //Modificar línea del bone if (bone.ParentBone != null) { TgcLine boneLine = skeletonRenderBones[i]; boneLine.PStart = TgcVectorUtils.transform(ceroVec, bone.MatFinal * this.transform); boneLine.PEnd = TgcVectorUtils.transform(ceroVec, bone.ParentBone.MatFinal * this.transform); boneLine.updateValues(); } } //Dibujar bones foreach (TgcLine boneLine in skeletonRenderBones) { if (boneLine != null) { boneLine.render(); } } }
public override void init() { Microsoft.DirectX.Direct3D.Device d3dDevice = GuiController.Instance.D3dDevice; //Cuerpo principal que se controla con el teclado box = TgcBox.fromSize(new Vector3(0, 10, 0), new Vector3(10, 10, 10), Color.Blue); //triangulo triangle = new CustomVertex.PositionColored[3]; triangle[0] = new CustomVertex.PositionColored(-100, 0, 0, Color.Red.ToArgb()); triangle[1] = new CustomVertex.PositionColored(0, 0, 50, Color.Green.ToArgb()); triangle[2] = new CustomVertex.PositionColored(0, 100, 0, Color.Blue.ToArgb()); triagleAABB = TgcBoundingBox.computeFromPoints(new Vector3[] { triangle[0].Position, triangle[1].Position, triangle[2].Position }); //box2 box2 = TgcBox.fromSize(new Vector3(-50, 10, -20), new Vector3(15, 15, 15), Color.Violet); //sphere sphere = new TgcBoundingSphere(new Vector3(30, 20, -20), 15); //OBB: computar OBB a partir del AABB del mesh. TgcSceneLoader loader = new TgcSceneLoader(); TgcMesh meshObb = loader.loadSceneFromFile(GuiController.Instance.ExamplesMediaDir + "MeshCreator\\Meshes\\Vehiculos\\StarWars-ATST\\StarWars-ATST-TgcScene.xml").Meshes[0]; obb = TgcObb.computeFromAABB(meshObb.BoundingBox); meshObb.dispose(); obb.move(new Vector3(100, 0, 30)); obb.setRotation(new Vector3(0, FastMath.PI / 4, 0)); //Configurar camara en Tercer Persona GuiController.Instance.ThirdPersonCamera.Enable = true; GuiController.Instance.ThirdPersonCamera.setCamera(box.Position, 30, -75); }
public override void Init() { //Crear Sprite sprite = new TgcSprite(); sprite.Texture = TgcTexture.createTexture(MediaDir + "\\Texturas\\LogoTGC.png"); //Ubicarlo centrado en la pantalla var textureSize = sprite.Texture.Size; sprite.Position = new Vector2(FastMath.Max(D3DDevice.Instance.Width / 2 - textureSize.Width / 2, 0), FastMath.Max(D3DDevice.Instance.Height / 2 - textureSize.Height / 2, 0)); //Modifiers para variar parametros del sprite Modifiers.addVertex2f("position", new Vector2(0, 0), new Vector2(D3DDevice.Instance.Width, D3DDevice.Instance.Height), sprite.Position); Modifiers.addVertex2f("scaling", new Vector2(0, 0), new Vector2(4, 4), sprite.Scaling); Modifiers.addFloat("rotation", 0, 360, 0); //Creamos un Box3D para que se vea como el Sprite es en 2D y se dibuja siempre arriba de la escena 3D box = TgcBox.fromSize(new Vector3(10, 10, 10), TgcTexture.createTexture(MediaDir + "\\Texturas\\pasto.jpg")); //Hacer que la camara se centre en el box3D Camara = new TgcRotationalCamera(box.BoundingBox.calculateBoxCenter(), box.BoundingBox.calculateBoxRadius() * 2); }
public override void Init() { //Crear Sprite animado animatedSprite = new TgcAnimatedSprite(MediaDir + "\\Texturas\\Sprites\\Explosion.png", //Textura de 256x256 new Size(64, 64), //Tamaño de un frame (64x64px en este caso) 16, //Cantidad de frames, (son 16 de 64x64px) 10 //Velocidad de animacion, en cuadros x segundo ); //Ubicarlo centrado en la pantalla var textureSize = animatedSprite.Sprite.Texture.Size; animatedSprite.Position = new Vector2(D3DDevice.Instance.Width / 2 - textureSize.Width / 2, D3DDevice.Instance.Height / 2 - textureSize.Height / 2); //Modifiers para variar parametros del sprite Modifiers.addFloat("frameRate", 1, 30, 10); Modifiers.addVertex2f("position", new Vector2(0, 0), new Vector2(D3DDevice.Instance.Width, D3DDevice.Instance.Height), animatedSprite.Position); Modifiers.addVertex2f("scaling", new Vector2(0, 0), new Vector2(4, 4), animatedSprite.Scaling); Modifiers.addFloat("rotation", 0, 360, 0); //Creamos un Box3D para que se vea como el Sprite es en 2D y se dibuja siempre arriba de la escena 3D box = TgcBox.fromSize(new Vector3(10, 10, 10), TgcTexture.createTexture(MediaDir + "\\Texturas\\pasto.jpg")); //Hacer que la camara se centre en el box3D Camara = new TgcRotationalCamera(box.BoundingBox.calculateBoxCenter(), box.BoundingBox.calculateBoxRadius() * 2); }
public override void Init() { //Crear caja vacia box = new TgcBox(); box.AutoTransformEnable = true; //Crear caja debug vacia debugBox = new TgcBoxDebug(); currentTexture = null; //Modifiers para vararis sus parametros Modifiers.addBoolean("box", "box", true); Modifiers.addBoolean("boundingBox", "BoundingBox", false); Modifiers.addBoolean("debugBox", "debugBox", true); Modifiers.addFloat("thickness", 0.1f, 5, 0.2f); Modifiers.addTexture("texture", MediaDir + "\\Texturas\\madera.jpg"); Modifiers.addVertex2f("offset", new Vector2(-0.5f, -0.5f), new Vector2(0.9f, 0.9f), new Vector2(0, 0)); Modifiers.addVertex2f("tiling", new Vector2(0.1f, 0.1f), new Vector2(4, 4), new Vector2(1, 1)); Modifiers.addColor("color", Color.BurlyWood); Modifiers.addVertex3f("size", new Vector3(0, 0, 0), new Vector3(100, 100, 100), new Vector3(20, 20, 20)); Modifiers.addVertex3f("position", new Vector3(-100, -100, -100), new Vector3(100, 100, 100), new Vector3(0, 0, 0)); Modifiers.addVertex3f("rotation", new Vector3(-180, -180, -180), new Vector3(180, 180, 180), new Vector3(0, 0, 0)); Camara = new TgcRotationalCamera(new Vector3(), 200f, Input); }
/// <summary> /// Se llama una sola vez, al principio cuando se ejecuta el ejemplo. /// Escribir aquí todo el código de inicialización: cargar modelos, texturas, modifiers, uservars, etc. /// Borrar todo lo que no haga falta. /// </summary> public override void Init() { //Device de DirectX para crear primitivas var d3dDevice = D3DDevice.Instance.Device; //Piso la camara que viene por defecto con la que yo quiero usar. //Configurar centro al que se mira y distancia desde la que se mira Camara = new TgcRotationalCamera(new Vector3(), 50f, Input); //Textura de la carperta Media var pathTexturaCaja = MediaDir + Game.Default.TexturaCaja; //Cargamos una textura var texture = TgcTexture.createTexture(pathTexturaCaja); //Creamos una caja 3D ubicada en (0, 0, 0), dimensiones (5, 10, 5) y la textura como color. var center = new Vector3(0, 0, 0); var size = new Vector3(5, 10, 5); Box = TgcBox.fromSize(center, size, texture); //Cargo el unico mesh que tiene la escena Mesh = new TgcSceneLoader().loadSceneFromFile(MediaDir + "LogoTGC-TgcScene.xml").Meshes[0]; //Escalo el mesh que es muy grande Mesh.Scale = new Vector3(0.5f, 0.5f, 0.5f); }
/// <summary> /// testea colisiones AABB /// </summary> private void testCollisions() { if (Player1.Moving) { foreach (InteractiveObject objeto in MyWorld.Objetos) { if (objeto.mesh.Enabled && objeto.Solid) { MyCamera.CameraBox.Position = Camara.Position; TgcBox cameraBox = MyCamera.CameraBox; if (TgcCollisionUtils.testAABBAABB(cameraBox.BoundingBox, objeto.mesh.BoundingBox)) { collidedObject = objeto; MyCamera.Collisioned = true; break; } else { MyCamera.Collisioned = false; } } } } }
public override void Init() { box = TgcBox.fromSize(new Vector3(0, 0, 0), new Vector3(20, 20, 20), Color.Red); Camara = new TgcRotationalCamera(box.BoundingBox.calculateBoxCenter(), box.BoundingBox.calculateBoxRadius() * 2); }
public override void init() { Device d3dDevice = GuiController.Instance.D3dDevice; //Iniciar kinect tgcKinect = new TgcKinect(); tgcKinect.init(); tgcKinect.DebugSkeleton.init(); //Analizador de gestos gestureAnalizer = new GestureAnalizer(); sceneBounds = new TgcBoundingBox(new Vector3(-50, -40, 230), new Vector3(80, 50, 290)); gestureAnalizer.setSceneBounds(sceneBounds); sceneCenter = sceneBounds.calculateBoxCenter(); sceneCenterBox = TgcBox.fromSize(sceneCenter, new Vector3(30, 30, 30), Color.Blue); //Crear mueble de fondo mueble = TgcBox.fromSize(new Vector3(200, 100, 50), Color.SandyBrown); mueble.Position = new Vector3(20, 20, 200); //Crear puerta door = new GestureDoorLeft(); door.Mesh = TgcBox.fromSize(new Vector3(30, 40, 4), Color.Green).toMesh("door"); door.Mesh.Position = mueble.Position + new Vector3(-30, 20, 25); GuiController.Instance.FpsCamera.Enable = true; GuiController.Instance.FpsCamera.setCamera(new Vector3(1.5467f, 54.7247f, 401.1074f), new Vector3(1.4672f, 54.4561f, 400.1474f)); }
public override void init() { Device d3dDevice = GuiController.Instance.D3dDevice; //Cargamos una textura //Una textura es una imágen 2D que puede dibujarse arriba de un polígono 3D para darle color. //Es muy útil para generar efectos de relieves y superficies. //Puede ser cualquier imágen 2D (jpg, png, gif, etc.) y puede ser editada con cualquier editor //normal (photoshop, paint, descargada de goole images, etc). //El framework viene con un montón de texturas incluidas y organizadas en categorias (texturas de //madera, cemento, ladrillo, pasto, etc). Se encuentran en la carpeta del framework: // TgcViewer\Examples\Media\MeshCreator\Textures //Podemos acceder al path de la carpeta "Media" utilizando la variable "GuiController.Instance.ExamplesMediaDir". //Esto evita que tengamos que hardcodear el path de instalación del framework. TgcTexture texture = TgcTexture.createTexture(GuiController.Instance.ExamplesMediaDir + "MeshCreator\\Textures\\Madera\\cajaMadera3.jpg"); //Creamos una caja 3D ubicada en (0, -3, 0), dimensiones (5, 10, 5) y la textura como color. Vector3 center = new Vector3(0, -3, 0); Vector3 size = new Vector3(5, 10, 5); box = TgcBox.fromSize(center, size, texture); GuiController.Instance.RotCamera.targetObject(box.BoundingBox); }
public override void init() { Device d3dDevice = GuiController.Instance.D3dDevice; //Iniciar kinect tgcKinect = new TgcKinect(); tgcKinect.init(); tgcKinect.DebugSkeleton.init(); //Analizador de gestos gestureAnalizer = new GestureAnalizer(); sceneBounds = new TgcBoundingBox(new Vector3(-10, 0, -10), new Vector3(10, 20, 10)); gestureAnalizer.setSceneBounds(sceneBounds); //Crear mueble de fondo mueble = TgcBox.fromSize(new Vector3(20, 20, 5), Color.SandyBrown); mueble.Position = new Vector3(0, 10, -10); //Crear algunos cajones Vector3 muebleCenterPos = mueble.Position; cajones = new List <GestureLocker>(); cajones.Add(crearCajon(muebleCenterPos + new Vector3(-3, 0, 0.25f), new Vector3(5, 2, 5))); cajones.Add(crearCajon(muebleCenterPos + new Vector3(0, 3, 0.25f), new Vector3(5, 2, 5))); cajones.Add(crearCajon(muebleCenterPos + new Vector3(3, 0, 0.25f), new Vector3(5, 2, 5))); GuiController.Instance.FpsCamera.Enable = true; GuiController.Instance.FpsCamera.setCamera(new Vector3(-3.5508f, 16.5873f, 13.2958f), new Vector3(-3.535f, 16.3069f, 12.336f)); center = TgcBox.fromSize(new Vector3(0, 0, 0), new Vector3(1, 1, 1), Color.Blue); }
private TgcMesh CrearTribunaPlatea(string pathRecursos, TgcBox cancha, int sentido) { TgcMesh platea = this.CrearTribuna(pathRecursos + Settings.Default.meshFileTribunePl, sentido * -(float)Math.PI / 2, new Vector3(10, 12, 14)); platea.Position = new Vector3(cancha.Position.X, cancha.Position.Y + platea.BoundingBox.PMax.Y, sentido * (cancha.Size.Z / 2 + platea.BoundingBox.PMax.X + 120)); return(platea); }
public void luzAguaSoleado(TgcBox lightMesh) { luzSoleado(lightMesh); cargarEfectoLuz(this.effect); //return posLuz; }
/// <summary> /// Detectar el eje seleccionado /// </summary> public void detectSelectedAxis(TgcPickingRay pickingRay) { pickingRay.updateRay(); Vector3 collP; //Buscar colision con eje con Picking if (TgcCollisionUtils.intersectRayAABB(pickingRay.Ray, boxX.BoundingBox, out collP)) { selectedAxis = Axis.X; selectedAxisBox = boxX; } else if (TgcCollisionUtils.intersectRayAABB(pickingRay.Ray, boxY.BoundingBox, out collP)) { selectedAxis = Axis.Y; selectedAxisBox = boxY; } else if (TgcCollisionUtils.intersectRayAABB(pickingRay.Ray, boxZ.BoundingBox, out collP)) { selectedAxis = Axis.Z; selectedAxisBox = boxZ; } else { selectedAxis = Axis.None; selectedAxisBox = null; } //Desplazamiento inicial if (selectedAxis != Axis.None) { TgcD3dInput input = GuiController.Instance.D3dInput; initMouseP = new Vector2(input.XposRelative, input.YposRelative); } }
public override void init() { Device d3dDevice = GuiController.Instance.D3dDevice; //Crear Sprite sprite = new TgcSprite(); sprite.Texture = TgcTexture.createTexture(GuiController.Instance.ExamplesMediaDir + "\\Texturas\\LogoTGC.png"); //Ubicarlo centrado en la pantalla Size screenSize = GuiController.Instance.Panel3d.Size; Size textureSize = sprite.Texture.Size; sprite.Position = new Vector2(FastMath.Max(screenSize.Width / 2 - textureSize.Width / 2, 0), FastMath.Max(screenSize.Height / 2 - textureSize.Height / 2, 0)); //Modifiers para variar parametros del sprite GuiController.Instance.Modifiers.addVertex2f("position", new Vector2(0, 0), new Vector2(screenSize.Width, screenSize.Height), sprite.Position); GuiController.Instance.Modifiers.addVertex2f("scaling", new Vector2(0, 0), new Vector2(4, 4), sprite.Scaling); GuiController.Instance.Modifiers.addFloat("rotation", 0, 360, 0); //Creamos un Box3D para que se vea como el Sprite es en 2D y se dibuja siempre arriba de la escena 3D box = TgcBox.fromSize(new Vector3(10, 10, 10), TgcTexture.createTexture(GuiController.Instance.ExamplesMediaDir + "\\Texturas\\pasto.jpg")); //Hacer que la camara se centre en el box3D GuiController.Instance.RotCamera.targetObject(box.BoundingBox); }
/// <summary> /// Cargar una nueva malla /// </summary> private void changeMesh(string meshName) { if (selectedMesh == null || selectedMesh != meshName) { if (mesh != null) { mesh.dispose(); mesh = null; } selectedMesh = meshName; //Cargar mesh y animaciones TgcSkeletalLoader loader = new TgcSkeletalLoader(); mesh = loader.loadMeshAndAnimationsFromFile(mediaPath + selectedMesh + "-TgcSkeletalMesh.xml", mediaPath, animationsPath); //Crear esqueleto a modo Debug mesh.buildSkletonMesh(); //Elegir animacion inicial mesh.playAnimation(selectedAnim, true); //Crear caja como modelo de Attachment del hueos "Bip01 L Hand" attachment = new TgcSkeletalBoneAttach(); TgcBox attachmentBox = TgcBox.fromSize(new Vector3(2, 40, 2), Color.Red); attachment.Mesh = attachmentBox.toMesh("attachment"); attachment.Bone = mesh.getBoneByName("Bip01 L Hand"); attachment.Offset = Matrix.Translation(3, -15, 0); attachment.updateValues(); //Configurar camara GuiController.Instance.RotCamera.targetObject(mesh.BoundingBox); } }
public override void Init() { //Cargar escenario var loader = new TgcSceneLoader(); //Configurar MeshFactory customizado scene = loader.loadSceneFromFile(MediaDir + "MeshCreator\\Scenes\\Deposito\\Deposito-TgcScene.xml"); //Camara en 1ra persona Camara = new TgcFpsCamera(new Vector3(200, 250, 175), 400f, 300f, Input); //Mesh para la luz lightMesh = TgcBox.fromSize(new Vector3(10, 10, 10), Color.Red); //Modifiers de la luz Modifiers.addBoolean("lightEnable", "lightEnable", true); Modifiers.addVertex3f("lightPos", new Vector3(-200, -100, -200), new Vector3(200, 200, 300), new Vector3(-60, 90, 175)); Modifiers.addVertex3f("lightDir", new Vector3(-1, -1, -1), new Vector3(1, 1, 1), new Vector3(-0.05f, 0, 0)); Modifiers.addColor("lightColor", Color.White); Modifiers.addFloat("lightIntensity", 0, 150, 35); Modifiers.addFloat("lightAttenuation", 0.1f, 2, 0.3f); Modifiers.addFloat("specularEx", 0, 20, 9f); Modifiers.addFloat("spotAngle", 0, 180, 39f); Modifiers.addFloat("spotExponent", 0, 20, 7f); //Modifiers de material Modifiers.addColor("mEmissive", Color.Black); Modifiers.addColor("mAmbient", Color.White); Modifiers.addColor("mDiffuse", Color.White); Modifiers.addColor("mSpecular", Color.White); }
public override void Init() { //Crear loader var loader = new TgcSceneLoader(); //Cargar mesh var scene = loader.loadSceneFromFile(MediaDir + "ModelosTgc\\Olla\\Olla-TgcScene.xml"); mesh = scene.Meshes[0]; //Crear caja para indicar ubicacion de la luz lightMesh = TgcBox.fromSize(new Vector3(20, 20, 20), Color.Yellow).toMesh("Box"); //Modifiers de la luz Modifiers.addBoolean("lightEnable", "lightEnable", true); Modifiers.addVertex3f("lightPos", new Vector3(-500, -500, -500), new Vector3(500, 800, 500), new Vector3(0, 500, 0)); Modifiers.addColor("ambient", Color.Gray); Modifiers.addColor("diffuse", Color.Blue); Modifiers.addColor("specular", Color.White); Modifiers.addFloat("specularEx", 0, 40, 20f); //Centrar camara rotacional respecto a este mesh Camara = new TgcRotationalCamera(mesh.BoundingBox.calculateBoxCenter(), mesh.BoundingBox.calculateBoxRadius() * 2, Input); }
public void init(string text) { TgcBox box = new TgcBox(); box.setExtremes(new Vector3(0, 0, 0), new Vector3(400, 2, 1000)); box.Color = Color.Blue; box.updateValues(); TgcMesh temp = box.toMesh("water"); TgcSceneLoader loader = new TgcSceneLoader(); //Configurar MeshFactory customizado loader.MeshFactory = new ShadedMeshFactory(); mesh = (ShadedMesh)loader.MeshFactory.createNewMesh(temp.D3dMesh, "water", TgcMesh.MeshRenderType.VERTEX_COLOR); mesh.BoundingBox = box.BoundingBox; mesh.loadEffect("Shaders//water.fx", "Basic"); mesh.AutoUpdateBoundingBox = false; TgcTexture t_temp = TgcTexture.createTexture(GuiController.Instance.D3dDevice, GuiController.Instance.AlumnoEjemplosMediaDir + "RenderizameLaBanera\\waterbump.dds");//"perlin_noise.jpg");//"waterbump.dds"); noise = t_temp.D3dTexture; t_temp = TgcTexture.createTexture(GuiController.Instance.D3dDevice, GuiController.Instance.AlumnoEjemplosMediaDir + "RenderizameLaBanera\\" + text); riverBottom = t_temp.D3dTexture; mesh.Effect.SetValue("xNoiseTex", noise); mesh.Effect.SetValue("xRiverBottom", riverBottom); Surface renderTarget = GuiController.Instance.D3dDevice.GetRenderTarget(0); riverReflex = new Texture(GuiController.Instance.D3dDevice, renderTarget.Description.Width, renderTarget.Description.Height, 1, Usage.RenderTarget, renderTarget.Description.Format, Pool.Default); }
public override void init() { Device d3dDevice = GuiController.Instance.D3dDevice; //Cargar escenario TgcSceneLoader loader = new TgcSceneLoader(); scene = loader.loadSceneFromFile(GuiController.Instance.ExamplesMediaDir + "MeshCreator\\Scenes\\Deposito\\Deposito-TgcScene.xml"); //Camara en 1ra persona GuiController.Instance.FpsCamera.Enable = true; GuiController.Instance.FpsCamera.MovementSpeed = 400f; GuiController.Instance.FpsCamera.JumpSpeed = 300f; GuiController.Instance.FpsCamera.setCamera(new Vector3(-20, 80, 450), new Vector3(0, 80, 1)); //Mesh para la luz lightMesh = TgcBox.fromSize(new Vector3(10, 10, 10), Color.Red); //Modifiers de la luz GuiController.Instance.Modifiers.addBoolean("lightEnable", "lightEnable", true); GuiController.Instance.Modifiers.addVertex3f("lightPos", new Vector3(-200, -100, -200), new Vector3(200, 200, 300), new Vector3(60, 35, 250)); GuiController.Instance.Modifiers.addColor("lightColor", Color.White); GuiController.Instance.Modifiers.addFloat("lightIntensity", 0, 150, 20); GuiController.Instance.Modifiers.addFloat("lightAttenuation", 0.1f, 2, 0.3f); GuiController.Instance.Modifiers.addFloat("specularEx", 0, 20, 9f); //Modifiers de material GuiController.Instance.Modifiers.addColor("mEmissive", Color.Black); GuiController.Instance.Modifiers.addColor("mAmbient", Color.White); GuiController.Instance.Modifiers.addColor("mDiffuse", Color.White); GuiController.Instance.Modifiers.addColor("mSpecular", Color.White); }
public Jugador(TgcSkeletalMesh skeletalMesh, IJugadorMoveStrategy strategy, Pelota pelota) { this.skeletalMesh = skeletalMesh; this.box = TgcBox.fromExtremes(this.skeletalMesh.BoundingBox.PMin, this.skeletalMesh.BoundingBox.PMax); this.strategy = strategy; this.pelota = pelota; this.posicionOriginal = skeletalMesh.Position; }
public Cancha(TgcBox box, List<IRenderObject> componentes, List<LimiteCancha> limitesCancha, List<Luz> luces, List<TgcBox> carteles) { this.box = box; this.componentesEstaticos = componentes; this.limitesCancha = limitesCancha; this.Luces = luces; this.carteles = carteles; this.time = 0; }
public Pelota(TgcSphere sphere) { this.sphere = sphere; //apago el auto transformado, ya que la pelota lo maneja solo this.sphere.AutoTransformEnable = false; this.sphere.Transform = this.getScalingMatrix() * Matrix.Translation(this.sphere.Position); this.sphere.updateValues(); this.box = TgcBox.fromSize(sphere.Position, new Vector3(this.Diametro, this.Diametro, this.Diametro)); this.posicionOriginalSphere = new Vector3(this.sphere.Position.X, this.sphere.Position.Y, this.sphere.Position.Z); this.posicionOriginalBox = new Vector3(this.box.Position.X, this.box.Position.Y, this.box.Position.Z); }
public MenuItem(string nombre, Vector3 vectorOrigen, Vector3 vectorFin, string texturaSelect, string texturaUnselect) { this.nombre = nombre; this.opcion = TgcBox.fromSize(vectorOrigen, vectorFin, TgcTexture.createTexture(texturaUnselect)); //TODO cambiar por matrices this.opcion.AutoTransformEnable = true; this.opcionSelect = TgcBox.fromSize(new Vector3(vectorOrigen.X + 0.4f, vectorOrigen.Y, vectorOrigen.Z), vectorFin, TgcTexture.createTexture(texturaSelect)); //TODO cambiar por matrices this.opcionSelect.AutoTransformEnable = true; this.select = false; this.opcion.Enabled = true; this.opcionSelect.Enabled = false; }
public MenuInicial(string pathRecursos, TgcThirdPersonCamera camara, EjemploAlumno main) { this.main = main; this.camara = camara; this.drawer2D = new Drawer2D(); //Titulo this.titulo = new TgcText2D(); this.titulo.Text = "Socketes"; this.titulo.Color = Color.White; this.titulo.Align = TgcText2D.TextAlign.CENTER; this.titulo.Position = new Point(280, 0); this.titulo.Size = new Size(400, 100); this.titulo.changeFont(new System.Drawing.Font("Arial", 35)); //Brazuca this.pelota = new TgcSphere(); //TODO cambiar por matrices this.pelota.AutoTransformEnable = true; this.pelota.setTexture(TgcTexture.createTexture(pathRecursos + Settings.Default.textureBall)); this.pelota.Radius = 2.5f; this.pelota.LevelOfDetail = 4; this.pelota.Position = new Vector3(3, 0, -4); this.pelota.updateValues(); //Cancha donde esta la pelota this.cancha = TgcBox.fromSize(new Vector3(20, 0, 20), TgcTexture.createTexture(pathRecursos + Settings.Default.textureMenuField)); //TODO cambiar por matrices this.cancha.AutoTransformEnable = true; this.cancha.Position = new Vector3(0, -2.5f, 0); //Menu this.menus = new List<MenuItem>(); this.menus.Add(new MenuItem("picadito", new Vector3(-5, 2, 0), new Vector3(8, 1, 0), pathRecursos + Settings.Default.texturePicadito1, pathRecursos + Settings.Default.texturePicadito2)); this.menus.Add(new MenuItem("configuracion", new Vector3(-5, 0.8f, 0), new Vector3(8, 1, 0), pathRecursos + Settings.Default.textureControles1, pathRecursos + Settings.Default.textureControles2)); this.menus.Add(new MenuItem("salir", new Vector3(-5, -0.4f, 0), new Vector3(8, 1, 0), pathRecursos + Settings.Default.textureSalir1, pathRecursos + Settings.Default.textureSalir2)); this.menus[0].Select(); //Menu de configuracion //Crear Sprite this.panelConfiguracion = new CustomSprite(); this.panelConfiguracion.Bitmap = new CustomBitmap(pathRecursos + Settings.Default.texturePanelcontroles, D3DDevice.Instance.Device); this.panelConfiguracion.Scaling = new Vector2(0.75f, 0.75f); Size textureSize = this.panelConfiguracion.Bitmap.Size; this.panelConfiguracion.Position = new Vector2(FastMath.Max(D3DDevice.Instance.Width / 2 - textureSize.Width / 2, 0), FastMath.Max(D3DDevice.Instance.Height / 2 - textureSize.Height / 2, 0)); }
/// <summary> /// Creo los limites de la cancha /// </summary> /// <returns> Lista con los limites de la cancha</returns> private List<LimiteCancha> CrearLimitesCancha(TgcBox cancha) { int altoLimite = 600; List<LimiteCancha> limites = new List<LimiteCancha>(); limites.Add(new LimiteCancha(TgcBox.fromSize(new Vector3(cancha.Position.X, cancha.Position.Y + altoLimite / 2, cancha.Size.Z / 2 - 22), new Vector3(cancha.Size.X, altoLimite, 0)))); limites.Add(new LimiteCancha(TgcBox.fromSize(new Vector3(cancha.Position.X, cancha.Position.Y + altoLimite / 2, -cancha.Size.Z / 2 + 22), new Vector3(cancha.Size.X, altoLimite, 0)))); limites.Add(new LimiteCancha(TgcBox.fromSize(new Vector3(cancha.Size.X / 2 - 100, cancha.Position.Y + altoLimite / 2, cancha.Position.Z), new Vector3(0, altoLimite, cancha.Size.Z)))); limites.Add(new LimiteCancha(TgcBox.fromSize(new Vector3(-cancha.Size.X / 2 + 100, cancha.Position.Y + altoLimite / 2, cancha.Position.Z), new Vector3(0, altoLimite, cancha.Size.Z)))); return limites; }
/// <summary> /// Crea los 4 reflectores que posee el estadio /// </summary> /// <param name="pathRecursos"> ruta donde esta el mesh </param> /// <returns></returns> private List<Luz> CrearLuces(string pathRecursos, TgcBox cancha) { List<Luz> luces = new List<Luz>(); Luz luz1 = this.CrearLuz(pathRecursos, cancha, -1, 1, (float)Math.PI * 3 / 4); Luz luz2 = this.CrearLuz(pathRecursos, cancha, 1, 1, -(float)Math.PI * 3 / 4); Luz luz3 = this.CrearLuz(pathRecursos, cancha, -1, -1, (float)Math.PI / 4); Luz luz4 = this.CrearLuz(pathRecursos, cancha, 1, -1, -(float)Math.PI / 4); luces.Add(luz1); luces.Add(luz2); luces.Add(luz3); luces.Add(luz4); return luces; }
private Luz CrearLuz(string pathRecursos, TgcBox cancha, int signoX, int signoZ, float rotateY) { TgcMesh luzMesh = new TgcSceneLoader().loadSceneFromFile(pathRecursos + Settings.Default.meshFilePoste).Meshes[0]; //TODO cambiar por matrices luzMesh.AutoTransformEnable = true; luzMesh.rotateY(rotateY); luzMesh.Scale = new Vector3(3, 4, 3); luzMesh.Position = new Vector3(signoX * (cancha.Size.X / 2 + 50), cancha.Position.Y + luzMesh.BoundingBox.PMax.Y, signoZ * (cancha.Size.Z / 2 + 100)); Luz luz = new Luz(luzMesh, Color.White, luzMesh.BoundingBox.PMax); return luz; }
public Red(TgcBox box, TgcMesh red) { this.box = box; this.red = red; }
/// <summary> /// Crea un SkyBox que rodea toda la cancha y da una sensacion mas de realizamo /// </summary> /// <param name="pathRecursos"> la ruta donde se encuentran los recursos </param> /// <returns></returns> private TgcSkyBox CrearSkyBox(string pathRecursos, TgcBox pisoCancha) { //Crear SkyBox TgcSkyBox skyBox = new TgcSkyBox(); skyBox.Size = new Vector3(pisoCancha.Size.X + 100, 1000, pisoCancha.Size.Z + 100); skyBox.Center = new Vector3(pisoCancha.Position.X, pisoCancha.Position.Y - 1 + skyBox.Size.Y / 2, pisoCancha.Position.Z); //Configurar las texturas para cada una de las 6 caras skyBox.setFaceTexture(TgcSkyBox.SkyFaces.Up, pathRecursos + Settings.Default.textureSkyFacesUp); skyBox.setFaceTexture(TgcSkyBox.SkyFaces.Down, pathRecursos + Settings.Default.textureSkyFaceDown); skyBox.setFaceTexture(TgcSkyBox.SkyFaces.Left, pathRecursos + Settings.Default.textureSkyFaceLeft); skyBox.setFaceTexture(TgcSkyBox.SkyFaces.Right, pathRecursos + Settings.Default.textureSkyFaceRight); //Hay veces es necesario invertir las texturas Front y Back si se pasa de un sistema RightHanded a uno LeftHanded skyBox.setFaceTexture(TgcSkyBox.SkyFaces.Front, pathRecursos + Settings.Default.textureSkyFaceFront); skyBox.setFaceTexture(TgcSkyBox.SkyFaces.Back, pathRecursos + Settings.Default.textureSkyFaceBack); //Actualizar todos los valores para crear el SkyBox skyBox.Init(); return skyBox; }
private TgcMesh CrearTribunaPlatea(string pathRecursos, TgcBox cancha, int sentido) { TgcMesh platea = this.CrearTribuna(pathRecursos + Settings.Default.meshFileTribunePl, sentido * -(float)Math.PI / 2, new Vector3(10, 12, 14)); platea.Position = new Vector3(cancha.Position.X, cancha.Position.Y + platea.BoundingBox.PMax.Y, sentido * (cancha.Size.Z / 2 + platea.BoundingBox.PMax.X + 120)); return platea; }
private TgcMesh CrearTribunaPopular(string pathRecursos, TgcBox cancha, int sentido) { TgcMesh platea = this.CrearTribuna(pathRecursos + Settings.Default.meshFileTribunePo, sentido * -(float)Math.PI / 2, new Vector3(14, 12, 15)); platea.Position = new Vector3(sentido * (cancha.Size.X / 2 + platea.BoundingBox.PMax.Z + 120), cancha.Position.Y + platea.BoundingBox.PMax.Y, cancha.Position.Z); return platea; }
public LimiteCancha(TgcBox box) { this.box = box; //TODO cambiar por matrices this.box.AutoTransformEnable = true; }
public override void Init() { //Cargar jugador y pelota this.pelota = this.CrearPelota(MediaDir); this.jugador = this.CrearJugador(MediaDir); //Camara en 1ra persona //GuiController.Instance.FpsCamera.Enable = true; //GuiController.Instance.FpsCamera.MovementSpeed = 400f; //GuiController.Instance.FpsCamera.JumpSpeed = 300f; //GuiController.Instance.FpsCamera.setCamera(new Vector3(0, 150, 200), new Vector3(0, 80, 0)); //Cargar Shader personalizado de MultiDiffuseLights /* * Cargar Shader personalizado de MultiDiffuseLights * Este Shader solo soporta TgcMesh con RenderType DIFFUSE_MAP (que son las unicas utilizadas en este ejemplo) * El shader toma 4 luces a la vez para iluminar un mesh. * Pero como hacer 4 veces los calculos en el shader es costoso, de cada luz solo calcula el componente Diffuse. */ this.meshMultiDiffuseLights = TgcShaders.loadEffect(ShadersDir + "Shaders\\MeshMultiplePointLight.fx"); this.skeletalMeshPointLight = TgcShaders.loadEffect(ShadersDir + "Shaders\\SkeletalMeshMultiplePointLight.fx"); this.luces = new List<Luz>(); //Crear 4 mesh para representar las 4 para la luces. Las ubicamos en distintas posiciones del escenario, cada una con un color distinto. luces.Add(new Luz(TgcBox.fromSize(new Vector3(40, 150, 100), new Vector3(10, 10, 10), Color.BlueViolet), Color.HotPink, new Vector3(-40, 40, 400))); luces.Add(new Luz(TgcBox.fromSize(new Vector3(-40, 150, 100), new Vector3(10, 10, 10), Color.LightSteelBlue), Color.Blue, new Vector3(-40, 60, 400))); luces.Add(new Luz(TgcBox.fromSize(new Vector3(40, 150, -100), new Vector3(10, 10, 10), Color.Green), Color.Green, new Vector3(-40, 80, 400))); luces.Add(new Luz(TgcBox.fromSize(new Vector3(-40, 150, -100), new Vector3(10, 10, 10), Color.Orange), Color.Orange, new Vector3(-40, 100, 400))); this.piso = TgcBox.fromSize(new Vector3(0, 0, 0), new Vector3(400, 0, 400), TgcTexture.createTexture(MediaDir + Settings.Default.textureMenuField)); //Modifiers //GuiController.Instance.Modifiers.addFloat("lightIntensity", 0, 150, 38); //GuiController.Instance.Modifiers.addFloat("lightAttenuation", 0.1f, 2, 0.15f); //Color de fondo //GuiController.Instance.BackgroundColor = Color.Black; //test carteles this.cartel1 = new TgcSceneLoader().loadSceneFromFile(MediaDir + "Cartel\\Cartel-TgcScene.xml").Meshes[0]; this.cartelEffect = TgcShaders.loadEffect(ShadersDir + "Shaders\\CartelShader.fx"); }