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