|
我的目的是要将一个带有alpha的图片,渲染到一张纹理上,并且在渲染的时候,我需要调整纹理的整体alpha(修改顶点颜色的alpha分量)
结果渲染出的纹理比正确结果偏暗:
以下是实现代码:
- void MainLoop()
- {
- g_D3DInfo.m_pD3DDevice->Clear(0, NULL, D3DCLEAR_TARGET|D3DCLEAR_ZBUFFER, 0xFFC8C8C8, 1.0f, 0);
- g_D3DInfo.m_pD3DDevice->BeginScene();
- g_D3DInfo.m_pD3DDevice->SetFVF(D3DFVF_2D);
- static bool bRTT = true;
- IDirect3DSurface9* pOldSurface = NULL;
- IDirect3DTexture9* pDstTexture = NULL;
- if (bRTT)
- {
- // 用于RTT的纹理必须是D3DUSAGE_RENDERTARGET、D3DPOOL_DEFAULT参数
- if (SUCCEEDED(D3DXCreateTexture(g_D3DInfo.m_pD3DDevice, 1024, 1024, 0, D3DUSAGE_RENDERTARGET, D3DFMT_A8R8G8B8, D3DPOOL_DEFAULT, &pDstTexture)))
- {
- g_D3DInfo.m_pD3DDevice->GetRenderTarget(0, &pOldSurface); // 保存当前的渲染目标表面
- IDirect3DSurface9* pDstSurface = NULL;
- pDstTexture->GetSurfaceLevel(0, &pDstSurface);
- g_D3DInfo.m_pD3DDevice->SetRenderTarget(0, pDstSurface); // 设置渲染目标
- g_D3DInfo.m_pD3DDevice->Clear(0, NULL, D3DCLEAR_TARGET|D3DCLEAR_ZBUFFER, 0x00000000, 1.0f, 0);
- }
- else
- {
- bRTT = false;
- }
- }
- // 渲染部分
- {
- D3D_RenderTexture(g_pTexture, g_ImgWidth, g_ImgHeight, g_TextureWidth, g_TextureHeight, 100, 100, 0, 0, NULL, 0x7FFFFFFF);
- }
- if (bRTT)
- {
- g_D3DInfo.m_pD3DDevice->SetRenderTarget(0, pOldSurface); // 恢复渲染目标表面
- pOldSurface = NULL;
- // 输出最终纹理
- {
- ID3DXBuffer* pD3DXBuffer = NULL;
- D3DXCreateBuffer(1024*1024*4 + sizeof(STGA_HEADER), &pD3DXBuffer);
- D3DXSaveTextureToFileInMemory(&pD3DXBuffer, D3DXIFF_TGA, pDstTexture, NULL);
- FILE* pFile = NULL;
- fopen_s(&pFile, "out.tga", "wb");
- fwrite(pD3DXBuffer->GetBufferPointer(), pD3DXBuffer->GetBufferSize(), 1, pFile);
- fclose(pFile);
- pD3DXBuffer->Release();
- }
- pDstTexture->Release();
- bRTT = false;
- }
- g_D3DInfo.m_pD3DDevice->EndScene();
- g_D3DInfo.m_pD3DDevice->Present(NULL, NULL, NULL, NULL);
- }
复制代码
如何才能得到正确的渲染结果?
|
|