// FallScene.cpp: implementation of the CFallScene class. // ////////////////////////////////////////////////////////////////////// #include "FallScene.h" #include "SceneManager.h" #include ////////////////////////////////////////////////////////////////////// // Construction/Destruction ////////////////////////////////////////////////////////////////////// CTexture CFallScene::m_WaterFallTexture; CFallScene::CFallScene() { m_MapFall=NULL; } CFallScene::~CFallScene() { //m_pFallVertex->Release(); //m_pFallIndices->Release(); } void CFallScene::Create() { for(int i=0;i<30;i++) { m_FallVertex[i].diff.c=0xffffffff; m_FallVertex[i].spec.c=0x0; } CTexture::SetPath(NATURETEXTUREPATH); //m_WaterFallTexture.Load("WaterFall.dds"); /* CSceneManager::GetDevice()->CreateVertexBuffer(MAX_FALLPARTICLE*4*sizeof(TLVertex), D3DUSAGE_WRITEONLY,TLVERTEXFVF,D3DPOOL_MANAGED, &m_pFallVertex); CSceneManager::GetDevice()->CreateIndexBuffer(MAX_FALLPARTICLE*6*sizeof(WORD),D3DUSAGE_WRITEONLY, D3DFMT_INDEX16,D3DPOOL_MANAGED,&m_pFallIndices); WORD *pIndices; m_pFallIndices->Lock(0,MAX_FALLPARTICLE*6*sizeof(WORD),(BYTE**)&pIndices,0); int i; for(i=0;iUnlock(); for(i=0;im_FallHeightList.num;i++) { m_FallVertex[i*2+0].tv-=0.1f; m_FallVertex[i*2+1].tv-=0.1f; } pd3dDevice->SetTexture(0,m_WaterFallTexture.GetTexture()); pd3dDevice->SetTexture(1,NULL); pd3dDevice->SetVertexShader(LVERTEXFVF); pd3dDevice->DrawPrimitiveUP(D3DPT_TRIANGLESTRIP,2*(m_MapFall->m_FallHeightList.num-1), m_FallVertex,sizeof(LVertex)); /* Update(); const float fParticleSize=20.0f; vector3 m_vecRes; float w; TLVertex* v; pd3dDevice->SetRenderState( D3DRS_ALPHABLENDENABLE, TRUE ); pd3dDevice->SetRenderState( D3DRS_SRCBLEND, D3DBLEND_SRCALPHA ); pd3dDevice->SetRenderState( D3DRS_DESTBLEND, D3DBLEND_ONE); //pd3dDevice->SetRenderState( D3DRS_DESTBLEND, D3DBLEND_INVSRCALPHA); pd3dDevice->SetRenderState(D3DRS_ZWRITEENABLE,FALSE); m_pFallVertex->Lock(NULL,NULL,(BYTE**)&v,NULL); for(int i=0;iUnlock(); pd3dDevice->SetRenderState(D3DRS_CULLMODE,D3DCULL_NONE); pd3dDevice->SetVertexShader(TLVERTEXFVF); pd3dDevice->SetStreamSource(0,m_pFallVertex,sizeof(TLVertex)); pd3dDevice->SetIndices(m_pFallIndices,0); pd3dDevice->SetTexture(0,m_FallPartTexture.GetTexture()); pd3dDevice->SetTexture(1,NULL); pd3dDevice->DrawIndexedPrimitive(D3DPT_TRIANGLELIST,0,MAX_FALLPARTICLE*4,0,MAX_FALLPARTICLE*2); pd3dDevice->SetRenderState(D3DRS_CULLMODE,D3DCULL_CCW); pd3dDevice->SetRenderState( D3DRS_ALPHABLENDENABLE,FALSE); pd3dDevice->SetRenderState(D3DRS_ZWRITEENABLE,TRUE); //pd3dDevice->DrawPrimitive(D3D,0,4*MAX_FALLPARTICLE); */ } void CFallScene::MakeFallScene(CSectorFallMap *MapFall) { m_MapFall=MapFall; float fInterHeight; for(int i=0;im_FallHeightList.num;i++) { m_FallVertex[i*2+0].diff=MapFall->m_FallColor[i]; m_FallVertex[i*2+1].diff=MapFall->m_FallColor[i]; if(i!=0) { fInterHeight=abs(MapFall->m_FallHeightList[i]-MapFall->m_FallHeightList[i-1]); m_FallVertex[i*2+0].tv=m_FallVertex[(i-1)*2+0].tv+fInterHeight/3000.0f; m_FallVertex[i*2+1].tv=m_FallVertex[(i-1)*2+1].tv+fInterHeight/3000.0f; } else { m_FallVertex[i*2+0].tv=0.0f; m_FallVertex[i*2+1].tv=0.0f; } m_FallVertex[i*2+0].v.x=MapFall->m_FallAddXList[i]; m_FallVertex[i*2+0].v.z=MapFall->m_FallLeftList[i]; m_FallVertex[i*2+0].v.y=MapFall->m_FallHeightList[i]; m_FallVertex[i*2+0].tu=0.0f; m_FallVertex[i*2+1].v.x=MapFall->m_FallAddXList[i]; m_FallVertex[i*2+1].v.z=MapFall->m_FallRightList[i]; m_FallVertex[i*2+1].v.y=MapFall->m_FallHeightList[i]; m_FallVertex[i*2+1].tu=1.0f; } }