[2197] | 1 | #include "dxstdafx.h"
|
---|
| 2 | #include ".\prmrenderstrategy.h"
|
---|
| 3 |
|
---|
| 4 | PRMRenderStrategy::PRMRenderStrategy(PathMapEffect* pathMapEffect, Radion* radion)
|
---|
| 5 | :RenderStrategy(pathMapEffect)
|
---|
| 6 | {
|
---|
| 7 | this->radion = radion;
|
---|
| 8 | }
|
---|
| 9 |
|
---|
| 10 | void PRMRenderStrategy::applyTargets()
|
---|
| 11 | {
|
---|
| 12 | }
|
---|
| 13 |
|
---|
| 14 | void PRMRenderStrategy::applyRenderState()
|
---|
| 15 | {
|
---|
| 16 | LPDIRECT3DDEVICE9 device = pathMapEffect->device;
|
---|
| 17 | // blend-add contribution of virtual light source to PRM
|
---|
| 18 | device->SetRenderTarget(0, prmSurface);
|
---|
| 19 | device->SetDepthStencilSurface(NULL);
|
---|
| 20 | device->SetViewport(&vp);
|
---|
| 21 | device->SetRenderState(D3DRS_CULLMODE, D3DCULL_NONE);
|
---|
| 22 | device->SetRenderState(D3DRS_ALPHABLENDENABLE, true);
|
---|
| 23 | device->SetRenderState(D3DRS_SRCBLEND, D3DBLEND_ONE);
|
---|
| 24 | device->SetRenderState(D3DRS_DESTBLEND, D3DBLEND_ONE);
|
---|
| 25 | device->SetRenderState(D3DRS_BLENDOP, D3DBLENDOP_ADD);
|
---|
| 26 | device->SetRenderState(D3DRS_ZENABLE, D3DZB_FALSE);
|
---|
| 27 |
|
---|
| 28 | }
|
---|
| 29 |
|
---|
| 30 | void PRMRenderStrategy::applyTechnique()
|
---|
| 31 | {
|
---|
| 32 | LPD3DXEFFECT effect = pathMapEffect->effect;
|
---|
| 33 |
|
---|
| 34 | effect->SetTechnique("BushToAtlas");
|
---|
| 35 | effect->SetFloatArray("lightPos", (float*)&bushRadions[ir].position, 3);
|
---|
| 36 | effect->SetFloatArray("lightDir", (float*)&bushRadions[ir].normal, 3);
|
---|
| 37 | effect->SetTexture("depthMap", pathMapEffect->depthMapTexture);
|
---|
| 38 |
|
---|
| 39 | static float opttme[9] = {0.5f, 0.0f, 0.0f,
|
---|
| 40 | 0.0f, -0.5f, 0.0f,
|
---|
| 41 | 0.5f + (0.5f / DEPTHMAPRES), 0.5f + (0.5f / DEPTHMAPRES), 1.0f};
|
---|
| 42 | effect->SetFloatArray("occProjToTexMatrix", opttme, 9);
|
---|
| 43 | effect->SetMatrix("occWorldToProjMatrix", &(*radionCamera.GetViewMatrix() * *radionCamera.GetProjMatrix()));
|
---|
| 44 | }
|
---|
| 45 |
|
---|
| 46 | void PRMRenderStrategy::applyTransforms(Entity* entity)
|
---|
| 47 | {
|
---|
| 48 | }
|
---|
| 49 |
|
---|
| 50 | void PRMRenderStrategy::applyTextures(SubEntity* subEntity)
|
---|
| 51 | {
|
---|
| 52 |
|
---|
| 53 |
|
---|
| 54 | float acs = 4096.0f / nRadions;
|
---|
| 55 | if(acs <= 0.25f || acs > 1000.0f)
|
---|
| 56 | bool kamugaz = true;
|
---|
| 57 | effect->SetFloat("alphaCounterStep", acs);
|
---|
| 58 |
|
---|
| 59 | Vector bb0 = this->rayTraceEntity->bbox.minPoint;
|
---|
| 60 | Vector bb1 = this->rayTraceEntity->bbox.maxPoint;
|
---|
| 61 | //effect->SetFloat("cutNearness2", (bb1 - bb0).norm2() / 200.0f);
|
---|
| 62 | float nne = 5.0f / bushRadions[ir].probability;
|
---|
| 63 | float onne = (bb1 - bb0).norm2() / 200.0f;
|
---|
| 64 | effect->SetFloat("cutNearness2", nne);
|
---|
| 65 | //effect->SetFloat("cutNearness2", 0.0f);
|
---|
| 66 |
|
---|
| 67 | //set global params
|
---|
| 68 |
|
---|
| 69 |
|
---|
| 70 | effect->SetMatrix("modelToWorldMatrix", &(this->modelWorldTransform));
|
---|
| 71 | effect->SetMatrix("inverseTransposedModelToWorldMatrix", &(this->inverseTransposedModelWorldTransform));
|
---|
| 72 | Vector scaledPower = bushRadions[ir].radiance * scaleFactor;
|
---|
| 73 | hr=effect->SetFloatArray("lightPower", (float*)&scaledPower, 3);
|
---|
| 74 | }
|
---|
| 75 |
|
---|
| 76 |
|
---|
| 77 | void PRMRenderStrategy::resetRenderState()
|
---|
| 78 | {
|
---|
| 79 | LPDIRECT3DDEVICE9 device = pathMapEffect->device;
|
---|
| 80 | }
|
---|
| 81 |
|
---|