亚洲欧美第一页_禁久久精品乱码_粉嫩av一区二区三区免费野_久草精品视频

? 歡迎來到蟲蟲下載站! | ?? 資源下載 ?? 資源專輯 ?? 關(guān)于我們
? 蟲蟲下載站

?? ch12p1_simplewater.cpp

?? 實現(xiàn)2D水面效果的源程序
?? CPP
?? 第 1 頁 / 共 2 頁
字號:
      }
      else {
        if (ydiff < 0) {
          if (y-ydisp < 0 || y-ydisp >= TEXTURESIZE || x+xdisp < 0 || x+xdisp >= TEXTURESIZE)
            pDest[dest_index++] = pSrc[0];    
          else
            pDest[dest_index++] = pSrc[((y-ydisp)*src_pitch)+x+xdisp];  
        }
        else {
          if (y+ydisp < 0 || y+ydisp >= TEXTURESIZE || x+xdisp < 0 || x+xdisp >= TEXTURESIZE)
            pDest[dest_index++] = pSrc[0];    
          else
            pDest[dest_index++] = pSrc[((y+ydisp)*src_pitch)+x+xdisp];  
        }
      }
    }
    // next line
    dest_index += (rect_dest.Pitch - (TEXTURESIZE*4))/4;
  }

  // unlock texture surface
  if (FAILED(hr = pSrcTex->UnlockRect(0))) return(hr);
  if (FAILED(hr = pDestTex->UnlockRect(0))) return(hr);

  return S_OK;
}


//-----------------------------------------------------------------------------
// Name: OneTimeSceneInit()
// Desc: Called during initial app startup, this function performs all the
//       permanent initialization.
//-----------------------------------------------------------------------------
HRESULT CMyD3DApplication::OneTimeSceneInit()
{
  MakeDisplacementLookupTable(m_lutDisplacement, sizeof(m_lutDisplacement), 1.333f, 0.5f);
  return S_OK;
}

//-----------------------------------------------------------------------------
// Name: FrameMove()
// Desc: Called once per frame, the call is the entry point for animating
//       the scene.
//-----------------------------------------------------------------------------
HRESULT CMyD3DApplication::FrameMove()
{
  FLOAT fSecsPerFrame = m_fElapsedTime;

  // process the water
  ProcessWater(m_pWaterActive, m_pWaterScratch, TEXTURESIZE, TEXTURESIZE, 4);

  // use it to displace our image texture onto our dest texture
  PutWaterOntoTexture(m_pWaterActive, TEXTURESIZE, TEXTURESIZE, m_lutDisplacement,
    m_pd3dDevice, m_pImageTex, m_pWaterTex);

  // flip-flop the water buffers.
  int *temp = m_pWaterActive;
  m_pWaterActive = m_pWaterScratch;
  m_pWaterScratch = temp;

  return S_OK;
}

//-----------------------------------------------------------------------------
// Name: Render()
// Desc: Called once per frame, the call is the entry point for 3d
//       rendering. This function sets up render states, clears the
//       viewport, and renders the scene.
//-----------------------------------------------------------------------------
HRESULT CMyD3DApplication::Render()
{
  // Clear the backbuffer
  m_pd3dDevice->Clear(0L, NULL, D3DCLEAR_TARGET|D3DCLEAR_ZBUFFER,
                      0x000000, 1.0f, 0L);
  
  // Begin rendering the scene
  if( SUCCEEDED(m_pd3dDevice->BeginScene()))
  {
    // set our water texture active...
    m_pd3dDevice->SetTexture(0, m_pWaterTex);

    // draw our quad
    m_pd3dDevice->SetStreamSource(0, m_pVB, sizeof(CUSTOMVERTEX));
    m_pd3dDevice->SetVertexShader(D3DFVF_CUSTOMVERTEX);
    m_pd3dDevice->DrawPrimitive(D3DPT_TRIANGLELIST, 0, 2);

    // Output statistics
    m_pFont->DrawText(2,  0, D3DCOLOR_ARGB(255,255,255,0), m_strFrameStats);
    m_pFont->DrawText(2, 20, D3DCOLOR_ARGB(255,255,255,0), m_strDeviceStats);
    m_pFont->DrawText(2, 40, D3DCOLOR_ARGB(255,255,255,0), m_strTextureSurfFormat);

    // End the scene.
    m_pd3dDevice->EndScene();
  }

  return S_OK;
}

