public override void init() { Device d3dDevice = GuiController.Instance.D3dDevice; d3dDevice.RenderState.AlphaFunction = Compare.Greater; d3dDevice.RenderState.BlendOperation = BlendOperation.Add; d3dDevice.RenderState.AlphaBlendEnable = true; d3dDevice.RenderState.AlphaTestEnable = true; d3dDevice.RenderState.SourceBlend = Blend.SourceAlpha; d3dDevice.RenderState.DestinationBlend = Blend.InvSourceAlpha; TgcTexture texture = TgcTexture.createTexture(d3dDevice, GuiController.Instance.ExamplesMediaDir + "ModelosTgc\\BoxAlpha\\Textures\\pruebaAlpha.png"); mesh1 = new TgcPlaneWall(new Vector3(0,0,0), new Vector3(100, 100, 0), TgcPlaneWall.Orientations.XYplane, texture); mesh1.AutoAdjustUv = false; mesh1.UTile = 1; mesh1.VTile = 1; mesh1.updateValues(); mesh2 = new TgcPlaneWall(new Vector3(0,0,100), new Vector3(100, 100, 0), TgcPlaneWall.Orientations.XYplane, texture); mesh2.AutoAdjustUv = false; mesh2.UTile = 1; mesh2.VTile = 1; mesh2.updateValues(); GuiController.Instance.FpsCamera.Enable = true; GuiController.Instance.Modifiers.addBoolean("invertRender", "Invert Render", false); }
/// <summary> /// Iniciar la creacion /// </summary> public override void initCreation(Vector3 gridPoint) { initSelectionPoint = gridPoint; //Crear plano inicial TgcTexture planeTexture = TgcTexture.createTexture(Control.getCreationTexturePath()); mesh = new TgcPlaneWall(initSelectionPoint, new Vector3(0, 0, 0), TgcPlaneWall.Orientations.XZplane, planeTexture); mesh.AutoAdjustUv = false; mesh.UTile = 1; mesh.VTile = 1; mesh.BoundingBox.setRenderColor(MeshCreatorUtils.UNSELECTED_OBJECT_COLOR); this.Layer = Control.CurrentLayer; }
public Skybox() { string skyTexPath = GuiController.Instance.AlumnoEjemplosMediaDir + "Jet_Pilot\\" + "Skybox\\"; TgcTexture texture; up = new TgcPlaneWall(); texture = TgcTexture.createTexture(GuiController.Instance.D3dDevice, skyTexPath + "up.jpg"); up.setTexture(texture); up.Origin = new Vector3(-size * 0.5f, size * 0.5f, size * 0.5f); up.Size = new Vector3(size, size, -size); up.Orientation = TgcPlaneWall.Orientations.XZplane; //dn = new TgcPlaneWall(); //texture = TgcTexture.createTexture(GuiController.Instance.D3dDevice, skyTexPath + "dn.jpg"); //dn.setTexture(texture); //dn.Origin = new Vector3(-size * 0.5f, -size * 0.5f, -size * 0.5f); //dn.Size = new Vector3(size, size, size); //dn.Orientation = TgcPlaneWall.Orientations.XZplane; lt = new TgcPlaneWall(); texture = TgcTexture.createTexture(GuiController.Instance.D3dDevice, skyTexPath + "bk.jpg"); lt.setTexture(texture); lt.Origin = new Vector3(size * 0.5f, -size * 0.5f, size * 0.5f); lt.Size = new Vector3(size, size, -size); lt.Orientation = TgcPlaneWall.Orientations.YZplane; rt = new TgcPlaneWall(); texture = TgcTexture.createTexture(GuiController.Instance.D3dDevice, skyTexPath + "ft.jpg"); rt.setTexture(texture); rt.Origin = new Vector3(-size * 0.5f, -size * 0.5f, -size * 0.5f); rt.Size = new Vector3(size, size, size); rt.Orientation = TgcPlaneWall.Orientations.YZplane; ft = new TgcPlaneWall(); texture = TgcTexture.createTexture(GuiController.Instance.D3dDevice, skyTexPath + "lf.jpg"); ft.setTexture(texture); ft.Origin = new Vector3(size * 0.5f, -size * 0.5f, -size * 0.5f); ft.Size = new Vector3(-size, size, size); ft.Orientation = TgcPlaneWall.Orientations.XYplane; bk = new TgcPlaneWall(); texture = TgcTexture.createTexture(GuiController.Instance.D3dDevice, skyTexPath + "rt.jpg"); bk.setTexture(texture); bk.Origin = new Vector3(-size * 0.5f, -size * 0.5f, size * 0.5f); bk.Size = new Vector3(size, size, size); bk.Orientation = TgcPlaneWall.Orientations.XYplane; this.Reset(); }
/// <summary> /// Crear un nuevo Wall igual a este /// </summary> /// <returns>Wall clonado</returns> public TgcPlaneWall clone() { TgcPlaneWall cloneWall = new TgcPlaneWall(); cloneWall.origin = this.origin; cloneWall.size = this.size; cloneWall.orientation = this.orientation; cloneWall.autoAdjustUv = this.autoAdjustUv; cloneWall.uTile = this.uTile; cloneWall.vTile = this.vTile; cloneWall.alphaBlendEnable = this.alphaBlendEnable; cloneWall.uvOffset = this.uvOffset; cloneWall.setTexture(this.texture.clone()); updateValues(); return(cloneWall); }
private void updateWall() { Vector3 origin = (Vector3)GuiController.Instance.Modifiers["origin"]; Vector3 dimension = (Vector3)GuiController.Instance.Modifiers["dimension"]; Vector2 tiling = (Vector2)GuiController.Instance.Modifiers["tiling"]; string orientation = (string)GuiController.Instance.Modifiers["orientation"]; TgcPlaneWall.Orientations or; if(orientation == "XY") or = TgcPlaneWall.Orientations.XYplane; else if(orientation == "XZ") or = TgcPlaneWall.Orientations.XZplane; else or = TgcPlaneWall.Orientations.YZplane; if (wall == null) { wall = new TgcPlaneWall(origin, dimension, or, currentTexture, tiling.X, tiling.Y); } else { wall.updateValues(origin, dimension, or, tiling.X, tiling.Y); } }
public override void init() { Device d3dDevice = GuiController.Instance.D3dDevice; //Modifiers para variar parámetros de la pared GuiController.Instance.Modifiers.addVertex3f("origin", new Vector3(-100, -100, -100), new Vector3(100, 100, 100), new Vector3(0, 0, 0)); GuiController.Instance.Modifiers.addVertex3f("dimension", new Vector3(-100, -100, -100), new Vector3(1000, 1000, 100), new Vector3(100, 100, 100)); GuiController.Instance.Modifiers.addInterval("orientation", new string[] { "XY", "XZ", "YZ" }, 0); GuiController.Instance.Modifiers.addVertex2f("tiling", new Vector2(0,0), new Vector2(10,10),new Vector2(1,1)); GuiController.Instance.Modifiers.addBoolean("autoAdjust", "autoAdjust", false); //Modifier de textura string texturePath = GuiController.Instance.ExamplesMediaDir + "Texturas\\Quake\\TexturePack2\\brick1_1.jpg"; currentTexture = TgcTexture.createTexture(d3dDevice, texturePath); GuiController.Instance.Modifiers.addTexture("texture", currentTexture.FilePath); //Crear pared wall = new TgcPlaneWall(); wall.setTexture(currentTexture); //Actualizar según valores cargados updateWall(); }
/// <summary> /// Crear un nuevo Wall igual a este /// </summary> /// <returns>Wall clonado</returns> public TgcPlaneWall clone() { TgcPlaneWall cloneWall = new TgcPlaneWall(); cloneWall.origin = this.origin; cloneWall.size = this.size; cloneWall.orientation = this.orientation; cloneWall.autoAdjustUv = this.autoAdjustUv; cloneWall.uTile = this.uTile; cloneWall.vTile = this.vTile; cloneWall.alphaBlendEnable = this.alphaBlendEnable; cloneWall.uvOffset = this.uvOffset; cloneWall.setTexture(this.texture.clone()); updateValues(); return cloneWall; }
/// <summary> /// Construir plano /// </summary> public override void doCreation() { TgcD3dInput input = GuiController.Instance.D3dInput; //Si hacen clic con el mouse, ver si hay colision con el suelo if (input.buttonDown(TgcD3dInput.MouseButtons.BUTTON_LEFT)) { //Obtener altura en Y segun movimient en Y del mouse float heightY = creatingInitMouseY - input.Ypos; float adjustedHeightY = MeshCreatorUtils.getMouseIncrementHeightSpeed(Control.Camera, this.BoundingBox, heightY); //Determinar posicion X segun la colision con el grid Vector3 collisionPoint = Control.Grid.getPicking(); Vector3 extensionPoint = new Vector3(collisionPoint.X, initSelectionPoint.Y + adjustedHeightY, initSelectionPoint.Z); //Obtener maximo y minimo Vector3 min = Vector3.Minimize(initSelectionPoint, extensionPoint); Vector3 max = Vector3.Maximize(initSelectionPoint, extensionPoint); min.Z = initSelectionPoint.Z; max.Z = initSelectionPoint.Z + 1; //Configurar plano mesh.setExtremes(min, max); mesh.updateValues(); } //Solto el clic del mouse, generar plano definitivo else if (input.buttonUp(TgcD3dInput.MouseButtons.BUTTON_LEFT)) { //Tiene el tamaño minimo tolerado Vector3 size = mesh.BoundingBox.calculateSize(); if (size.X > 1 && size.Y > 1) { //Guardar size original del plano para hacer Scaling originalSize = mesh.Size; //Dejar cargado para que se pueda crear un nuevo plano Control.CurrentState = MeshCreatorControl.State.CreatePrimitiveSelected; Control.CreatingPrimitive = new PlaneXYPrimitive(Control); //Agregar plano a la lista de modelos Control.addMesh(this); //Seleccionar plano Control.SelectionRectangle.clearSelection(); Control.SelectionRectangle.selectObject(this); Control.updateModifyPanel(); } //Sino, descartar else { Control.CurrentState = MeshCreatorControl.State.CreatePrimitiveSelected; mesh.dispose(); mesh = null; } } }
/// <summary> /// Construir plano /// </summary> public override void doCreation() { TgcD3dInput input = GuiController.Instance.D3dInput; //Si hacen clic con el mouse, ver si hay colision con el suelo if (input.buttonDown(TgcD3dInput.MouseButtons.BUTTON_LEFT)) { //Determinar el size en XZ del box Vector3 collisionPoint = Control.Grid.getPicking(); //Obtener extremos del rectángulo de selección Vector3 min = Vector3.Minimize(initSelectionPoint, collisionPoint); Vector3 max = Vector3.Maximize(initSelectionPoint, collisionPoint); min.Y = 0; max.Y = 1; //Configurar plano mesh.setExtremes(min, max); mesh.updateValues(); } //Solto el clic del mouse, generar plano definitivo else if (input.buttonUp(TgcD3dInput.MouseButtons.BUTTON_LEFT)) { //Tiene el tamaño minimo tolerado Vector3 size = mesh.BoundingBox.calculateSize(); if (size.X > 1 && size.Z > 1) { //Guardar size original del plano para hacer Scaling originalSize = mesh.Size; //Dejar cargado para que se pueda crear un nuevo plano Control.CurrentState = MeshCreatorControl.State.CreatePrimitiveSelected; Control.CreatingPrimitive = new PlaneXZPrimitive(Control); //Agregar plano a la lista de modelos Control.addMesh(this); //Seleccionar plano Control.SelectionRectangle.clearSelection(); Control.SelectionRectangle.selectObject(this); Control.updateModifyPanel(); } //Sino, descartar else { Control.CurrentState = MeshCreatorControl.State.CreatePrimitiveSelected; mesh.dispose(); mesh = null; } } }
public CustomVertex.PositionTextured[] actualizarPasto(float tLeftMoved, float tRightMoved, int parte, TgcPlaneWall pastoWall) { float autoWidth; float autoHeight; //Calcular los 4 corners de la pared Vector3 bLeft, tLeft, bRight, tRight, Center; bLeft = pastoWall.Origin; tLeft = new Vector3(pastoWall.Origin.X + pastoWall.Size.X, pastoWall.Origin.Y, pastoWall.Origin.Z); bRight = new Vector3(pastoWall.Origin.X - tLeftMoved, pastoWall.Origin.Y + pastoWall.Size.Y, pastoWall.Origin.Z); tRight = new Vector3(pastoWall.Origin.X + pastoWall.Size.X - tRightMoved, pastoWall.Origin.Y + pastoWall.Size.Y, pastoWall.Origin.Z); Center = new Vector3(pastoWall.Origin.X + (pastoWall.Size.X / 2), pastoWall.Origin.Y + (pastoWall.Size.Y / 2), pastoWall.Origin.Z); autoWidth = (pastoWall.Size.X / pastoWall.Texture.Width); autoHeight = (pastoWall.Size.Y / pastoWall.Texture.Height); //Auto ajustar UV if (pastoWall.AutoAdjustUv) { pastoWall.UTile = autoHeight; pastoWall.VTile = autoWidth; } float offsetU = pastoWall.UVOffset.X; float offsetV = pastoWall.UVOffset.Y; //Rotation if (parte == 0) { /*if (pasto.Origin.X > 0) origen.X = pasto.Origin.X + pasto.Size.X / 2; else origen.X = pasto.Origin.X - pasto.Size.X / 2;*/ Vector3 v1, v2; v1 = tLeft - tRight; v2 = bLeft - tRight; Vector3 normal = Vector3.Cross(v1, v2); normal.Normalize(); Vector3 direccion; direccion.X = CustomFpsCamera.Instance.Position.X - Center.X; direccion.Y = 0; direccion.Z = CustomFpsCamera.Instance.Position.Z - Center.Z; direccion.Normalize(); calcularOrientacion(direccion, Center, normal); } CustomVertex.PositionTextured[] vertices = new CustomVertex.PositionTextured[6]; float d = 0.02f; //Primer triangulo vertices[0] = new CustomVertex.PositionTextured(bLeft, offsetU + pastoWall.UTile + d, offsetV + pastoWall.VTile +d); vertices[1] = new CustomVertex.PositionTextured(tLeft, offsetU + d, offsetV + pastoWall.VTile + d); vertices[2] = new CustomVertex.PositionTextured(tRight, offsetU + d, offsetV + d); //Segundo triangulo vertices[3] = new CustomVertex.PositionTextured(bLeft, offsetU + pastoWall.UTile + d, offsetV + pastoWall.VTile + d); vertices[4] = new CustomVertex.PositionTextured(tRight, offsetU + d, offsetV + d); vertices[5] = new CustomVertex.PositionTextured(bRight, offsetU + pastoWall.UTile + d, offsetV + d); for (int i = 0; i < vertices.Length; i++) { vertices[i].Position = Vector3.TransformCoordinate(vertices[i].Position, m_mRotacion); } //BoundingBox pastoWall.BoundingBox.setExtremes(bLeft, tRight); return vertices; }
public void crearPasto(Device d3dDevice, int pastoSecuense, Vector3 origen) { string textureName = "pasto1.png"; switch(pastoSecuense) { case 0: textureName = "pasto3.png"; break; case 1: textureName = "pasto2.png"; break; case 2: textureName = "pasto1.png"; break; } string texturePath = GuiController.Instance.AlumnoEjemplosMediaDir + "Los_Borbotones\\Mapas\\Textures\\" + textureName; TgcTexture pasto_texture = TgcTexture.createTexture(d3dDevice, texturePath); //Crear pared TgcPlaneWall pastoWall = new TgcPlaneWall(); pastoWall.AlphaBlendEnable = true; pastoWall.setTexture(pasto_texture); //Aplicar valores en pared pastoWall.Origin = origen; pastoWall.Size = new Vector3(36, 30, 36); pastoWall.AutoAdjustUv = true; pastoWall.UTile = 1; pastoWall.VTile = 1; pastoWall.updateValues(); partePasto.Add(pastoWall); }
public void crearMuzzle() { Device d3dDevice = GuiController.Instance.D3dDevice; textures_flash.Add("flash1.png"); textures_flash.Add("flash2.png"); textures_flash.Add("flash3.png"); MAX_RENDER = MAX_DELAY + MAX_DELAY / 2; string texturePath = GuiController.Instance.AlumnoEjemplosMediaDir + "Los_Borbotones\\Sprites\\" + textures_flash[0]; TgcTexture pasto_texture = TgcTexture.createTexture(d3dDevice, texturePath); //Crear pared muzzleFlash = new TgcPlaneWall(); muzzleFlash.AlphaBlendEnable = true; muzzleFlash.setTexture(pasto_texture); //Aplicar valores en pared //muzzleFlash.Origin = new Vector3(-50, 917.8f, 4.1f); muzzleFlash.Size = new Vector3(14, 14, 14); muzzleFlash.AutoAdjustUv = false; muzzleFlash.UTile = 1; muzzleFlash.VTile = 1; //Offsets /* BLoffset = new Vector3(-100, -17.7f, 14.7f); TLoffset = new Vector3(-100, -17.7f, 14.7f + muzzleFlash.Size.Z); BRoffset = new Vector3(-100, -17.7f + muzzleFlash.Size.Y, 14.7f); TRoffset = new Vector3(-100, -17.7f + muzzleFlash.Size.Y, 14.7f + muzzleFlash.Size.Z); */ BLoffset = new Vector3( 3.5f, -12f, 50); TLoffset = new Vector3(3.5f + muzzleFlash.Size.X, -12f, 50); BRoffset = new Vector3(3.5f, -12f + muzzleFlash.Size.Y, 50); TRoffset = new Vector3(3.5f + muzzleFlash.Size.X, -12f + muzzleFlash.Size.Y, 50); }