Changeset 1480 for GTP/trunk/App/Demos/Illum/PathMap/PathMapEffect.cpp
- Timestamp:
- 09/22/06 20:58:26 (18 years ago)
- File:
-
- 1 edited
Legend:
- Unmodified
- Added
- Removed
-
GTP/trunk/App/Demos/Illum/PathMap/PathMapEffect.cpp
r896 r1480 84 84 //set up a scene 85 85 86 loadScene("media\\level.txt"); 87 86 88 //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 90 93 Entity e1; 91 94 e1.owner = this; 92 95 e1.renderMesh = renderMeshes.at(0); 93 96 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); 95 99 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); 97 102 98 103 e1.createRayTraceEntity(); … … 102 107 103 108 //load 'steps' mesh 104 /*loadMesh( L"media\\steps.x" );109 loadMesh( L"media\\steps.x" ); 105 110 106 111 //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); 109 116 Entity e2; 110 117 e2.owner = this; 111 118 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 113 134 D3DXMatrixInverse(&e2.inverseTransposedModelWorldTransform, NULL, &e2.modelWorldTransform); 114 135 e2.createRayTraceEntity(); 115 136 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 */ 127 139 /* for(int eitor=0; eitor < 6; eitor++) 128 140 { … … 143 155 }*/ 144 156 157 loadMesh( L"media\\torch.x" ); 158 145 159 //compute the surface area of the complete geometry. useful for random sampling. 146 160 sumSurfaceArea = 0.0; … … 165 179 lightCamera->SetProjParams( D3DX_PI/1.9, 1.0f, 0.1f, 300.0f ); 166 180 167 //create ray tracing kd-tree contain g ray-traceable versions of entities181 //create ray tracing kd-tree containing ray-traceable versions of entities 168 182 Intersectable** objs = new Intersectable*[entities.size()]; 169 183 for(int u=0; u<entities.size(); u++) … … 212 226 fillRadionPosArray(pData); 213 227 starterVertexBuffer->Unlock(); 228 229 230 exportEntityData(); 214 231 215 232 #ifdef GENERATE_PATH_MAPS … … 437 454 D3DXVECTOR3 lightDir = *lightCamera->GetWorldAhead(); 438 455 lightDir /= D3DXVec3Length( &lightDir ); 439 float ffl = parameters->Get(fLightScale) * 1 .0f;456 float ffl = parameters->Get(fLightScale) * 100.0f; 440 457 D3DXVECTOR3 lightPower(ffl, ffl, ffl); 441 458 … … 544 561 for(unsigned int y=0; y<NCLUSTERSPERENTITY; y++) 545 562 weightsa[y] = weights[entityIterator->nearClusterIndices[y]]; 546 //## could sort weightsa, indicesa and use first few547 563 hr = effect->SetFloatArray("weightsa", weightsa, NCLUSTERSPERENTITY); 548 INT* pr = (INT*)entityIterator->nearClusterIndices;549 hr = effect->SetIntArray("indicesa", (INT*)entityIterator->nearClusterIndices, NCLUSTERSPERENTITY);550 564 effect->SetMatrix("modelToWorldMatrix", &entityIterator->modelWorldTransform); 551 565 effect->SetMatrix("inverseTransposedModelToWorldMatrix", &entityIterator->inverseTransposedModelWorldTransform); … … 578 592 device->EndScene(); 579 593 } 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 580 613 } 581 614 … … 913 946 for(unsigned int i=0; i<NCLUSTERS; i++) 914 947 clusterLenghts[i] = NRADIONS / NCLUSTERS; 915 for(unsigned int iKMeans = 0; iKMeans < 1 0; iKMeans++)948 for(unsigned int iKMeans = 0; iKMeans < 128; iKMeans++) 916 949 { 917 950 //find centroids … … 943 976 for(unsigned int u=0; u<NCLUSTERS; u++) 944 977 { 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); 947 980 if(dist < minimumDistance) 948 981 { … … 1654 1687 for(unsigned int i=0; i<32; i++) 1655 1688 { 1656 nearClusterIndices[i] = i;// nearestClusterDists.top().index;1689 nearClusterIndices[i] = 31 - i;// nearestClusterDists.top().index; 1657 1690 nearestClusterDists.pop(); 1658 1691 } … … 1683 1716 { 1684 1717 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 1686 1721 D3DXSaveSurfaceToFile(prmFileName, D3DXIFF_HDR, entityIterator->prmSurface, NULL, NULL); 1687 1722 entityIterator++; … … 1717 1752 1718 1753 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); 1720 1756 D3DXLoadSurfaceFromFile(entityIterator->prmSurface, NULL, NULL, prmFileName, NULL, D3DX_DEFAULT, 0, NULL); 1721 1757 entityIterator++; … … 1723 1759 } 1724 1760 } 1761 1762 void 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 1792 void 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.