//-----------------------------------------------------------------------------
// Name: InitDeviceObjects()
// Desc: Initialize scene objects.
//-----------------------------------------------------------------------------
HRESULT CMyD3DApplication::InitDeviceObjects()
{
  m_pFont->InitDeviceObjects( m_pd3dDevice );
  m_pFontSmall->InitDeviceObjects( m_pd3dDevice );
  return S_OK;
}

//-----------------------------------------------------------------------------
// Name: RestoreDeviceObjects()
// Desc: Initialize scene objects.
//-----------------------------------------------------------------------------
HRESULT CMyD3DApplication::RestoreDeviceObjects()
{
  HRESULT hr;

  m_pFont->RestoreDeviceObjects();
  m_pFontSmall->RestoreDeviceObjects();

  // Setup render states
  m_pd3dDevice->SetRenderState( D3DRS_LIGHTING, FALSE );
  m_pd3dDevice->SetRenderState( D3DRS_CULLMODE, D3DCULL_NONE );
  m_pd3dDevice->SetRenderState( D3DRS_ZENABLE, FALSE );

  // Create vertex buffer
  {
    CUSTOMVERTEX* pVertices;

    if( FAILED( hr = m_pd3dDevice->CreateVertexBuffer( 6*sizeof(CUSTOMVERTEX),
                                                       0, D3DFVF_CUSTOMVERTEX,
                                                       D3DPOOL_MANAGED, &m_pVB ) ) )
      return hr;

    if( FAILED( hr = m_pVB->Lock( 0, m_dwNumVertices*sizeof(CUSTOMVERTEX), (BYTE**)&pVertices, 0 ) ) )
      return hr;

    // first triangle
    pVertices[0].position = D3DXVECTOR3(-1.0f, 1.0f, 0.0f);
    pVertices[0].color    = 0xffffffff;
    pVertices[0].tu       = 0.0f;
    pVertices[0].tv       = 0.0f;

    pVertices[1].position = D3DXVECTOR3(1.0f, 1.0f, 0.0f);
    pVertices[1].color    = 0xffffffff;
    pVertices[1].tu       = 1.0f;
    pVertices[1].tv       = 0.0f;

    pVertices[2].position = D3DXVECTOR3(1.0f, -1.0f, 0.0f);
    pVertices[2].color    = 0xffffffff;
    pVertices[2].tu       = 1.0f;
    pVertices[2].tv       = 1.0f;

    // second triangle
    pVertices[3].position = D3DXVECTOR3(-1.0f, 1.0f, 0.0f);
    pVertices[3].color    = 0xffffffff;
    pVertices[3].tu       = 0.0f;
    pVertices[3].tv       = 0.0f;

    pVertices[4].position = D3DXVECTOR3(1.0f, -1.0f, 0.0f);
    pVertices[4].color    = 0xffffffff;
    pVertices[4].tu       = 1.0f;
    pVertices[4].tv       = 1.0f;

    pVertices[5].position = D3DXVECTOR3(-1.0f, -1.0f, 0.0f);
    pVertices[5].color    = 0xffffffff;
    pVertices[5].tu       = 0.0f;
    pVertices[5].tv       = 1.0f;

    if( FAILED( hr = m_pVB->Unlock() ) )
      return hr;
  }

  // clear water memory
  memset(m_iWaterField,  0, TEXTURESIZE*TEXTURESIZE*4);
  memset(m_iWaterField2, 0, TEXTURESIZE*TEXTURESIZE*4);
  
  // setup water buffers
  m_pWaterActive = m_iWaterField;
  m_pWaterScratch = m_iWaterField2;

  // create image texture
  {
    if (FAILED(hr = D3DXCreateTextureFromFile(m_pd3dDevice, "Ch12p1_WaterImage.png", &m_pImageTex))) return(hr);

    LPDIRECT3DSURFACE8 pSurf;

    if (FAILED(hr = m_pImageTex->GetSurfaceLevel(0, &pSurf))) return(hr);
    
    // get the texture's surface format, and store that in our variable for later display.
    D3DSURFACE_DESC surfdesc;
    pSurf->GetDesc(&surfdesc);

    strcpy(m_strTextureSurfFormat, SurfFormatToString(surfdesc.Format));

    SAFE_RELEASE(pSurf);
  }

  // create destination water texture - same size as image
  if (FAILED(hr = D3DXCreateTexture(m_pd3dDevice, TEXTURESIZE, TEXTURESIZE, 
    1, 0, D3DFMT_A8R8G8B8, D3DPOOL_MANAGED, &m_pWaterTex))) return(hr);

  // Set up an orthagonal projection matrix, so we can render the entire
  // texture.
  D3DXMATRIX mat;
  D3DXMatrixOrthoLH(&mat, (float)TEXTURESIZE, (float)TEXTURESIZE, 
    0.0, 100.0);
  m_pd3dDevice->SetTransform( D3DTS_PROJECTION, &mat );

  // this world matrix, combined with orthogonal projection, causes the 
  // texture to completely and exactly fill the rendering surface.
  D3DXMATRIX matWorld,matTrans,matScale;
  D3DXMatrixScaling(&matScale, (float)TEXTURESIZE/2.0f, (float)TEXTURESIZE/2.0f, 1.0);

  // move the quad left and up 0.5 units, so that the texels are perfectly
  // centered on the screen pixels.
  D3DXMatrixMultiply(&matWorld, &matScale, D3DXMatrixTranslation(&matTrans, -0.5f, -0.5f, 0));

  // our matrix is now finished.  Tell D3D to use it!
  m_pd3dDevice->SetTransform( D3DTS_WORLD, &matWorld );

  // set up our texture stages for a simple texture copy...
  m_pd3dDevice->SetTextureStageState( 0, D3DTSS_COLOROP,   D3DTOP_SELECTARG1 );
  m_pd3dDevice->SetTextureStageState( 0, D3DTSS_COLORARG1, D3DTA_TEXTURE );
  m_pd3dDevice->SetTextureStageState( 0, D3DTSS_COLORARG2, D3DTA_DIFFUSE );
  m_pd3dDevice->SetTextureStageState( 0, D3DTSS_ALPHAOP,   D3DTOP_SELECTARG1 );

  // turning on linear filtering for our fire texture really helps out with
  // the image quality.
  m_pd3dDevice->SetTextureStageState( 0, D3DTSS_MAGFILTER, D3DTEXF_LINEAR);
  m_pd3dDevice->SetTextureStageState( 0, D3DTSS_MINFILTER, D3DTEXF_LINEAR);
  m_pd3dDevice->SetTextureStageState( 0, D3DTSS_MIPFILTER, D3DTEXF_LINEAR);

  return S_OK;
}

