1 | #include "dxstdafx.h"
|
---|
2 | #include "./Ocean.h"
|
---|
3 | #include "NxPhysics.h"
|
---|
4 |
|
---|
5 | Ocean::Ocean(void):Node() {
|
---|
6 | this->nodeType |= GameScene::NODE_OCEAN;
|
---|
7 | }
|
---|
8 |
|
---|
9 | void Ocean::generateOcean(float deepC [4], float shallowC [4])
|
---|
10 | {
|
---|
11 | //load effect
|
---|
12 | loadEffect(deepC, shallowC);
|
---|
13 |
|
---|
14 | Object3d *p = (Object3d *) this->myScene->createNode(this->myScene->NODE_OBJECT3D, *this->myScene->getRoot(), false);
|
---|
15 | p->loadMeshFromFile("./media/models/plane3.x");
|
---|
16 |
|
---|
17 | // create renderer
|
---|
18 |
|
---|
19 | SPTR<Renderer> renderer(new OceanRenderer);
|
---|
20 | renderer->setScene(*this->myScene);
|
---|
21 | OceanRenderer *temp = (OceanRenderer*)renderer.get();
|
---|
22 | temp->setEffect(this->OceanEffect);
|
---|
23 | this->myScene->connectNodeAndRenderer(*p, renderer);
|
---|
24 |
|
---|
25 | //set mesh position
|
---|
26 | p->setPosition(this->myScene->getWidth()/2, 0.0f, this->myScene->getDepth()/2);
|
---|
27 | }
|
---|
28 |
|
---|
29 | Ocean::~Ocean(void)
|
---|
30 | {
|
---|
31 |
|
---|
32 | //OceanEffect->Release();
|
---|
33 | }
|
---|
34 |
|
---|
35 | void Ocean::setTextures(std::string texture0, std::string texture1, std::string watermap) {
|
---|
36 | this->texture0 = texture0;
|
---|
37 | this->texture1 = texture1;
|
---|
38 | this->watermap = watermap;
|
---|
39 | }
|
---|
40 |
|
---|
41 | void Ocean::loadEffect(float *deepC, float *shallowC) {
|
---|
42 | this->OceanEffect = this->myScene->manager->getEffect(GameManager::EFFECT_OCEAN);
|
---|
43 | if(!this->OceanEffect) {
|
---|
44 | this->OceanEffect = this->myScene->manager->loadEffect(GameManager::EFFECT_OCEAN, L"shaders/Ocean.obj");
|
---|
45 | }
|
---|
46 |
|
---|
47 | TexHandleWaves = OceanEffect->GetParameterByName(0, "normalMap");
|
---|
48 | TexHandleCubemap = OceanEffect->GetParameterByName(0, "cubeMap");
|
---|
49 | TexHandleTerrain = OceanEffect->GetParameterByName(0, "terrainTex");
|
---|
50 |
|
---|
51 | IDirect3DTexture9* tex = 0;
|
---|
52 | tex = this->myScene->manager->resManager.loadTexture(this->texture0);
|
---|
53 | OceanEffect->SetTexture(TexHandleWaves, tex);
|
---|
54 |
|
---|
55 | tex = 0;
|
---|
56 | tex = this->myScene->manager->resManager.loadTexture(this->texture1);
|
---|
57 | OceanEffect->SetTexture(TexHandleCubemap, tex);
|
---|
58 |
|
---|
59 | tex = 0;
|
---|
60 | tex = this->myScene->manager->resManager.loadTexture(this->watermap);
|
---|
61 | OceanEffect->SetTexture(TexHandleTerrain, tex);
|
---|
62 |
|
---|
63 | ShallowColorHandle = OceanEffect->GetParameterByName(0, "shallowColor");
|
---|
64 | OceanEffect->SetFloatArray(ShallowColorHandle, shallowC, 4);
|
---|
65 |
|
---|
66 | DeepColorHandle = OceanEffect->GetParameterByName(0, "deepColor");
|
---|
67 | OceanEffect->SetFloatArray(DeepColorHandle, deepC, 4);
|
---|
68 |
|
---|
69 | DimensionHandle = OceanEffect->GetParameterByName(0, "fSceneDimensions");
|
---|
70 | float fDimension[3];
|
---|
71 | fDimension[0] = myScene->getWidth();
|
---|
72 | fDimension[1] = myScene->getHeight();
|
---|
73 | fDimension[2] = myScene->getDepth();
|
---|
74 | OceanEffect->SetFloatArray(DimensionHandle, fDimension, 3);
|
---|
75 | }
|
---|
76 |
|
---|
77 |
|
---|