#include "dxstdafx.h" #include ".\prmrenderstrategy.h" PRMRenderStrategy::PRMRenderStrategy(PathMapEffect* pathMapEffect, Radion* radion) :RenderStrategy(pathMapEffect) { this->radion = radion; } void PRMRenderStrategy::applyTargets() { } void PRMRenderStrategy::applyRenderState() { LPDIRECT3DDEVICE9 device = pathMapEffect->device; // blend-add contribution of virtual light source to PRM device->SetRenderTarget(0, prmSurface); device->SetDepthStencilSurface(NULL); device->SetViewport(&vp); device->SetRenderState(D3DRS_CULLMODE, D3DCULL_NONE); device->SetRenderState(D3DRS_ALPHABLENDENABLE, true); device->SetRenderState(D3DRS_SRCBLEND, D3DBLEND_ONE); device->SetRenderState(D3DRS_DESTBLEND, D3DBLEND_ONE); device->SetRenderState(D3DRS_BLENDOP, D3DBLENDOP_ADD); device->SetRenderState(D3DRS_ZENABLE, D3DZB_FALSE); } void PRMRenderStrategy::applyTechnique() { LPD3DXEFFECT effect = pathMapEffect->effect; effect->SetTechnique("BushToAtlas"); effect->SetFloatArray("lightPos", (float*)&bushRadions[ir].position, 3); effect->SetFloatArray("lightDir", (float*)&bushRadions[ir].normal, 3); effect->SetTexture("depthMap", pathMapEffect->depthMapTexture); static float opttme[9] = {0.5f, 0.0f, 0.0f, 0.0f, -0.5f, 0.0f, 0.5f + (0.5f / DEPTHMAPRES), 0.5f + (0.5f / DEPTHMAPRES), 1.0f}; effect->SetFloatArray("occProjToTexMatrix", opttme, 9); effect->SetMatrix("occWorldToProjMatrix", &(*radionCamera.GetViewMatrix() * *radionCamera.GetProjMatrix())); } void PRMRenderStrategy::applyTransforms(Entity* entity) { } void PRMRenderStrategy::applyTextures(SubEntity* subEntity) { float acs = 4096.0f / nRadions; if(acs <= 0.25f || acs > 1000.0f) bool kamugaz = true; effect->SetFloat("alphaCounterStep", acs); Vector bb0 = this->rayTraceEntity->bbox.minPoint; Vector bb1 = this->rayTraceEntity->bbox.maxPoint; //effect->SetFloat("cutNearness2", (bb1 - bb0).norm2() / 200.0f); float nne = 5.0f / bushRadions[ir].probability; float onne = (bb1 - bb0).norm2() / 200.0f; effect->SetFloat("cutNearness2", nne); //effect->SetFloat("cutNearness2", 0.0f); //set global params effect->SetMatrix("modelToWorldMatrix", &(this->modelWorldTransform)); effect->SetMatrix("inverseTransposedModelToWorldMatrix", &(this->inverseTransposedModelWorldTransform)); Vector scaledPower = bushRadions[ir].radiance * scaleFactor; hr=effect->SetFloatArray("lightPower", (float*)&scaledPower, 3); } void PRMRenderStrategy::resetRenderState() { LPDIRECT3DDEVICE9 device = pathMapEffect->device; }