//-----------------------------------------------------------------------------
// Name: InvalidateDeviceObjects()
// Desc:
//-----------------------------------------------------------------------------
HRESULT CMyD3DApplication::InvalidateDeviceObjects()
{
  m_pFont->InvalidateDeviceObjects();
  m_pFontSmall->InvalidateDeviceObjects();
  SAFE_RELEASE(m_pVB);
  SAFE_RELEASE(m_pImageTex);
  SAFE_RELEASE(m_pWaterTex);
  return S_OK;
}

//-----------------------------------------------------------------------------
// Name: DeleteDeviceObjects()
// Desc: Called when the app is exiting, or the device is being changed,
//       this function deletes any device dependent objects.
//-----------------------------------------------------------------------------
HRESULT CMyD3DApplication::DeleteDeviceObjects()
{
  m_pFont->DeleteDeviceObjects();
  m_pFontSmall->DeleteDeviceObjects();
  return S_OK;
}

//-----------------------------------------------------------------------------
// Name: FinalCleanup()
// Desc: Called before the app exits, this function gives the app the chance
//       to cleanup after itself.
//-----------------------------------------------------------------------------
HRESULT CMyD3DApplication::FinalCleanup()
{
  SAFE_DELETE( m_pFont );
  SAFE_DELETE( m_pFontSmall );
  return S_OK;
}

