private void Doblar(float v) { anguloFinal -= v * elapsedTime; angOrientacionMesh = angOrientacionMesh + v * elapsedTime; matrixRotacion = Matrix.RotationY(angOrientacionMesh); obb.rotate(new Vector3(0, v * 1f * elapsedTime, 0)); }
public void Doblar(float d) { float lado = d; lado = lado * Velocidad; angOrientacionMesh += lado * 1f * GameModel.ElapsedTime; //ahora ya tengo para el lado en el que voy a girar y la intensidad del giro, entonces giro el auto. CamaraAuto.rotateY(-lado * 1f * GameModel.ElapsedTime); anguloFinal = anguloFinal - lado * 1f * GameModel.ElapsedTime; matrixRotacion = Matrix.RotationY(anguloFinal); obb.rotate(new Vector3(0, -lado * 1f * GameModel.ElapsedTime, 0)); }
public override void Init() { var loader = new TgcSceneLoader(); var scene = loader.loadSceneFromFile(MediaDir + "MeshCreator\\Meshes\\Vehiculos\\Patrullero\\Patrullero-TgcScene.xml"); mesh = scene.Meshes[0]; mesh.Scale = new Vector3(0.25f, 0.25f, 0.25f); //Cuerpo principal que se controla con el teclado //mesh = TgcBox.fromSize(new Vector3(0, 10, 0), new Vector3(10, 10, 10), Color.Blue).toMesh("box"); //triangulo triangle = new CustomVertex.PositionColored[3]; triangle[0] = new CustomVertex.PositionColored(-100, 0, 0, Color.Green.ToArgb()); triangle[1] = new CustomVertex.PositionColored(0, 0, 50, Color.Green.ToArgb()); triangle[2] = new CustomVertex.PositionColored(0, 100, 0, Color.Green.ToArgb()); triagleAABB = TgcBoundingAxisAlignBox.computeFromPoints(new[] { 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 boundingSphere = new TgcBoundingSphere(new Vector3(30, 20, -20), 15); //OBB: computar OBB a partir del AABB del mesh. meshObb = loader.loadSceneFromFile(MediaDir + "MeshCreator\\Meshes\\Objetos\\Catapulta\\Catapulta-TgcScene.xml") .Meshes[0]; meshObb.Scale = new Vector3(0.1f, 0.1f, 0.1f); meshObb.Position = new Vector3(100, 0, 30); meshObb.updateBoundingBox(); //Computar OBB a partir del AABB del mesh. Inicialmente genera el mismo volumen que el AABB, pero luego te permite rotarlo (cosa que el AABB no puede) obb = TgcBoundingOrientedBox.computeFromAABB(meshObb.BoundingBox); //Otra alternativa es computar OBB a partir de sus vertices. Esto genera un OBB lo mas apretado posible pero es una operacion costosa //obb = TgcBoundingOrientedBox.computeFromPoints(mesh.getVertexPositions()); //Rotar mesh y rotar OBB. A diferencia del AABB, nosotros tenemos que mantener el OBB actualizado segun cada movimiento del mesh meshObb.Rotation = new Vector3(0, FastMath.PI / 4, 0); //Los obb tienen una especie de autotransform aun. obb.rotate(new Vector3(0, FastMath.PI / 4, 0)); //Configurar camara en Tercer Persona camaraInterna = new TgcThirdPersonCamera(mesh.Position, 30, -75); Camara = camaraInterna; }