请问如何取Direct3D中已加载的Texture的数据
如果是一般的Texture, 我知道可以用LockRect到一个矩形区域里面,把数据取出来, 但问题是如果一个Texture初始设的习属性是D3DUSAGE_RENDERTARGET, 那么它是不可以LockRect的, 这种情况下我怎么能得到这个纹理里面的像素值呢? 谢谢! 问题点数:100、回复次数:6Top
1 楼Analyst()回复于 2006-06-03 00:21:46 得分 0
先创建一块和RenderTarget同样大小同样象素类型的内存surface,然后用IDirect3DDevice9::GetRenderTargetData把RenderTarget复制过来。Top
2 楼Mypiger(深圳 step by step)回复于 2006-06-03 14:42:43 得分 0
D3DLOCKED_RECT d3dlr;
m_pd3dTexture->LockRect( 0, &d3dlr, NULL, 0 );
LPWORD pBits = (LPWORD)d3dlr.pBits; // 颜色数据
m_pd3dTexture->UnlockRect( 0 );Top
3 楼why54(小坏蛋)回复于 2006-06-04 16:26:18 得分 0
关注Top
4 楼wu_chung_tang(雲遊僧)回复于 2006-06-05 07:45:29 得分 0
不讓lock是因為不讓更改內容 不讓更改copy總歸是可以的 連backbuffer都可以copyTop
5 楼jk20012001(jack)回复于 2006-06-05 10:58:44 得分 0
很多函数都可以做这种复制操作的,比如UpdateSurface、StretchRect、D3DXLoadSurfaceFromSurface等等等等Top
6 楼why54(小坏蛋)回复于 2006-06-05 18:27:53 得分 0
IDirect3DSurface9 *tmp = NULL;
IDirect3DSurface9 *back = NULL;
//生成固定颜色模式的离屏表面(Width和 Height为屏幕或窗口的宽高)
D3D9Device->CreateOffscreenPlainSurface(Width, Height, D3DFMT_A8R8G8B8, D3DPOOL_DEFAULT, &tmp, NULL);
// 获得BackBuffer的D3D Surface
D3D9Device->GetBackBuffer(0, 0, D3DBACKBUFFER_TYPE_MONO, &back);
// Copy一下,,需要时转换颜色格式
D3DXLoadSurfaceFromSurface(tmp, NULL, NULL, back, NULL, NULL, D3DX_FILTER_NONE, 0);
Top