//-----------------------------------------------------------------------------
// Name: ConfirmDevice()
// Desc: Called during device intialization, this code checks the device
//       for some minimum set of capabilities
//-----------------------------------------------------------------------------
HRESULT CMyD3DApplication::ConfirmDevice( D3DCAPS8* pCaps, DWORD dwBehavior,
                                          D3DFORMAT Format )
{
  return S_OK;
}

//-----------------------------------------------------------------------------
// Name: MsgProc()
// Desc: Message proc function to handle key and menu input
//-----------------------------------------------------------------------------
LRESULT CMyD3DApplication::MsgProc( HWND hWnd, UINT uMsg, WPARAM wParam,
                                    LPARAM lParam )
{
  switch(uMsg) {
    case WM_KEYDOWN:
      for (int q=0; q < 5; q++) {
        CreateWaterDroplet(RandomNumber(0,TEXTURESIZE), 
          RandomNumber(0,TEXTURESIZE), RandomNumber(5,15), RandomNumber(10,25), 
          m_pWaterActive, TEXTURESIZE, TEXTURESIZE);
      }
      break;
  }
  // Pass remaining messages to default handler
  return CD3DApplication::MsgProc( hWnd, uMsg, wParam, lParam );
}

?? 快捷鍵說明

復制代碼 Ctrl + C
搜索代碼 Ctrl + F
全屏模式 F11
切換主題 Ctrl + Shift + D
顯示快捷鍵 ?
增大字號 Ctrl + =
減小字號 Ctrl + -
亚洲欧美第一页_禁久久精品乱码_粉嫩av一区二区三区免费野_久草精品视频
韩国欧美国产一区| 欧美一区二区三区视频免费播放 | 7777女厕盗摄久久久| 26uuu成人网一区二区三区| 亚洲乱码国产乱码精品精小说| 美女mm1313爽爽久久久蜜臀| 欧美最猛黑人xxxxx猛交| 久久午夜羞羞影院免费观看| 五月天丁香久久| 99精品在线观看视频| 久久综合九色综合久久久精品综合| 一级精品视频在线观看宜春院 | 亚洲国产精品t66y| 蜜桃av噜噜一区二区三区小说| 99久久婷婷国产综合精品| 亚洲精品一区二区三区影院 | 欧美日韩精品高清| 国产精品家庭影院| 精品一区在线看| 日韩一卡二卡三卡国产欧美| 亚洲午夜视频在线| 欧美午夜视频网站| 亚洲欧美韩国综合色| 成人免费av网站| 日本一区二区三区四区在线视频 | 亚洲成人在线网站| 欧美在线视频日韩| 亚洲靠逼com| 99久久精品国产导航| 国产精品久久久久久久久久久免费看| 国产一区 二区| 国产亚洲成av人在线观看导航| 韩国精品主播一区二区在线观看| 欧美成人女星排名| 久久99国产精品免费网站| 日韩免费观看高清完整版| 九色|91porny| 欧美精品一区二区三区蜜臀| 国产在线麻豆精品观看| 久久精品亚洲一区二区三区浴池| 国产精品白丝jk黑袜喷水| 国产午夜精品一区二区三区嫩草 | 亚洲在线免费播放| 欧美日韩一卡二卡三卡| 日韩精品视频网| 日韩一二三四区| 国产精品一二三四五| 国产精品美女一区二区在线观看| 色先锋资源久久综合| 一区二区三区精品| 欧美喷水一区二区| 久久精品噜噜噜成人88aⅴ| 精品欧美一区二区在线观看| 国产成人8x视频一区二区| 中文字幕在线观看不卡视频| 欧美系列在线观看| 另类人妖一区二区av| 亚洲国产精品精华液2区45| 99精品一区二区| 日本伊人色综合网| 国产欧美日韩久久| 色94色欧美sute亚洲线路二 | 三级一区在线视频先锋| 日韩欧美一区二区视频| 国产成人综合视频| 亚洲欧美另类小说视频| 日韩一区二区影院| 国产91精品久久久久久久网曝门| 亚洲综合免费观看高清完整版| 日韩小视频在线观看专区| 成人亚洲一区二区一| 天天综合网 天天综合色| 国产欧美久久久精品影院| 欧美日韩亚洲综合在线| 国产原创一区二区三区| 一区二区三区在线观看网站| 亚洲精品一区二区三区香蕉| 欧美制服丝袜第一页| 国产成人av电影在线| 丝袜a∨在线一区二区三区不卡| 久久九九全国免费| 欧美日韩视频在线观看一区二区三区 | 欧美午夜不卡在线观看免费| 国产精一品亚洲二区在线视频| 亚洲国产一区二区在线播放| 欧美激情资源网| 这里只有精品99re| 91在线视频官网| 国产伦理精品不卡| 三级在线观看一区二区| 亚洲黄色免费电影| 中文字幕精品综合| 亚洲精品在线电影| 欧美一区二区三区四区高清| 欧美亚洲国产一区二区三区va | 欧美肥妇free| 在线视频你懂得一区| 国产99久久久国产精品潘金| 午夜伦理一区二区| 亚洲人成在线观看一区二区| 国产亚洲成av人在线观看导航| 91精品国产综合久久蜜臀 | 精品福利二区三区| 欧美丰满一区二区免费视频 | 日韩欧美aaaaaa| 欧美日韩国产首页在线观看| 99久久精品免费看国产免费软件| 高清不卡在线观看| 精品一区二区三区久久| 日本免费新一区视频| 亚洲大片免费看| 亚洲成人www| 丝袜诱惑制服诱惑色一区在线观看| 亚洲一区二区在线观看视频| 一区二区三区四区五区视频在线观看 | 99久久国产综合色|国产精品| 丁香天五香天堂综合| 国产成人自拍网| 成人午夜看片网址| av亚洲精华国产精华| 成人18精品视频| 一本一道综合狠狠老| 色诱视频网站一区| 日本精品一区二区三区高清| 欧美三电影在线| 欧美久久久久中文字幕| 日韩一区和二区| 欧美不卡激情三级在线观看| 久久久蜜桃精品| 国产精品女同一区二区三区| 亚洲视频一二三区| 一区二区三区四区视频精品免费 | 欧美日韩亚洲另类| 欧美一区二区三区在线观看视频| 日韩一级片在线观看| 精品久久99ma| 国产精品国产三级国产aⅴ中文| 亚洲柠檬福利资源导航| 亚洲制服丝袜一区| 久久精品国产在热久久| 国产91精品入口| 欧美视频第二页| 日韩欧美色电影| 中文字幕欧美日韩一区| 亚洲精品国产视频| 美腿丝袜亚洲三区| www.亚洲激情.com| 制服丝袜国产精品| 国产精品久久一卡二卡| 亚洲成人第一页| 国产成人福利片| 欧美亚洲动漫精品| 久久综合九色欧美综合狠狠 | 国产日韩精品久久久| 亚洲激情在线播放| 精品亚洲国内自在自线福利| 99视频有精品| 欧美精品一区二区久久婷婷| 亚洲色图一区二区| 精品一区二区三区久久| 欧美中文字幕一二三区视频| 欧美一区二区三级| 亚洲激情欧美激情| 国产伦精品一区二区三区免费| 91成人免费在线| 久久品道一品道久久精品| 亚洲国产美女搞黄色| 国产69精品久久777的优势| 欧美日韩国产电影| 中文字幕人成不卡一区| 国产一区二区精品久久99| 91高清视频在线| 国产精品理论片| 国产电影精品久久禁18| 制服丝袜成人动漫| 一区二区不卡在线视频 午夜欧美不卡在 | 精品国产伦理网| 婷婷国产在线综合| 91久久一区二区| 欧美韩国日本一区| 久久99久久99| 欧美一级免费大片| 午夜精品福利一区二区三区av| www.亚洲在线| 国产蜜臀97一区二区三区| 韩国毛片一区二区三区| 日韩欧美国产一区二区在线播放| 亚洲综合小说图片| 91福利在线看| 一区二区三区欧美| 色综合视频一区二区三区高清| 日本一区二区免费在线观看视频| 精品在线免费视频| 欧美mv和日韩mv的网站| 久久精品国产一区二区三区免费看| 欧美日韩色综合| 丝袜亚洲精品中文字幕一区| 欧美日韩国产在线播放网站| 首页综合国产亚洲丝袜| 欧美三级在线播放|