渲染到纹理的几个疑惑

千分散尽还复来 2013-07-07 01:21:38
1、渲染到纹理的位置应当是在哪儿?
最初,我看到DXUT做的渲染是在BeginScene()和EndScene()之间,我以前都是照样学的,可是在渲染CUBE贴图时就遇到了问题,总提示出错;我就把它放在BeginScene()之前渲染,不再出现错误信息;我把其他的贴图也放在BeginScene()之前,也没有发现错误。可是CUBE贴图必须最先渲染,然后才能渲染其他贴图,不然虽然程序依然运行,但输出结果总提示某处出现了异常;然而DXUT的示例也有把渲染CUBE贴图放在BeginScene()和EndScene()之间的,它就没有出问题:它用类包装得我没有耐心看下去。所以我想知道合理的做法是在什么位置渲染到纹理。
2、D3DXCreateCubeTexture()和pd3dDevice->CreateCubeTexture()有什么区别?
我用两个函数创建的贴图好像都一样,没发现有什么不同。而且MSDN文档中也说用哪个都行,岂不是可以精简掉一个?
3、从网上找了一段话,没看懂:“渲染到纹理能让你做很多事情,但是你必须注意一些限制。首先深度缓冲区必须总是大于或等于渲染对象的大小。此外,渲染对象和深度缓冲区的格式必须一致。”深度缓冲区和对象的大小是什么;渲染对象的格式又是什么?“必须一致”是什么意思?

多谢过路高手解惑!
...全文
508 5 打赏 收藏 转发到动态 举报
写回复
用AI写文章
5 条回复
切换为时间正序
请发表友善的回复…
发表回复
  • 打赏
  • 举报
回复
看来,弄清这些问题,需要了了解DX的历史,了解D3D到D3DX过程中有哪些简化与变化。
ljb1672 2013-09-19
  • 打赏
  • 举报
回复
多渲染目标和渲染到立方体纹理更复杂,可以参见http://download.csdn.net/user/ljb1672,应该可以找到你要的答案。
  • 打赏
  • 举报
回复
主要说说第1个问题吧。 我渲染CUBE贴图的方法应该没有错,是这样的,请楼上审查:

void RenderCubeTexture(LPDIRECT3DDEVICE pDevice3D , D3DXMATRIX* pViewMatrix[6] , D3DXMATRIX*       pProjMatrix )
{
	PDIRECT3DSURFACE9 pSur ;
	pCubeTexture -> GetCubeMapSurface((D3DCUBEMAP_FACES) 0 , 0 , &pSur ) ;
	pDevice3D -> SetRenderTarget( 0 , pSur ) ;
	if ( pSur_DS ) pDevice3D -> SetDepthStencilSurface( pSur_DS ) ;
	
	if(SUCCEEDED(g_pRenderToEnvMap ->BeginCube( pCubeTexture ))) 
	{
		for ( int j = 0 ; j < 6 ; j ++ )
		{
			g_pRenderToEnvMap ->Face( ( D3DCUBEMAP_FACES) j , D3DX_DEFAULT ) ;
			pDevice3D->Clear(0, NULL, D3DCLEAR_TARGET | D3DCLEAR_ZBUFFER, D3DXCOLOR(1.f,1.f,1.f,1.f), 1.f, 0) ;//This is correct
			RenderCubeScene( pDevice3D , pViewMatrix[j] , pProjMatrix )  ;
		}
		g_pRenderToEnvMap -> End( D3DX_FILTER_NONE ) ;
	}
	SAFE_RELEASE ( pSur ) ;
}
代码中的变量名比较直白,可能没什么异义,我没有再注释。 我把这个RenderCubeTexture函数插入主程序中去执行,在BeginScene()和EndScreen()之间它就老提示出错,我到处找原因,就找到了http://bbs.csdn.net/topics/350268459 于是我就把这个函数放到BeginScene()之前执行,它不再提示出错,看起来效果也不错,就是噪点无法容忍。 我现在都不知道该怀疑什么了。请楼上费心审查指教。谢谢!
KETOO 2013-07-13
  • 打赏
  • 举报
回复
1.第一个问题要视情况而定,异常引起的原因有多种.但是CUBE的位置的确是在BeginScene()和EndScreen()之间。 2.随便用一个就可以了,建议使D3DXCreateCubeTexture() 3.深度缓冲区是指进行像素深度检测时的一款匹配区域,你需要看一下3d模型绘制基础原理,决定当前绘制像素是否替换已经绘制的像素,另外一个问题希望你能把英文给贴出来,我的理解是生成的深度图信息要与深度缓冲区的格式一致。

8,303

社区成员

发帖
与我相关
我的任务
社区描述
游戏开发相关内容讨论专区
社区管理员
  • 游戏开发
  • 呆呆敲代码的小Y
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