多纹理使用像素着色器处理后,如何获得生成后的纹理图片,类似代码如下:
m_nVideoTexture = 3;
m_pVideoTexture[0] = m_Device.createTexture(iWidth , iHeight , D3DFMT_L8);
m_pVideoTexture[1] = m_Device.createTexture(iWidth/2 , iHeight/2 , D3DFMT_L8);
m_pVideoTexture[2] = m_Device.createTexture(iWidth/2 , iHeight/2 , D3DFMT_L8);m_Device.SetPixelShader(pShader1);
m_Device.SetPixelShader(pShader2);
m_Device.SetPixelShader(pShader3);
m_Device.DrawPrimitive(...);我的理解是,三张纹理是黑白的图象,着色后生成一个有色彩的图像,并且大小为iWidth,iHeight.我想知道的是如何获得生成后的纹理?
我尝试过使用GetBackBuffer或者GetRenderTarget的方法,发现获得的图片已经被放大/缩小过了(根据目标窗体的大小).
不符合我的要求,我希望能获得iWidth,iHeight大小生成的纹理。谢谢!

解决方案 »

  1.   

    To:dengzikun
    谢谢你的回复, 首先, 我要获得纹理的图片的是一个第三方的程序,其次, 我也尝试使用CreateTexture创建纹理,GetSurfaceLevel获得纹理的Surface,然后把页面设置为RenderTarget,然后通过GetRenderTarget把图片保存下来,但是他的图片大小是已经根据目标窗体缩放过的,不是固定的。To:你所说的获取值得是什么, 存盘?
    是的,我通过获得device->GetRenderTarget,获得的图片大小是目标窗体的大小,也就是说已经被缩放过了,原始“合成"的Texture大小是固定的,比如说,640*480, 但是RenderTarget大小是屏幕的尺寸(比如1024*768), 实际的RGB像素矩阵是位于RenderTarget的矩阵的左上角,大小是根据目标窗体的大小而定,所以不固定,我如果要把获得的RGB像素矩阵写进avi文件的话,必须要做缩放处理,太耗CPU..
      

  2.   

    1.把RenderTarget设置为你的纹理,然后渲染。
    2.把RenderTarget设置为缺省的,然后渲染。
      

  3.   

    试过了,即便我设置了RenderTarget为自定义的纹理,得到的结果也是被缩放过的。即便我在m_Device.SetPixelShader(pShader3);之后保存RenderTarget里的内容也是被缩放过的,郁闷