关于RenderTarget注意事项

  关于RenderTarget,其实包括图像渲染缓冲和深度缓冲,你可以只设置图像缓冲,忽略深度缓冲,那么这时候深度缓冲将使用原先的深度缓冲,也就是使用D3DPRESENT_PARAMETERS指定的深度缓冲,渲染完毕之后再将深度缓冲置1.这里有个问题,也就是深度缓冲的大小问题,深度缓冲的尺寸必须比你自己指定的RenderTarget相等,或者更大,因为每个像素都要做深度测试,深度缓冲尺寸太小就不能够达到这个目的了。创建的RenderTarget必须使用D3DPOOL_DEFAULT标志。
  当你使用
Code
创建窗口时,其中的 nWidth   nHeight整个窗口的大小(包括标题栏),而实际的客户区略小,因此,你的默认深度缓冲实际上是小于nWidth 和 nHeight的,因此,当你指定nWidth X nHeight大小的渲染纹理时,如果没有指定新的深度缓冲,那么,将会出现错误,直观一点就是就算你Clear整个Buffer仍然可以在画面上看到很多小碎片一样的图形,有两种方法解决这个问题。
1.指定新的深度缓冲,大小为RenderTarget的大小。

2.

    RECT rect = {00, SCREENSIZE, SCREENSIZE};
    AdjustWindowRect(
&rect, WS_OVERLAPPEDWINDOW, FALSE);

    
int width = rect.right - rect.left;
    
int height = rect.bottom - rect.top;
使用新的width和height来创建窗口。

  关于IDirect3DDevice9::CreateRenderTarget和IDirect3DDevice9::CreateTexture()前者可以使用硬件的抗锯齿,而后者不能。
  关于  PIX Experiment File Version Mismatch Problem 。路径中不能包含中文。







posted @ 2009-10-03 15:38  ttthinks  阅读(1416)  评论(0编辑  收藏  举报