public void rotar(TgcMesh zombie, Vector3 posPersonaje, Vector3 posEnemigo) { Vector3 vec = posEnemigo - posPersonaje; double anguloFinal = Math.Atan2(vec.X, vec.Z); zombie.rotateY(-zombie.Rotation.Y); zombie.rotateY((float)anguloFinal); }
public void vistaDelPersonaje(Vector3 posicionPersonaje) { Vector3 vec = getVectorHaciaPersonaje(posicionPersonaje); double anguloFinal = Math.Atan2(vec.X, vec.Z); bala.rotateY(-bala.Rotation.Y); bala.rotateY((float)anguloFinal); bala.rotateY((float)Math.PI); bala.rotateY((float)Geometry.DegreeToRadian(-10)); }
public void girarIzquierda(bool generoPath) { moto.moveOrientedY(35); var rotAngle = FastMath.ToRad(-90); moto.rotateY(rotAngle); if (generoPath) { pathlight.agregarSegmento(moto.Position); } moto.moveOrientedY(-35); rotar(-1); }
public override void Render() { PreRender(); //Obtener rotacion de mesh (pasar a radianes) var rotation = FastMath.ToRad((float)Modifiers["rotation"]); //Rotar mesh y rotar OBB. A diferencia del AABB, nosotros tenemos que mantener el OBB actualizado segun cada movimiento del mesh var lastRot = mesh.Rotation; var rotationDiff = rotation - lastRot.Y; mesh.rotateY(rotationDiff); obb.rotate(new Vector3(0, rotationDiff, 0)); //Actualizar posicion var position = (Vector3)Modifiers["position"]; var lastPos = mesh.Position; var posDiff = position - lastPos; mesh.move(posDiff); obb.move(posDiff); //Renderizar modelo mesh.render(); //Renderizar obb obb.render(); PostRender(); }
public void init(Vector3 posicion, Vector3 direccion, String escena, Tipo tipo) { this.direccion = direccion; string alumnoMediaFolder = GuiController.Instance.AlumnoEjemplosDir; var loader = new TgcSceneLoader(); mesh = loader.loadSceneFromFile(alumnoMediaFolder + "CucarachaJugosita\\Media\\" + escena).Meshes[0]; mesh.Position = posicion; mesh.AlphaBlendEnable = true; Vector3 direc = direccion - posicion; direc.Y = 0; direc.Normalize(); mesh.rotateY((float)Math.Atan2(direc.X, direc.Z) - mesh.Rotation.Y - Geometry.DegreeToRadian(180f)); text2 = new TgcText2d(); text2.Text = ""; text2.Color = Color.DarkRed; text2.Align = TgcText2d.TextAlign.CENTER; text2.Size = new Size(300, 100); Size screenSize = GuiController.Instance.Panel3d.Size; text2.Position = new Point(screenSize.Width / 2 - text2.Size.Width / 2, screenSize.Height * 6 / 10); text2.changeFont(new System.Drawing.Font("Chiller", /*30*/ GuiController.Instance.D3dDevice.PresentationParameters.BackBufferWidth / 45, FontStyle.Regular)); this.tipo = tipo; }
public override void Init() { //El framework posee la clase TgcSceneLoader que permite cargar modelos 3D. //Estos modelos 3D están almacenados en un archivo XML llamado TgcScene.xml. //Este archivo es un formato a medida hecho para el framework. Y puede ser creado desde herramientas de //diseño como 3Ds MAX (exportando a traves de un plugin) o con el editor MeshCreator que viene con el framework. //El framework viene con varios modelos 3D incluidos en la carpeta: TgcViewer\Examples\Media\MeshCreator\Meshes. //El formato especifica una escena, representada por la clase TgcScene. Una escena puede estar compuesta por varios //modelos 3D. Cada modelo se representa con la clase TgcMesh. //En este ejemplo vamos a cargar una escena con un único modelo. var loader = new TgcSceneLoader(); //De toda la escena solo nos interesa guardarnos el primer modelo (el único que hay en este caso). mesh = loader.loadSceneFromFile(MediaDir + "MeshCreator\\Meshes\\Vehiculos\\Hummer\\Hummer-TgcScene.xml").Meshes[0]; mesh.AutoTransformEnable = true; mesh.rotateY(FastMath.QUARTER_PI); mesh.move(new Vector3(100, 40, -200)); //mesh.Transform = Matrix.RotationY(FastMath.QUARTER_PI) * Matrix.Translation(100,40,-200); //En este ejemplo no cargamos un solo modelo 3D sino una escena completa, compuesta por varios modelos. //El framework posee varias escenas ya hechas en la carpeta TgcViewer\Examples\Media\MeshCreator\Scenes. scene = loader.loadSceneFromFile(MediaDir + "MeshCreator\\Scenes\\Iglesia\\Iglesia-TgcScene.xml"); //Hacemos que la cámara esté centrada sobre el mesh. Camara = new TgcRotationalCamera(mesh.BoundingBox.calculateBoxCenter(), mesh.BoundingBox.calculateBoxRadius() * 2, Input); }
public override void Render() { //BackgroundColor D3DDevice.Instance.Device.Clear(ClearFlags.Target | ClearFlags.ZBuffer, Color.Black, 1.0f, 0); D3DDevice.Instance.Device.BeginScene(); ClearTextures(); //Cargar variables shader mesh.Effect.SetValue("ambientColor", ColorValue.FromColor(Color.Gray)); mesh.Effect.SetValue("diffuseColor", ColorValue.FromColor(Color.LightBlue)); mesh.Effect.SetValue("specularColor", ColorValue.FromColor(Color.White)); mesh.Effect.SetValue("specularExp", 10f); mesh.Effect.SetValue("lightPosition", lightPos); mesh.Effect.SetValue("eyePosition", TgcParserUtils.vector3ToFloat4Array(Camara.Position)); mesh.rotateY(-ElapsedTime / 2); mesh.render(); textHelp.render(); //Help if (Input.keyPressed(Key.H)) { helpForm.ShowDialog(); } PostRender(); }
public override void render(float elapsedTime) { Device d3dDevice = GuiController.Instance.D3dDevice; //Obtener rotacion de mesh (pasar a radianes) float rotation = FastMath.ToRad((float)GuiController.Instance.Modifiers["rotation"]); //Rotar mesh y rotar OBB. A diferencia del AABB, nosotros tenemos que mantener el OBB actualizado segun cada movimiento del mesh Vector3 lastRot = mesh.Rotation; float rotationDiff = rotation - lastRot.Y; mesh.rotateY(rotationDiff); obb.rotate(new Vector3(0, rotationDiff, 0)); //Actualizar posicion Vector3 position = (Vector3)GuiController.Instance.Modifiers["position"]; Vector3 lastPos = mesh.Position; Vector3 posDiff = position - lastPos; mesh.move(posDiff); obb.move(posDiff); //Renderizar modelo mesh.render(); //Renderizar obb obb.render(); }
override public void render(float elapsedTime) { var matrizView = GuiController.Instance.D3dDevice.Transform.View; if (bandera == false) { meshLR.rotateY(2f * elapsedTime); //meshLR.render(); } }
public void rotateY(float angulo) { meshP.rotateY(angulo); meshC1.rotateY(angulo); meshC2.rotateY(angulo); meshC3.rotateY(angulo); meshP.BoundingBox.transform(meshP.Transform); meshC1.BoundingBox.transform(meshC1.Transform); meshC2.BoundingBox.transform(meshC2.Transform); meshC3.BoundingBox.transform(meshC3.Transform); }
public ElementoMapa(String escena, Vector3 posicion, Vector3 direccion) { var loader = new TgcSceneLoader(); string alumnoMediaFolder = GuiController.Instance.AlumnoEjemplosDir; this.escena = loader.loadSceneFromFile(alumnoMediaFolder + "CucarachaJugosita\\Media\\" + escena); mesh = this.escena.Meshes[0]; mesh.Position = posicion; Vector3 direc = direccion - posicion; direc.Y = 0; direc.Normalize(); mesh.rotateY((float)Math.Atan2(direc.X, direc.Z) - mesh.Rotation.Y - Geometry.DegreeToRadian(180f)); }
public void moverPuerta() { float elapsedTime = GuiController.Instance.ElapsedTime; if (estado == Estado.Abierta && !abiertaJugador) { contadorAbierta -= 80f * elapsedTime; } if (contadorAbierta < 0f) { contadorAbierta = 500f; estado = Estado.Cerrado; } if (contador < 90 && estado == Estado.Abierta) { meshP.rotateY(Geometry.DegreeToRadian(-1f)); contador++; } if (contador > 0 && estado == Estado.Cerrado) { meshP.rotateY(Geometry.DegreeToRadian(1f)); contador--; } }
public void render(float elapsedTime) { var matrizView = GuiController.Instance.D3dDevice.Transform.View; if (bandera == false) { meshTrofeo.render(); } else { meshTrofeo.rotateY(elapsedTime * velocidad); velocidad = velocidad + (2 * elapsedTime); meshTrofeo.move(new Vector3(0, 0.001f * velocidad, 0)); meshTrofeo.render(); } meshMesa.render(); }
public void Init() { this.Posicion = new Vector3(0f, 0f, 0f); Inventario = new List <ObjetoInventario>(); var fruta = new ObjetoInventario { objeto = new Fruta(), cantidad = 0 }; Inventario.Add(fruta); var agua = new ObjetoInventario { objeto = new Agua(), cantidad = 0 }; Inventario.Add(agua); var madera = new ObjetoInventario { objeto = new Madera(), cantidad = 0 }; Inventario.Add(madera); var piedra = new ObjetoInventario { objeto = new Piedra(), cantidad = 0 }; Inventario.Add(piedra); // Creo la Espera que envuelve al personaje para detectar colisiones BoundingSphere = new TgcBoundingSphere(new Vector3(this.Posicion.X * env.terreno.SceneScaleXZ, env.terreno.CalcularAlturaTerreno(this.Posicion.X, this.Posicion.Z) * env.terreno.SceneScaleY + 10, this.Posicion.Z * env.terreno.SceneScaleXZ), 0.1f); BoundingSphere.setRenderColor(Color.Yellow); // Creo el Hacha del Personaje hachaPersonaje = loader.loadSceneFromFile(env.MediaDir + "hacha\\Hacha-TgcScene.xml").Meshes[0]; hachaPersonaje.Position = new Vector3(12 * env.terreno.SceneScaleXZ, env.terreno.CalcularAlturaTerreno(12, 22) * env.terreno.SceneScaleY, 22 * env.terreno.SceneScaleXZ); hachaPersonaje.AlphaBlendEnable = true; hachaPersonaje.Scale = new Vector3(0.05f, 0.05f, 0.05f); hachaPersonaje.rotateY(FastMath.PI_HALF); }
public override void render(float elapsedTime) { Device d3dDevice = GuiController.Instance.D3dDevice; //Cargar variables shader mesh.Effect.SetValue("ambientColor", ColorValue.FromColor(Color.Gray)); mesh.Effect.SetValue("diffuseColor", ColorValue.FromColor(Color.LightBlue)); mesh.Effect.SetValue("specularColor", ColorValue.FromColor(Color.White)); mesh.Effect.SetValue("specularExp", 10f); mesh.Effect.SetValue("lightPosition", lightPos); mesh.Effect.SetValue("eyePosition", TgcParserUtils.vector3ToFloat4Array(GuiController.Instance.FpsCamera.getPosition())); mesh.rotateY(-elapsedTime / 2); mesh.render(); textHelp.render(); //Help if (GuiController.Instance.D3dInput.keyPressed(Microsoft.DirectX.DirectInput.Key.H)) { helpForm.ShowDialog(GuiController.Instance.MainForm); } }
public override void render(float elapsedTime) { Microsoft.DirectX.Direct3D.Device d3dDevice = GuiController.Instance.D3dDevice; //Calcular proxima posicion de personaje segun Input float moveForward = 0f; float rotate = 0; TgcD3dInput d3dInput = GuiController.Instance.D3dInput; bool moving = false; bool rotating = false; //Adelante if (d3dInput.keyDown(Key.W)) { moveForward = -VELODICAD_CAMINAR; moving = true; } //Atras if (d3dInput.keyDown(Key.S)) { moveForward = VELODICAD_CAMINAR; moving = true; } //Derecha if (d3dInput.keyDown(Key.D)) { rotate = VELOCIDAD_ROTACION; rotating = true; } //Izquierda if (d3dInput.keyDown(Key.A)) { rotate = -VELOCIDAD_ROTACION; rotating = true; } //Si hubo rotacion if (rotating) { //Rotar personaje y la camara, hay que multiplicarlo por el tiempo transcurrido para no atarse a la velocidad el hardware float rotAngle = Geometry.DegreeToRadian(rotate * elapsedTime); personaje.rotateY(rotAngle); GuiController.Instance.ThirdPersonCamera.rotateY(rotAngle); } //Si hubo desplazamiento if (moving) { //Aplicar movimiento hacia adelante o atras segun la orientacion actual del Mesh Vector3 lastPos = personaje.Position; personaje.moveOrientedY(moveForward * elapsedTime); //Detectar colisiones bool collide = false; foreach (TgcBox obstaculo in obstaculos) { TgcCollisionUtils.BoxBoxResult result = TgcCollisionUtils.classifyBoxBox(personaje.BoundingBox, obstaculo.BoundingBox); if (result == TgcCollisionUtils.BoxBoxResult.Adentro || result == TgcCollisionUtils.BoxBoxResult.Atravesando) { collide = true; break; } } //Si hubo colision, restaurar la posicion anterior if (collide) { personaje.Position = lastPos; } } //Hacer que la camara siga al personaje en su nueva posicion GuiController.Instance.ThirdPersonCamera.Target = personaje.Position; //Render piso piso.render(); //Render obstaculos foreach (TgcBox obstaculo in obstaculos) { obstaculo.render(); } //Render personaje personaje.render(); }
public override void render(float elapsedTime) { #region Controller Microsoft.DirectX.Direct3D.Device d3dDevice = GuiController.Instance.D3dDevice; #endregion #region Transformaciones //nave.Transform = Matrix.Scaling(NAVE_SCALE) * Matrix.Translation(0, 9000, 0); //nave.Transform = Matrix.Translation(0, 500, 0); //nave.Transform = Matrix.Scaling(NAVE_SCALE); #endregion #region Movimiento y Rotacion bool moving = false; bool rotating = false; float moveForward = 0f; float rotate = 0; TgcD3dInput input = GuiController.Instance.D3dInput; //Vector3 movement = new Vector3(0, 0, 0); if (input.keyDown(Key.Left) || input.keyDown(Key.A)) { rotate = -NAVE_ROTATION_SPEED; rotating = true; } else if (input.keyDown(Key.Right) || input.keyDown(Key.D)) { rotate = NAVE_ROTATION_SPEED; rotating = true; } if (input.keyDown(Key.Up) || input.keyDown(Key.W)) { moveForward = -NAVE_MOVEMENT_SPEED; moving = true; } else if (input.keyDown(Key.Down) || input.keyDown(Key.S)) { moveForward = NAVE_MOVEMENT_SPEED; moving = true; } Vector3 Position_prev = nave.Position; if (rotating) { nave.rotateY(Geometry.DegreeToRadian(rotate * elapsedTime)); GuiController.Instance.ThirdPersonCamera.rotateY(Geometry.DegreeToRadian(rotate * elapsedTime)); } if (moving) { Vector3 lastPos = nave.Position; nave.moveOrientedY(moveForward * elapsedTime); } //Aplicar movimiento (VIEJO) //movement *= MOVEMENT_SPEED * elapsedTime; //nave.move(movement); bool Collision = false; foreach (TgcMesh planeta in planetas) { TgcBoundingBox nave_BBox = nave.BoundingBox; TgcBoundingBox planeta_BBox = planeta.BoundingBox; TgcCollisionUtils.BoxBoxResult Collision_Type = TgcCollisionUtils.classifyBoxBox(nave_BBox, planeta_BBox); if (Collision_Type != TgcCollisionUtils.BoxBoxResult.Afuera) { Collision = true; break; } } if (Collision) { ; } #endregion #region Camara GuiController.Instance.ThirdPersonCamera.Target = nave.Position; #endregion #region Render nave.render(); for (int i = 0; i < 10; i++) { planetas[i].render(); } //universo.renderAll(); nave.BoundingBox.render(); foreach (TgcMesh planeta in planetas) { planeta.BoundingBox.render(); } #endregion }
public override void Render() { PreRender(); //Calcular proxima posicion de personaje segun Input var moveForward = 0f; float rotate = 0; var moving = false; var rotating = false; //Adelante if (Input.keyDown(Key.W)) { moveForward = -VELODICAD_CAMINAR; moving = true; } //Atras if (Input.keyDown(Key.S)) { moveForward = VELODICAD_CAMINAR; moving = true; } //Derecha if (Input.keyDown(Key.D)) { rotate = VELOCIDAD_ROTACION; rotating = true; } //Izquierda if (Input.keyDown(Key.A)) { rotate = -VELOCIDAD_ROTACION; rotating = true; } //Si hubo rotacion if (rotating) { //Rotar personaje y la camara, hay que multiplicarlo por el tiempo transcurrido para no atarse a la velocidad el hardware var rotAngle = Geometry.DegreeToRadian(rotate * ElapsedTime); personaje.rotateY(rotAngle); camaraInterna.rotateY(rotAngle); } //Si hubo desplazamiento if (moving) { //Aplicar movimiento hacia adelante o atras segun la orientacion actual del Mesh var lastPos = personaje.Position; personaje.moveOrientedY(moveForward * ElapsedTime); //Detectar colisiones var collide = false; foreach (var obstaculo in obstaculos) { var result = TgcCollisionUtils.classifyBoxBox(personaje.BoundingBox, obstaculo.BoundingBox); if (result == TgcCollisionUtils.BoxBoxResult.Adentro || result == TgcCollisionUtils.BoxBoxResult.Atravesando) { collide = true; break; } } //Si hubo colision, restaurar la posicion anterior if (collide) { personaje.Position = lastPos; } } //Hacer que la camara siga al personaje en su nueva posicion camaraInterna.Target = personaje.Position; //Render piso piso.render(); //Render obstaculos foreach (var obstaculo in obstaculos) { obstaculo.render(); } //Render personaje personaje.render(); PostRender(); }
/// <summary> /// Renderizar toda la parte cliente, con el manejo de input /// </summary> private void renderClient() { //Calcular proxima posicion de personaje segun Input var elapsedTime = GuiController.Instance.ElapsedTime; var moveForward = 0f; float rotate = 0; var d3dInput = TgcD3dInput.Instance; var moving = false; var rotating = false; //Adelante if (d3dInput.keyDown(Key.W)) { moveForward = -VELODICAD_CAMINAR; moving = true; } //Atras if (d3dInput.keyDown(Key.S)) { moveForward = VELODICAD_CAMINAR; moving = true; } //Derecha if (d3dInput.keyDown(Key.D)) { rotate = VELOCIDAD_ROTACION; rotating = true; } //Izquierda if (d3dInput.keyDown(Key.A)) { rotate = -VELOCIDAD_ROTACION; rotating = true; } //Si hubo rotacion if (rotating) { meshPrincipal.rotateY(Geometry.DegreeToRadian(rotate * elapsedTime)); this.camara.rotateY(rotate); } //Si hubo desplazamiento if (moving) { meshPrincipal.moveOrientedY(moveForward * elapsedTime); } //Hacer que la camara siga al personaje en su nueva posicion this.camara.Target = meshPrincipal.Position; //Render piso piso.render(); //Renderizar meshPrincipal if (meshPrincipal != null) { meshPrincipal.render(); } //Renderizar otrosMeshes foreach (var entry in otrosMeshes) { entry.Value.render(); } }
public void rotateY(float grados) { mesh.rotateY(grados); }
private void crearVeredas() { cordones.Add(new TgcPlane(new Vector3(-450 + fix_posX, 5, -450 + fix_posZ), new Vector3(5900, 0, 5), TgcPlane.Orientations.XZplane, cordonTexture, 40, 1)); cordones.Add(new TgcPlane(new Vector3(-450 + fix_posX, 0, -445 + fix_posZ), new Vector3(5895, 5, 0), TgcPlane.Orientations.XYplane, cordonTexture, 40, 1)); cordones.Add(new TgcPlane(new Vector3(-500 + fix_posX, 5, -500 + fix_posZ), new Vector3(6000, 0, 50), TgcPlane.Orientations.XZplane, veredaTexture, 60, 1)); for (int i = 0; i < 30; i++) { var sceneRueda = loader.loadSceneFromFile(MediaDir + "PosteDeLuz\\Poste de luz-TgcScene.xml"); posteDeLuz = sceneRueda.Meshes[0]; posteDeLuz.AutoTransformEnable = true; posteDeLuz.Position = new Vector3(-455 + (i * (5900 / 30)) + fix_posX, 5, -450 + fix_posZ); posteDeLuz.rotateY(FastMath.PI_HALF); posteDeLuz.Scale = new Vector3(1, 3, 1); posteDeLuz.move(0, 50, 0); posteDeLuz.BoundingBox.transform(Matrix.Scaling(new Vector3(0.1f, 3, 0.1f)) * Matrix.Translation(new Vector3(posteDeLuz.Position.X, posteDeLuz.Position.Y, posteDeLuz.Position.Z - 33))); meshes.Add(posteDeLuz); LpostesDeLuz.Add(posteDeLuz); } cordones.Add(new TgcPlane(new Vector3(-450 + fix_posX, 5, -445 + fix_posZ), new Vector3(5, 0, 5890), TgcPlane.Orientations.XZplane, cordonTexture, 1, 40)); cordones.Add(new TgcPlane(new Vector3(-445 + fix_posX, 0, -445 + fix_posZ), new Vector3(0, 5, 5890), TgcPlane.Orientations.YZplane, cordonTexture, 1, 40)); cordones.Add(new TgcPlane(new Vector3(-500 + fix_posX, 5, -450 + fix_posZ), new Vector3(50, 0, 5950), TgcPlane.Orientations.XZplane, veredaTexture, 1, 60)); for (int i = 0; i < 30; i++) { var sceneRueda = loader.loadSceneFromFile(MediaDir + "PosteDeLuz\\Poste de luz-TgcScene.xml"); posteDeLuz = sceneRueda.Meshes[0]; posteDeLuz.AutoTransformEnable = true; posteDeLuz.Position = new Vector3(-455 + fix_posX, 5, -450 + (i * (5900 / 30)) + fix_posZ); posteDeLuz.rotateY(FastMath.PI); posteDeLuz.Scale = new Vector3(1, 3, 1); posteDeLuz.move(0, 50, 0); posteDeLuz.BoundingBox.transform(Matrix.Scaling(new Vector3(0.1f, 3, 0.1f)) * Matrix.Translation(new Vector3(posteDeLuz.Position.X - 33, posteDeLuz.Position.Y, posteDeLuz.Position.Z))); meshes.Add(posteDeLuz); LpostesDeLuz.Add(posteDeLuz); } cordones.Add(new TgcPlane(new Vector3(-450 + fix_posX, 5, 5445 + fix_posZ), new Vector3(5900, 0, 5), TgcPlane.Orientations.XZplane, cordonTexture, 40, 1)); cordones.Add(new TgcPlane(new Vector3(-450 + fix_posX, 0, 5445 + fix_posZ), new Vector3(5900, 5, 0), TgcPlane.Orientations.XYplane, cordonTexture, 40, 1)); cordones.Add(new TgcPlane(new Vector3(-450 + fix_posX, 5, 5500 + fix_posZ), new Vector3(5950, 0, -50), TgcPlane.Orientations.XZplane, veredaTexture, 60, 1)); for (int i = 0; i < 30; i++) { var sceneRueda = loader.loadSceneFromFile(MediaDir + "PosteDeLuz\\Poste de luz-TgcScene.xml"); posteDeLuz = sceneRueda.Meshes[0]; posteDeLuz.AutoTransformEnable = true; posteDeLuz.Position = new Vector3(-455 + (i * (5900 / 30)) + fix_posX, 5, 5445 + fix_posZ); posteDeLuz.rotateY(FastMath.PI + FastMath.PI_HALF); posteDeLuz.Scale = new Vector3(1, 3, 1); posteDeLuz.move(0, 50, 0); posteDeLuz.BoundingBox.transform(Matrix.Scaling(new Vector3(0.1f, 3, 0.1f)) * Matrix.Translation(new Vector3(posteDeLuz.Position.X, posteDeLuz.Position.Y, posteDeLuz.Position.Z + 33))); meshes.Add(posteDeLuz); LpostesDeLuz.Add(posteDeLuz); } cordones.Add(new TgcPlane(new Vector3(5445 + fix_posX, 5, -445 + fix_posZ), new Vector3(5, 0, 5890), TgcPlane.Orientations.XZplane, cordonTexture, 1, 40)); cordones.Add(new TgcPlane(new Vector3(5445 + fix_posX, 0, -445 + fix_posZ), new Vector3(0, 5, 5890), TgcPlane.Orientations.YZplane, cordonTexture, 1, 40)); cordones.Add(new TgcPlane(new Vector3(5450 + fix_posX, 5, -450 + fix_posZ), new Vector3(50, 0, 5900), TgcPlane.Orientations.XZplane, veredaTexture, 1, 60)); for (int i = 0; i < 30; i++) { var sceneRueda = loader.loadSceneFromFile(MediaDir + "PosteDeLuz\\Poste de luz-TgcScene.xml"); posteDeLuz = sceneRueda.Meshes[0]; posteDeLuz.AutoTransformEnable = true; posteDeLuz.Position = new Vector3(5445 + fix_posX, 5, -450 + (i * (5900 / 30)) + fix_posZ); posteDeLuz.rotateY(FastMath.TWO_PI); posteDeLuz.Scale = new Vector3(1, 3, 1); posteDeLuz.move(0, 50, 0); posteDeLuz.BoundingBox.transform(Matrix.Scaling(new Vector3(0.1f, 3, 0.1f)) * Matrix.Translation(new Vector3(posteDeLuz.Position.X + 33, posteDeLuz.Position.Y, posteDeLuz.Position.Z))); meshes.Add(posteDeLuz); LpostesDeLuz.Add(posteDeLuz); } }