#include "dxstdafx.h" #include "./Ocean.h" #include "NxPhysics.h" Ocean::Ocean(void):Node() { this->nodeType |= GameScene::NODE_OCEAN; } void Ocean::generateOcean(float deepC [4], float shallowC [4]) { //load effect loadEffect(deepC, shallowC); Object3d *p = (Object3d *) this->myScene->createNode(this->myScene->NODE_OBJECT3D, *this->myScene->getRoot(), false); p->loadMeshFromFile("./media/models/plane3.x"); // create renderer SPTR renderer(new OceanRenderer); renderer->setScene(*this->myScene); OceanRenderer *temp = (OceanRenderer*)renderer.get(); temp->setEffect(this->OceanEffect); this->myScene->connectNodeAndRenderer(*p, renderer); //set mesh position p->setPosition(this->myScene->getWidth()/2, 0.0f, this->myScene->getDepth()/2); } Ocean::~Ocean(void) { //OceanEffect->Release(); } void Ocean::setTextures(std::string texture0, std::string texture1, std::string watermap) { this->texture0 = texture0; this->texture1 = texture1; this->watermap = watermap; } void Ocean::loadEffect(float *deepC, float *shallowC) { this->OceanEffect = this->myScene->manager->getEffect(GameManager::EFFECT_OCEAN); if(!this->OceanEffect) { this->OceanEffect = this->myScene->manager->loadEffect(GameManager::EFFECT_OCEAN, L"shaders/Ocean.obj"); } TexHandleWaves = OceanEffect->GetParameterByName(0, "normalMap"); TexHandleCubemap = OceanEffect->GetParameterByName(0, "cubeMap"); TexHandleTerrain = OceanEffect->GetParameterByName(0, "terrainTex"); IDirect3DTexture9* tex = 0; tex = this->myScene->manager->resManager.loadTexture(this->texture0); OceanEffect->SetTexture(TexHandleWaves, tex); tex = 0; tex = this->myScene->manager->resManager.loadTexture(this->texture1); OceanEffect->SetTexture(TexHandleCubemap, tex); tex = 0; tex = this->myScene->manager->resManager.loadTexture(this->watermap); OceanEffect->SetTexture(TexHandleTerrain, tex); ShallowColorHandle = OceanEffect->GetParameterByName(0, "shallowColor"); OceanEffect->SetFloatArray(ShallowColorHandle, shallowC, 4); DeepColorHandle = OceanEffect->GetParameterByName(0, "deepColor"); OceanEffect->SetFloatArray(DeepColorHandle, deepC, 4); DimensionHandle = OceanEffect->GetParameterByName(0, "fSceneDimensions"); float fDimension[3]; fDimension[0] = myScene->getWidth(); fDimension[1] = myScene->getHeight(); fDimension[2] = myScene->getDepth(); OceanEffect->SetFloatArray(DimensionHandle, fDimension, 3); }