/// <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); } }
private ArmaManager(EnemigosManager enemigosManager, TgcFpsMiCamara camara, EscenarioManager escenarioManager) { //this.enemigosManager = enemigosManager; this.soundManager = SoundManager.getInstance(); this.camara = camara; this.escenarioManager = escenarioManager; this.enemigosManager = enemigosManager; pickingRay = new TgcPickingRay(); //Crear Sprite spriteArma = new TgcSprite(); spriteMira = new TgcSprite(); setInitialValues(); }
public override void init() { Device d3dDevice = GuiController.Instance.D3dDevice; //Cargar suelo TgcTexture texture = TgcTexture.createTexture(d3dDevice, GuiController.Instance.ExamplesMediaDir + "Texturas\\granito.jpg"); suelo = TgcBox.fromSize(new Vector3(0, 0, 0), new Vector3(5000, 0.1f, 5000), texture); //Iniciarlizar PickingRay pickingRay = new TgcPickingRay(); //Cargar nave TgcSceneLoader loader = new TgcSceneLoader(); TgcScene scene = loader.loadSceneFromFile(GuiController.Instance.ExamplesMediaDir + "MeshCreator\\Meshes\\Vehiculos\\NaveEspacial\\NaveEspacial-TgcScene.xml"); mesh = scene.Meshes[0]; //Rotación original de la malla, hacia -Z originalMeshRot = new Vector3(0, 0, -1); //Manipulamos los movimientos del mesh a mano mesh.AutoTransformEnable = false; meshRotationMatrix = Matrix.Identity; newPosition = mesh.Position; applyMovement = false; //Crear caja para marcar en que lugar hubo colision collisionPointMesh = TgcBox.fromSize(new Vector3(3, 100, 3), Color.Red); //Flecha para marcar la dirección directionArrow = new TgcArrow(); directionArrow.Thickness = 5; directionArrow.HeadSize = new Vector2(10, 10); //Camara en tercera persona GuiController.Instance.ThirdPersonCamera.Enable = true; GuiController.Instance.ThirdPersonCamera.setCamera(mesh.Position, 800, 1500); GuiController.Instance.Modifiers.addFloat("speed", 1000, 5000, 2500); }
public override void init() { Device d3dDevice = GuiController.Instance.D3dDevice; //Cargar 25 cajas formando una matriz TgcSceneLoader loader = new TgcSceneLoader(); boxes = new List<TgcBox>(); TgcTexture texture = TgcTexture.createTexture(d3dDevice, GuiController.Instance.ExamplesMediaDir + "Texturas\\granito.jpg"); Vector3 boxSize = new Vector3(30, 30, 30); for (int i = 0; i < 5; i++) { for (int j = 0; j < 5; j++) { Vector3 center = new Vector3((boxSize.X + boxSize.X / 2) * i, (boxSize.Y + boxSize.Y / 2) * j, 0); TgcBox box = TgcBox.fromSize(center, boxSize, texture); boxes.Add(box); } } //Iniciarlizar PickingRay pickingRay = new TgcPickingRay(); //Camara fija GuiController.Instance.RotCamera.Enable = false; GuiController.Instance.setCamera(new Vector3(94.9854f, 138.4992f, -284.3344f), new Vector3(86.4563f, -15.4191f, 703.7123f)); //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 GuiController.Instance.UserVars.addVar("CollP-X:"); GuiController.Instance.UserVars.addVar("CollP-Y:"); GuiController.Instance.UserVars.addVar("CollP-Z:"); }
public override void init() { Device d3dDevice = GuiController.Instance.D3dDevice; //Crear suelo TgcTexture texture = TgcTexture.createTexture(d3dDevice, GuiController.Instance.ExamplesMediaDir + "Texturas\\Quake\\quakeWall3.jpg"); suelo = TgcBox.fromSize(new Vector3(0, 0, 0), new Vector3(500, 0.1f, 500), texture); //Iniciarlizar PickingRay pickingRay = new TgcPickingRay(); //Cargar modelos que se pueden seleccionar modelos = new List<TgcMesh>(); modelosSeleccionados = new List<TgcMesh>(); //Modelo 1, original TgcSceneLoader loader = new TgcSceneLoader(); TgcScene scene = loader.loadSceneFromFile(GuiController.Instance.ExamplesMediaDir + "MeshCreator\\Meshes\\Vehiculos\\Carretilla\\Carretilla-TgcScene.xml"); TgcMesh modeloOrignal = scene.Meshes[0]; modelos.Add(modeloOrignal); //Modelos instancias del original modelos.Add(modeloOrignal.createMeshInstance("Carretilla2", new Vector3(100, 0, 0), Vector3.Empty, new Vector3(1, 1 ,1))); modelos.Add(modeloOrignal.createMeshInstance("Carretilla3", new Vector3(50, 0, -70), Vector3.Empty, new Vector3(1, 1, 1))); modelos.Add(modeloOrignal.createMeshInstance("Carretilla4", new Vector3(-100, 0, -30), Vector3.Empty, new Vector3(1, 1, 1))); modelos.Add(modeloOrignal.createMeshInstance("Carretilla5", new Vector3(-70, 0, -80), Vector3.Empty, new Vector3(1, 1, 1))); //Crear caja para marcar en que lugar hubo colision selectionBox = TgcBox.fromSize(new Vector3(3, SELECTION_BOX_HEIGHT, 3), Color.Red); selectionBox.BoundingBox.setRenderColor(Color.Red); selecting = false; //Camara fija GuiController.Instance.RotCamera.Enable = false; GuiController.Instance.setCamera(new Vector3(-4.4715f, 239.1167f, 179.248f), new Vector3(-4.4742f, 238.3456f, 178.6113f)); }
private TgcMesh pickVegetation(TgcTerrainEditor editor) { TgcPickingRay ray = new TgcPickingRay(); ray.updateRay(); float minT = -1; TgcMesh closerMesh = null; foreach (TgcMesh v in editor.Vegetation) { Vector3 q; if (TgcCollisionUtils.intersectRayAABB(ray.Ray, v.BoundingBox, out q)) { float t = 0; if (q != ray.Ray.Origin) { if (ray.Ray.Direction.X != 0) t = (q.X - ray.Ray.Origin.X) / ray.Ray.Direction.X; else if (ray.Ray.Direction.Y != 0) t = (q.Y - ray.Ray.Origin.Y) / ray.Ray.Direction.Y; else if (ray.Ray.Direction.Z != 0) t = (q.Z - ray.Ray.Origin.Z) / ray.Ray.Direction.Z; } if (minT == -1 || t < minT) { minT = t; closerMesh = v; } } } if (closerMesh != null) editor.removeVegetation(closerMesh); return closerMesh; }
public MeshCreatorControl(TgcMeshCreator creator) { InitializeComponent(); this.creator = creator; this.meshes = new List<EditorPrimitive>(); this.selectionList = new List<EditorPrimitive>(); this.pickingRay = new TgcPickingRay(); this.grid = new Grid(this); this.selectionRectangle = new SelectionRectangle(this); creatingPrimitive = null; primitiveNameCounter = 0; currentGizmo = null; mediaPath = GuiController.Instance.ExamplesMediaDir + "MeshCreator\\"; defaultTexturePath = mediaPath + "Textures\\Madera\\cajaMadera1.jpg"; checkBoxShowObjectsBoundingBox.Checked = true; popupOpened = false; fpsCameraEnabled = false; lastSavePath = null; //meshBrowser //defaultMeshPath = mediaPath + "Meshes\\Vegetacion\\Arbusto\\Arbusto-TgcScene.xml"; defaultMeshPath = mediaPath + "\\Meshes\\Vegetacion"; meshBrowser = new TgcMeshBrowser(); meshBrowser.setSelectedMesh(defaultMeshPath); //Export scene dialog exportSceneSaveDialog = new SaveFileDialog(); exportSceneSaveDialog.DefaultExt = ".xml"; exportSceneSaveDialog.Filter = ".XML |*.xml"; exportSceneSaveDialog.AddExtension = true; exportSceneSaveDialog.Title = "Export scene to a -TgcScene.xml file"; //Camara camera = new MeshCreatorCamera(); camera.Enable = true; camera.setCamera(new Vector3(0, 0, 0), 500); camera.BaseRotX = -FastMath.PI / 4f; GuiController.Instance.CurrentCamera.Enable = false; //Gizmos translateGizmo = new TranslateGizmo(this); scaleGizmo = new ScaleGizmo(this); //Tab inicial tabControl.SelectedTab = tabControl.TabPages["tabPageCreate"]; currentState = State.SelectObject; radioButtonSelectObject.Checked = true; //Tab Create textBoxCreateCurrentLayer.Text = "Default"; //Tab Modify textureBrowser = new TgcTextureBrowser(); textureBrowser.ShowFolders = true; textureBrowser.setSelectedImage(defaultTexturePath); textureBrowser.AsyncModeEnable = true; textureBrowser.OnSelectImage += new TgcTextureBrowser.SelectImageHandler(textureBrowser_OnSelectImage); textureBrowser.OnClose += new TgcTextureBrowser.CloseHandler(textureBrowser_OnClose); pictureBoxModifyTexture.ImageLocation = defaultTexturePath; pictureBoxModifyTexture.Image = MeshCreatorUtils.getImage(defaultTexturePath); updateModifyPanel(); //ObjectPosition Text objectPositionText = new TgcText2d(); objectPositionText.Align = TgcText2d.TextAlign.LEFT; objectPositionText.Color = Color.Yellow; objectPositionText.Size = new Size(500, 12); objectPositionText.Position = new Point(GuiController.Instance.Panel3d.Width - objectPositionText.Size.Width, GuiController.Instance.Panel3d.Height - 20); //Snap to grid snapToGridCellSize = (float)numericUpDownCellSize.Value; //ObjectBrowser objectBrowser = new ObjectBrowser(this); //TextureBrowser para EditablePoly textureBrowserEPoly = new TgcTextureBrowser(); textureBrowserEPoly.ShowFolders = true; textureBrowserEPoly.setSelectedImage(defaultTexturePath); textureBrowserEPoly.AsyncModeEnable = true; textureBrowserEPoly.OnSelectImage += new TgcTextureBrowser.SelectImageHandler(textureBrowserEPoly_OnSelectImage); textureBrowserEPoly.OnClose += new TgcTextureBrowser.CloseHandler(textureBrowserEPoly_OnClose); //Tooltips toolTips.SetToolTip(radioButtonSelectObject, "Select object (Q)"); toolTips.SetToolTip(buttonSelectAll, "Select all objects (CTRL + E)"); toolTips.SetToolTip(checkBoxShowObjectsBoundingBox, "Show objects BoundingBox"); toolTips.SetToolTip(checkBoxSnapToGrid, "Toogle snap to grid"); toolTips.SetToolTip(numericUpDownCellSize, "Snap to grid cell size"); toolTips.SetToolTip(buttonZoomObject, "Zoom selected object (Z)"); toolTips.SetToolTip(buttonHideSelected, "Hide selected objects (H)"); toolTips.SetToolTip(buttonUnhideAll, "Unhide all hidden objects"); toolTips.SetToolTip(buttonDeleteObject, "Delete selected objects (DEL)"); toolTips.SetToolTip(buttonCloneObject, "Clone selected objects (CTRL + V)"); toolTips.SetToolTip(radioButtonFPSCamera, "Toogle First-person camera (C)"); toolTips.SetToolTip(numericUpDownFPSCameraSpeed, "First-person camera speed factor"); toolTips.SetToolTip(buttonObjectBrowser, "Open Object Browser (O)"); toolTips.SetToolTip(buttonTopView, "Set camera in Top-view (T)"); toolTips.SetToolTip(buttonLeftView, "Set camera in Left-view (L)"); toolTips.SetToolTip(buttonMergeSelected, "Merge selected objects (G)"); toolTips.SetToolTip(buttonSaveScene, "Save scene in last used path (CTRL + S)"); toolTips.SetToolTip(buttonSaveSceneAs, "Save scene in a new path (CTRL + SHIFT + S)"); toolTips.SetToolTip(checkBoxAttachExport, "If selected all the scene is exported as one single mesh"); toolTips.SetToolTip(buttonHelp, "Open Help (F1)"); toolTips.SetToolTip(radioButtonPrimitive_Box, "Create a new Box (B)"); toolTips.SetToolTip(radioButtonPrimitive_Sphere, "Create a new Sphere"); toolTips.SetToolTip(radioButtonPrimitive_PlaneXZ, "Create a new XZ-plane (P)"); toolTips.SetToolTip(radioButtonPrimitive_PlaneXY, "Create a new XY-plane"); toolTips.SetToolTip(radioButtonPrimitive_PlaneYZ, "Create a new YZ-plane"); toolTips.SetToolTip(buttonImportMesh, "Import an existing mesh (M)"); toolTips.SetToolTip(textBoxCreateCurrentLayer, "Default layer for new created objects"); toolTips.SetToolTip(buttonModifyConvertToMesh, "Conver to Mesh primitive"); toolTips.SetToolTip(radioButtonModifySelectAndMove, "Move selected objects (W)"); toolTips.SetToolTip(radioButtonModifySelectAndRotate, "Rotate selected objects (E)"); toolTips.SetToolTip(radioButtonModifySelectAndScale, "Scale selected objects (R)"); toolTips.SetToolTip(pictureBoxModifyTexture, "Change primitive texture"); toolTips.SetToolTip(buttonModifyRecomputeAABB, "Compute a new BoundingBox for the primitive"); toolTips.SetToolTip(radioButtonEPolyPrimitiveVertex, "Vertex primitve"); toolTips.SetToolTip(radioButtonEPolyPrimitiveEdge, "Edge primitve"); toolTips.SetToolTip(radioButtonEPolyPrimitivePolygon, "Polygon primitve"); toolTips.SetToolTip(radioButtonEPolySelect, "Select primitive (Q)"); toolTips.SetToolTip(buttonEPolySelectAll, "Select all primitives (CTRL + E)"); toolTips.SetToolTip(radioButtonEPolyTranslate, "Move selected primitives (W)"); toolTips.SetToolTip(buttonEPolyDelete, "Delete selected primitives (DEL)"); toolTips.SetToolTip(buttonEPolyAddTexture, "Add new texture to mesh"); toolTips.SetToolTip(buttonEPolyDeleteTexture, "Remove current texture"); toolTips.SetToolTip(pictureBoxEPolyTexture, "Change current texture"); }
/// <summary> /// Método que 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() { //GuiController.Instance: acceso principal a todas las herramientas del Framework //Device de DirectX para crear primitivas Microsoft.DirectX.Direct3D.Device d3dDevice = GuiController.Instance.D3dDevice; TgcSceneLoader loader = new TgcSceneLoader(); nivel = new Nivel1(); fpsCamara = new Camara(); GuiController.Instance.CurrentCamera = fpsCamara; fpsCamara.MovementSpeed = 1000f; fpsCamara.RotationSpeed = 2f; fpsCamara.setCamera(nivel.posicionInicial(), nivel.orientacionCamara()); fpsCamara.updateViewMatrix(d3dDevice); colisionador = new ManejadorColisiones(fpsCamara, nivel.Obstaculos); //Iniciarlizar PickingRay pickingRay = new TgcPickingRay(); }
public override void init() { Device d3dDevice = GuiController.Instance.D3dDevice; camera = new TerrainFpsCamera(); Terrain = new SmartTerrain(); this.brush = new DummyBrush(); this.vegetation = new List<TgcMesh>(); modifierPanel = new TerrainEditorModifier("Panel", this); GuiController.Instance.Modifiers.add(modifierPanel); pickingRay = new TgcPickingRay(); ShowVegetation = true; mouseMove = new MouseEventHandler(Panel3d_MouseMove); mouseLeave = new EventHandler(Panel3d_MouseLeave); noBrush = new DummyBrush(); GuiController.Instance.Panel3d.MouseMove += mouseMove; GuiController.Instance.Panel3d.MouseLeave += mouseLeave; //Configurar FPS Camara camera.Enable = true; camera.RotateMouseButton = cameraRotationButton; camera.setCamera(new Vector3(-722.6171f, 495.0046f, -31.2611f), new Vector3(164.9481f, 35.3185f, -61.5394f)); labelFPS = new TgcText2d(); labelFPS.Text = "Press F to go back to edition mode"; labelFPS.changeFont(new System.Drawing.Font("Arial", 12, FontStyle.Bold)); labelFPS.Color = Color.Red; labelFPS.Align = TgcText2d.TextAlign.RIGHT; labelVegetationHidden = new TgcText2d(); labelVegetationHidden.Text = "Press V to show vegetation"; labelVegetationHidden.changeFont(new System.Drawing.Font("Arial", 12, FontStyle.Bold)); labelVegetationHidden.Color = Color.GreenYellow; labelVegetationHidden.Format = DrawTextFormat.Bottom|DrawTextFormat.Center; }
public override void init() { Microsoft.DirectX.Direct3D.Device d3dDevice = GuiController.Instance.D3dDevice; //Crear loader TgcKeyFrameLoader loader = new TgcKeyFrameLoader(); //Crear piso TgcTexture pisoTexture = TgcTexture.createTexture(d3dDevice, GuiController.Instance.ExamplesMediaDir + "Texturas\\tierra.jpg"); piso = TgcBox.fromSize(new Vector3(0, -60, 0), new Vector3(1000, 5, 1000), pisoTexture); String mediaDir = CommandosUI.Instance.MediaDir; //Cargar modelo con una animación Key Frame string pathMesh = mediaDir + "Pez//" + "pez-TgcKeyFrameMesh.xml"; string[] animationsPath = new string[] { mediaDir + "Pez//Animaciones//nadar-TgcKeyFrameAnim.xml", mediaDir + "Pez//Animaciones//quieto-TgcKeyFrameAnim.xml" }; personaje = (TgcKeyFrameMesh)loader.loadMeshAndAnimationsFromFile(pathMesh, animationsPath); personaje.playAnimation("quieto"); //Sonido //Cargar sonido sonidoChapoteo = new TgcStaticSound(); sonidoChapoteo.loadSound(mediaDir+ "Pez//" + "Sound//WATER.WAV"); //Posicion inicial personaje.Position = new Vector3(0, -45, 0); personaje.rotateY(Geometry.DegreeToRadian(180f)); GuiController.Instance.Modifiers.addFloat("speed", 10, 100, 40); //Crear un modifier para un ComboBox con opciones string[] opciones = new string[] { "Teclas", "Picking"}; GuiController.Instance.Modifiers.addInterval("Controles", opciones, 0); currentControl = "Teclas"; //Configurar camara en Tercer Persona GuiController.Instance.ThirdPersonCamera.Enable = true; GuiController.Instance.ThirdPersonCamera.setCamera(personaje.Position, 30, -30); //Coordenadas mouse GuiController.Instance.UserVars.addVar("Posicion Mouse"); //Musica :D GuiController.Instance.Mp3Player.FileName = mediaDir + "Pez//" + "Music//UWSDWF.mp3"; GuiController.Instance.Mp3Player.play(true); reproduciendo = true; GuiController.Instance.Modifiers.addBoolean("Musica", "Reproducir", true); //Picking pickingRay = new TgcPickingRay(); collisionPointMesh = TgcBox.fromSize(new Vector3(3, 1, 3), Color.Red); }
public TgcTriangleArray() { triangles = new List<TgcTriangle>(); pickingRay = new TgcPickingRay(); }
public TgcTriangleArray() { triangles = new List <TgcTriangle>(); pickingRay = new TgcPickingRay(); }
public override void render(float elapsedTime) { TgcModifiers modifiers = GuiController.Instance.Modifiers; Vector2 size = (Vector2)modifiers.getValue("size"); Vector3 position = (Vector3)modifiers.getValue("position"); Vector3 rotation = (Vector3)modifiers.getValue("rotation"); collider.Center = position; collider.Rotation = rotation; collider.Radius = size.X; collider.Length = size.Y; collider.updateValues(); if (TgcCollisionUtils.testSphereCylinder(collisionableSphere, collider)) collisionableSphere.setRenderColor(collisionColor); else collisionableSphere.setRenderColor(noCollisionColor); if (pickingTimeLeft > 0) pickingTimeLeft -= elapsedTime; else collider.setRenderColor(noCollisionColor); if (GuiController.Instance.D3dInput.buttonPressed(TgcViewer.Utils.Input.TgcD3dInput.MouseButtons.BUTTON_LEFT)) { TgcPickingRay pickingRay = new TgcPickingRay(); pickingRay.updateRay(); if (TgcCollisionUtils.testRayCylinder(pickingRay.Ray, collider)) { pickingTimeLeft = PICKING_TIME; collider.setRenderColor(pickingColor); } } collider.render(); collisionableSphere.render(); }