public void renderizarBarco(AlumnoEjemplos.BarbaAlpha.Barco.Barco barco, float elapsedTime) { barco.actualizarPosicionAnterior(); plano = obtenerPlano(barco); setearVariablesBarcoShader(plano, barco.posicion(), effect); /* * calculos para la aceeracion del barco segun la inclinacion * de la ola. * * sentidoBarco = barco.getSentido(); prodInterno = Vector3.Dot(plano.normal, sentidoBarco); cosAngulo = prodInterno; barco.aumentarAceleracionPorInclinacion(cosAngulo);*/ barco.render(elapsedTime); }
public override void init() { //Device de DirectX para crear primitivas d3dDevice = GuiController.Instance.D3dDevice; TgcSceneLoader loader = new TgcSceneLoader(); //cargamos los meshes de los barcos barcoJugador = new BarcoJugador(new Vector3(0, 0, 0), this, GuiController.Instance.ExamplesMediaDir + "MeshCreator\\Meshes\\Vehiculos\\Canoa\\Canoa-TgcScene.xml"); barcoIA = new BarcoIA(new Vector3(200, 0, 0), this, GuiController.Instance.ExamplesMediaDir + "MeshCreator\\Meshes\\Vehiculos\\Canoa\\Canoa-TgcScene.xml"); string shaderFolder = GuiController.Instance.AlumnoEjemplosMediaDir +"\\shaders"; time = 0; scaleXZ = 20f; scaleY = 1.3f; //cargamos el efecto que le vamos a aplicar a los meshes effect = TgcShaders.loadEffect(shaderFolder + "\\shaderLoco.fx"); heightmap = GuiController.Instance.AlumnoEjemplosMediaDir + "Heightmap\\" + "heightmap500.jpg"; textura = GuiController.Instance.ExamplesMediaDir + "MeshCreator\\Textures\\Liquidos" + "\\water_flow.jpg"; //cargamos el terreno terreno = new TgcSimpleTerrain(); terreno.loadHeightmap(heightmap, scaleXZ, scaleY, new Vector3(0, 0, 0)); terreno.loadTexture(textura); terreno.Effect = effect; terreno.Technique = "LightScene"; // Creo SkyBox string texturesPath = GuiController.Instance.ExamplesMediaDir + "Texturas\\Quake\\SkyBox LostAtSeaDay\\"; string skyboxFolder = GuiController.Instance.AlumnoEjemplosMediaDir + "skybox\\"; skyBox = new TgcSkyBox(); skyBox.Center = new Vector3(0, 0, 0); skyBox.Size = new Vector3(8000, 8000, 8000); skyBox.setFaceTexture(TgcSkyBox.SkyFaces.Up, skyboxFolder + "skyboxArriba.jpg"); skyBox.setFaceTexture(TgcSkyBox.SkyFaces.Down, skyboxFolder + "skyboxAbajo.jpg"); skyBox.setFaceTexture(TgcSkyBox.SkyFaces.Left, skyboxFolder + "skybox2.jpg"); skyBox.setFaceTexture(TgcSkyBox.SkyFaces.Right, skyboxFolder + "skybox2.jpg"); skyBox.setFaceTexture(TgcSkyBox.SkyFaces.Front, skyboxFolder + "skybox1.jpg"); skyBox.setFaceTexture(TgcSkyBox.SkyFaces.Back, skyboxFolder + "skybox2.jpg"); skyBox.SkyEpsilon = 50f; skyBox.updateValues(); barcoJugador.setEnemy(barcoIA); barcoJugador.setEffect(effect); barcoJugador.setTechnique("HeightScene"); barcoIA.setEnemy(barcoJugador); barcoIA.setEffect(effect); barcoIA.setTechnique("HeightScene"); barcoJugador.cargarCaniones(); barcoIA.cargarCaniones(); mediaAlturaBarco = barcoJugador.BoundingBox().calculateAxisRadius().Y; effect.SetValue("mediaAlturaBarco", mediaAlturaBarco); GuiController.Instance.Modifiers.addFloat("alturaOlas", 5f, 30f, 10f); GuiController.Instance.Modifiers.addFloat("frecuenciaOlas", 50f, 300f, 100f); GuiController.Instance.Modifiers.addBoolean("mostrar_lluvia", "Mostrar Lluvia", false); vecAux = new Vector3(0, 0, 0); ortogonal = new Vector3(0, 0, 0); sol = new Sol(effect); planoSubyacente = new Plano(); normalPlano = new Vector3(0, 0, 0); terminar = false; nube = new Nube(1000); //Centrar camara rotacional respecto a la canoa GuiController.Instance.ThirdPersonCamera.Enable = true; GuiController.Instance.ThirdPersonCamera.setCamera(barcoJugador.posicion(), 500, 600); GuiController.Instance.ThirdPersonCamera.updateCamera(); }
public void setearVariablesBarcoShader(Plano plano, Vector3 posicionBarco, Microsoft.DirectX.Direct3D.Effect efecto) { efecto.SetValue("A", plano.normal.X); efecto.SetValue("B", plano.normal.Y); efecto.SetValue("C", plano.normal.Z); efecto.SetValue("xEnElPlano", plano.punto.X); efecto.SetValue("yEnElPlano", plano.punto.Y); efecto.SetValue("zEnElPlano", plano.punto.Z); efecto.SetValue("offsetX", posicionBarco.X); efecto.SetValue("offsetZ", posicionBarco.Z); efecto.SetValue("offsetY", posicionBarco.Y); }