Ignore:
Timestamp:
09/22/06 20:58:26 (18 years ago)
Author:
szirmay
Message:
 
File:
1 edited

Legend:

Unmodified
Added
Removed
  • GTP/trunk/App/Demos/Illum/PathMap/PathMapEffect.cpp

    r896 r1480  
    8484        //set up a scene 
    8585 
     86        loadScene("media\\level.txt"); 
     87 
    8688        //load hangar mesh 
    87         loadMesh( L"media\\fulltexchamber.x" ); 
    88  
    89         //create hangar entity 
     89        loadMesh( L"media\\hangar.x" ); 
     90//      loadMesh( L"media\\fulltexchamber.x" ); 
     91 
     92/*      //create hangar entity 
    9093        Entity e1; 
    9194        e1.owner = this; 
    9295        e1.renderMesh = renderMeshes.at(0); 
    9396        D3DXMatrixIdentity(&e1.modelWorldTransform); 
    94 //      D3DXMatrixScaling(&e1.modelWorldTransform, 0.5f, 1.0f, 0.5f); 
     97//      D3DXMatrixScaling(&e1.modelWorldTransform, 20.0f, 20.0f, 20.0f); 
     98        D3DXMatrixScaling(&e1.modelWorldTransform, 0.5f, 1.0f, 0.5f); 
    9599        D3DXMatrixIdentity(&e1.inverseTransposedModelWorldTransform); 
    96 //      D3DXMatrixScaling(&e1.inverseTransposedModelWorldTransform, 1.0f/0.5f, 1.0f, 1.0f/0.5f); 
     100//      D3DXMatrixScaling(&e1.inverseTransposedModelWorldTransform, 1.0f/20.0f, 1.0f/20.0f, 1.0f/20.0f); 
     101        D3DXMatrixScaling(&e1.inverseTransposedModelWorldTransform, 1.0f/0.5f, 1.0f, 1.0f/0.5f); 
    97102 
    98103        e1.createRayTraceEntity(); 
     
    102107 
    103108        //load 'steps' mesh 
    104 /*      loadMesh( L"media\\steps.x" ); 
     109        loadMesh( L"media\\steps.x" ); 
    105110 
    106111        //create step entities 
    107         //for(int eitor=0; eitor < 6; eitor++) 
    108         { 
     112        for(int eitor=0; eitor < 4; eitor++) 
     113        { 
     114                D3DXMATRIX urr; 
     115                D3DXMATRIX rx;          D3DXMatrixRotationY(&rx, Vector::PI * 0.5f * eitor); 
    109116                Entity e2; 
    110117                e2.owner = this; 
    111118                e2.renderMesh = renderMeshes.at(1); 
    112                 D3DXMatrixTranslation(&e2.modelWorldTransform, 0.0f, -14.0f, 0.0f); 
     119 
     120                D3DXMatrixTranslation(&urr, -15.0f, -14.0f, -7.0f); 
     121                D3DXMatrixMultiply( &e2.modelWorldTransform, &urr, &rx); 
     122                D3DXMatrixInverse(&e2.inverseTransposedModelWorldTransform, NULL, &e2.modelWorldTransform); 
     123 
     124                e2.createRayTraceEntity(); 
     125                entities.push_back(e2); 
     126 
     127                D3DXMATRIX trasi, roti; 
     128                D3DXMatrixTranslation(&trasi, -15.0f + 7.0f, 14.0f, -7.0f -7.0f);               //7.25f, 13.5, -7.25); //rot 90 -90 90 trans 7.25 13.5 -7.25 
     129                D3DXMatrixRotationYawPitchRoll(&roti, -Vector::PI * 0.5, Vector::PI, 0.0); 
     130                D3DXMatrixMultiply(&urr, &roti, &trasi); 
     131 
     132                D3DXMatrixMultiply( &e2.modelWorldTransform, &urr, &rx); 
     133 
    113134                D3DXMatrixInverse(&e2.inverseTransposedModelWorldTransform, NULL, &e2.modelWorldTransform); 
    114135                e2.createRayTraceEntity(); 
    115136                entities.push_back(e2); 
    116  
    117                 D3DXMATRIX trasi, roti; 
    118                 D3DXMatrixTranslation(&trasi, 7.0f, 14.0f, -7.0f);//7.25f, 13.5, -7.25); //rot 90 -90 90 trans 7.25 13.5 -7.25 
    119                 D3DXMatrixRotationYawPitchRoll(&roti, -Vector::PI * 0.5, Vector::PI, 0.0); 
    120 //              D3DXMatrixIdentity(&roti); 
    121                 D3DXMatrixMultiply(&e2.modelWorldTransform, &roti, &trasi); 
    122                 D3DXMatrixInverse(&e2.inverseTransposedModelWorldTransform, NULL, &e2.modelWorldTransform); 
    123                 e2.createRayTraceEntity(); 
    124                 entities.push_back(e2); 
    125         }*/ 
    126  
     137        } 
     138*/ 
    127139/*      for(int eitor=0; eitor < 6; eitor++) 
    128140        { 
     
    143155        }*/ 
    144156 
     157        loadMesh( L"media\\torch.x" ); 
     158 
    145159        //compute the surface area of the complete geometry. useful for random sampling. 
    146160        sumSurfaceArea = 0.0; 
     
    165179        lightCamera->SetProjParams( D3DX_PI/1.9, 1.0f, 0.1f, 300.0f ); 
    166180 
    167         //create ray tracing kd-tree containg ray-traceable versions of entities  
     181        //create ray tracing kd-tree containing ray-traceable versions of entities  
    168182        Intersectable** objs = new Intersectable*[entities.size()]; 
    169183        for(int u=0; u<entities.size(); u++) 
     
    212226        fillRadionPosArray(pData); 
    213227        starterVertexBuffer->Unlock(); 
     228 
     229 
     230        exportEntityData(); 
    214231 
    215232#ifdef GENERATE_PATH_MAPS 
     
    437454        D3DXVECTOR3 lightDir = *lightCamera->GetWorldAhead(); 
    438455        lightDir /= D3DXVec3Length( &lightDir ); 
    439         float ffl = parameters->Get(fLightScale) * 1.0f; 
     456        float ffl = parameters->Get(fLightScale) * 100.0f; 
    440457        D3DXVECTOR3 lightPower(ffl, ffl, ffl); 
    441458 
     
    544561                        for(unsigned int y=0; y<NCLUSTERSPERENTITY; y++) 
    545562                                weightsa[y] = weights[entityIterator->nearClusterIndices[y]]; 
    546                         //## could sort weightsa, indicesa and use first few 
    547563                        hr = effect->SetFloatArray("weightsa", weightsa, NCLUSTERSPERENTITY); 
    548                         INT* pr = (INT*)entityIterator->nearClusterIndices; 
    549                         hr = effect->SetIntArray("indicesa", (INT*)entityIterator->nearClusterIndices, NCLUSTERSPERENTITY); 
    550564                        effect->SetMatrix("modelToWorldMatrix", &entityIterator->modelWorldTransform); 
    551565                        effect->SetMatrix("inverseTransposedModelToWorldMatrix", &entityIterator->inverseTransposedModelWorldTransform); 
     
    578592                device->EndScene(); 
    579593        } 
     594 
     595        if(!parameters->Get(bLookFromLight)) 
     596        if( SUCCEEDED( device->BeginScene() ) ) 
     597        { 
     598                effect->SetTechnique("torch"); 
     599                UINT nPasses; 
     600                effect->Begin(&nPasses, 0); 
     601                effect->BeginPass(0); 
     602 
     603                effect->SetMatrix("modelToProjMatrix", &(*lightCamera->GetWorldMatrix() * *camera->GetViewMatrix()  * *camera->GetProjMatrix()  )); 
     604 
     605                effect->CommitChanges(); 
     606                renderMeshes[renderMeshes.size()-1]->mesh->DrawSubset(0); 
     607 
     608                effect->EndPass(); 
     609                effect->End(); 
     610                device->EndScene(); 
     611        } 
     612 
    580613} 
    581614 
     
    913946        for(unsigned int i=0; i<NCLUSTERS; i++) 
    914947                clusterLenghts[i] = NRADIONS / NCLUSTERS; 
    915         for(unsigned int iKMeans = 0; iKMeans < 10; iKMeans++) 
     948        for(unsigned int iKMeans = 0; iKMeans < 128; iKMeans++) 
    916949        { 
    917950                //find centroids 
     
    943976                                for(unsigned int u=0; u<NCLUSTERS; u++) 
    944977                                { 
    945                                         float dirDist = 2.0f - (bushStarters.at(iRadion).normal * centroids[u].normal); 
    946                                         float dist = (bushStarters.at(iRadion).position - centroids[u].position).norm() * dirDist; 
     978                                        float dirDist = (bushStarters.at(iRadion).normal * centroids[u].normal); 
     979                                        float dist = (bushStarters.at(iRadion).position - centroids[u].position).norm() * pow(6.0, 1.0 - (double)dirDist); 
    947980                                        if(dist < minimumDistance) 
    948981                                        { 
     
    16541687        for(unsigned int i=0; i<32; i++) 
    16551688        { 
    1656                 nearClusterIndices[i] = i;// nearestClusterDists.top().index; 
     1689                nearClusterIndices[i] = 31 - i;// nearestClusterDists.top().index; 
    16571690                nearestClusterDists.pop(); 
    16581691        } 
     
    16831716        { 
    16841717                wchar_t prmFileName[256]; 
    1685                 wsprintf(prmFileName, L"prm\\prm_%08d.hdr", iEntity); 
     1718//              wsprintf(prmFileName, L"prm\\prm_%08d.hdr", iEntity); 
     1719                MultiByteToWideChar(CP_ACP, 0, entityIterator->prmfilename, -1, prmFileName, 255); 
     1720 
    16861721                D3DXSaveSurfaceToFile(prmFileName, D3DXIFF_HDR, entityIterator->prmSurface, NULL, NULL); 
    16871722                entityIterator++; 
     
    17171752 
    17181753                wchar_t prmFileName[256]; 
    1719                 wsprintf(prmFileName, L"prm\\prm_%08d.hdr", iEntity); 
     1754//              wsprintf(prmFileName, L"prm\\prm_%08d.hdr", iEntity); 
     1755                MultiByteToWideChar(CP_ACP, 0, entityIterator->prmfilename, -1, prmFileName, 255); 
    17201756                D3DXLoadSurfaceFromFile(entityIterator->prmSurface, NULL, NULL, prmFileName, NULL, D3DX_DEFAULT, 0, NULL); 
    17211757                entityIterator++; 
     
    17231759        } 
    17241760} 
     1761 
     1762void PathMapEffect::exportEntityData() 
     1763{ 
     1764        std::fstream entryPointFile("media\\entityPathMapData.txt", std::ios::out); 
     1765 
     1766        unsigned int iEntity = 0; 
     1767        std::vector<PathMapEffect::Entity>::iterator entityIterator = entities.begin(); 
     1768        while(entityIterator != entities.end()) 
     1769        { 
     1770                entryPointFile << "entity " << entityIterator->name << '\n'; 
     1771                entryPointFile << "{" << '\n'; 
     1772                entryPointFile << " pathmapfile " << entityIterator->prmfilename << '\n'; 
     1773                entryPointFile << " clusters "; 
     1774                for(int i=0; i<NCLUSTERSPERENTITY; i++) 
     1775                        entryPointFile << entityIterator->nearClusterIndices[i] << " "; 
     1776                entryPointFile << '\n'; 
     1777                entryPointFile << "}" << '\n'; 
     1778                entryPointFile << '\n'; 
     1779 
     1780//              for(int i=0; i<16; i++) 
     1781//                      entryPointFile << entityIterator->modelWorldTransform.m[i%4][i/4] << " "; 
     1782                entryPointFile << '\n'; 
     1783                entityIterator++; 
     1784                iEntity++; 
     1785        } 
     1786 
     1787        entryPointFile.flush(); 
     1788        entryPointFile.close(); 
     1789 
     1790} 
     1791 
     1792void PathMapEffect::loadScene(const char* sceneFileName) 
     1793{ 
     1794        std::fstream sceneFile(sceneFileName, std::ios::in); 
     1795 
     1796        char keyword[256]; 
     1797        while(!sceneFile.eof()) 
     1798        { 
     1799                sceneFile >> keyword; 
     1800                if(strcmp(keyword, "mesh") == 0) 
     1801                { 
     1802                        char meshname[256]; 
     1803                        sceneFile >> meshname; 
     1804                        if(strcmp(meshname, "{") == 0) 
     1805                                strcpy(meshname, "mesh"); 
     1806                        while(strcmp(keyword, "}") != 0 && !sceneFile.eof()) 
     1807                        { 
     1808                                sceneFile >> keyword; 
     1809                                if(strcmp(keyword, "xfile") == 0) 
     1810                                { 
     1811                                        sceneFile >> keyword; 
     1812                                        wchar_t* wide = NULL; 
     1813                                        if(keyword) 
     1814                                        { 
     1815                                                wide = new wchar_t[MultiByteToWideChar(CP_ACP, 0, keyword, -1, NULL, 0)]; 
     1816                                                MultiByteToWideChar(CP_ACP, 0, keyword, -1, wide, 511); 
     1817                                        } 
     1818                                        loadMesh(wide); 
     1819                                        strcpy(renderMeshes[renderMeshes.size()-1]->name, meshname); 
     1820                                        delete wide; 
     1821                                } 
     1822                        } 
     1823                } 
     1824 
     1825                if(strcmp(keyword, "entity") == 0) 
     1826                { 
     1827                        Entity e; 
     1828                        e.owner = this; 
     1829 
     1830                        char entityname[256]; 
     1831                        sceneFile >> entityname; 
     1832                        if(strcmp(entityname, "{") == 0) 
     1833                                strcpy(entityname, "noname"); 
     1834 
     1835                        strcpy(e.name, entityname); 
     1836 
     1837                        while(strcmp(keyword, "}") != 0 && !sceneFile.eof()) 
     1838                        { 
     1839                                sceneFile >> keyword; 
     1840                                if(strcmp(keyword, "pathmapfile") == 0) 
     1841                                { 
     1842                                        sceneFile >> keyword; 
     1843                                        strcpy(e.prmfilename, keyword); 
     1844                                } 
     1845                                if(strcmp(keyword, "mesh") == 0) 
     1846                                { 
     1847                                        sceneFile >> keyword; 
     1848 
     1849                                        std::vector<PathMapEffect::RenderMesh*>::iterator i = renderMeshes.begin(); 
     1850                                        while(i != renderMeshes.end()) 
     1851                                        { 
     1852                                                if(strcmp((*i)->name, keyword) == 0) 
     1853                                                { 
     1854                                                        e.renderMesh = *i; 
     1855                                                        break; 
     1856                                                } 
     1857                                                i++; 
     1858                                        } 
     1859                                } 
     1860                                if(strcmp(keyword, "transformation") == 0) 
     1861                                { 
     1862                                        for(int i=0; i<16; i++) 
     1863                                                sceneFile >> e.modelWorldTransform.m[i%4][i/4]; 
     1864                                        D3DXMatrixInverse(&e.inverseTransposedModelWorldTransform, NULL, &e.modelWorldTransform); 
     1865                                } 
     1866                        } 
     1867 
     1868                        e.createRayTraceEntity(); 
     1869                        entities.push_back(e); 
     1870                } 
     1871        } 
     1872        sceneFile.close(); 
     1873} 
Note: See TracChangeset for help on using the changeset viewer.