游戏开发论坛

 找回密码
 立即注册
搜索
查看: 1234|回复: 0

在做GLOW后处理的时候出了问题。

[复制链接]

53

主题

98

帖子

101

积分

注册会员

Rank: 2

积分
101
发表于 2009-5-12 13:49:00 | 显示全部楼层 |阅读模式
HRESULT EvgDeviceD3D8::Render()
{
        HRESULT hr;
        LPCSTR                pTechnique  = NULL;
        EvShader shader;  

        if( SUCCEEDED( m_pd3dDevice->BeginScene() ) )
        {
      
        
                //--------------设置QUAD--------------------------------------------------------------
                m_quadPt[0].c = 0xff00ff00;
                m_quadPt[0].t = EvVertex2(0.0f, 0.0f);
               
                m_quadPt[1].c = 0xff00ff00;
                m_quadPt[1].t = EvVertex2(0.0f, 1.0f);
       
                m_quadPt[2].c = 0xff00ff00;
                m_quadPt[2].t = EvVertex2( 1.0f, 0.0f);
               
                m_quadPt[3].c = 0xff00ff00;
                m_quadPt[3].t = EvVertex2( 1.0f, 0.0f);
               
                m_quadPt[4].c = 0xff00ff00;
                m_quadPt[4].t = EvVertex2(0.0f, 1.0f);
       
                m_quadPt[5].c = 0xff00ff00;
                m_quadPt[5].t = EvVertex2(1.0f, 1.0f);
                m_quadPt[0].v = EvVertex4(-0.5f,                          -0.5f,                         1.0f,  1.0f);
                m_quadPt[1].v = EvVertex4(-0.5,                         m_d3dsdBackBuffer.Height-0.5f,   1.0f,  1.0f);
                m_quadPt[2].v = EvVertex4(m_d3dsdBackBuffer.Width-0.5f,   -0.5f,                         1.0f,  1.0f);
                m_quadPt[3].v = EvVertex4(m_d3dsdBackBuffer.Width-0.5f,   -0.5f,                         1.0f,  1.0f);
                m_quadPt[4].v = EvVertex4(-0.5,                         m_d3dsdBackBuffer.Height-0.5f,   1.0f,  1.0f);
                m_quadPt[5].v = EvVertex4(m_d3dsdBackBuffer.Width-0.5f,        m_d3dsdBackBuffer.Height-0.5f,   1.0f,  1.0f);
                //--------------------------------------------------------------------------------------
                if(m_pEffectFileName == "Glow.fx")
                {
                        if (m_texPostProcessID==0)
                        {
                                m_texPostProcessID = CreateTextureRenderTarget(m_d3dsdBackBuffer.Width, m_d3dsdBackBuffer.Height, true);
                        }
                        if (m_texPostProcessRenderTarget==0)
                        {
                                m_texPostProcessRenderTarget = CreateTextureRenderTarget(m_d3dsdBackBuffer.Width, m_d3dsdBackBuffer.Height, true);
                        }
                        if(m_texPostProcessRenderTarget1 == 0)
                        {
                                m_texPostProcessRenderTarget1 = CreateTextureRenderTarget(m_d3dsdBackBuffer.Width, m_d3dsdBackBuffer.Height, true);
                        }

                }

                EvgDevice::SetRenderTarget(m_texPostProcessID, -1);
        
        if(FAILED( hr=m_pd3dDevice->Clear( 0L, NULL, dwFlag, m_dwClearColor, 1.0f, 0L )))
        {
              return DisplayErrorMsg(hr, MSGERR_APPMUSTEXIT);
        }
      

                this->OnBeginRender();
                //开始渲染场景
                this->OnRenderScene();
       
                {
                        SaveRenderTargetToFile("d:/a.bmp"); //这里保存之后,a.bmp中的内容就是场景的内容
                        RestoreRenderTarget();
                       
                        if(m_pEffectFileName == "Glow.fx")
                        {
                               
                                //第一遍渲染,得到场景的亮度
                                UINT passNum = 0;
                                EvgDevice::SetRenderTarget(m_texPostProcessRenderTarget, -1);
                                m_pd3dDevice->Clear( 0L, NULL, D3DCLEAR_TARGET | D3DCLEAR_ZBUFFER, m_dwClearColor,1.0f, 0L );
                               
                                //以下是设置cullMode 为NULL,顶点的格式为:XYZW,DIFFUSE和TEXCOORD
                                shader.bTwoSide = true;
                                m_bCullFace = TRUE;
                                SetVertexFormat(EVG_TRANSFORMED_VCT);
                                shader.iNumStage = 1;
                                shader.Shaders[0].SetTexture(m_texPostProcessID);
                                SetShader(&shader);
                                //-------------------设置完毕---------------------------------------
                                pTechnique = GetTechniqueByName(m_pCurEffect,"RenderScene");
                                UseTechnique(m_pCurEffect,pTechnique);
                                SetTexture(m_pCurEffect,"g_sceneTex",m_texPostProcessID);
                                CommitChanges(m_pCurEffect);
                               
                                BeginTechnique(m_pCurEffect,&passNum);       
                                for(int i = 0; i<passNum; i++)
                                {
                                        BeginPass(m_pCurEffect,i);
                                        m_pd3dDevice->DrawPrimitiveUP(D3DPT_TRIANGLELIST,2,(void*)&m_quadPt[0],sizeof(EvgNVertexVCT));
                                        EndPass(m_pCurEffect);
                                }
                                EndTechnique(m_pCurEffect);
                                RestoreShader(&shader);
                                SaveRenderTargetToFile("d:/b.bmp");  //这里保存之后,b.bmp图中的内容为清除色,已经不对了
                                RestoreRenderTarget();
                               
                                //因前面有问题,后面代码就不用看了,肯定是不对的
                                //前面为什么没有渲染到m_texPostProcessRenderTarget纹理中?

                        }
                }
                //开始渲染UI
                this->OnRenderUI();
               
                this->OnEndRender();
        }
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

作品发布|文章投稿|广告合作|关于本站|游戏开发论坛 ( 闽ICP备17032699号-3 )

GMT+8, 2025-12-20 09:22

Powered by Discuz! X3.4

Copyright © 2001-2021, Tencent Cloud.

快速回复 返回顶部 返回列表