版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
1、第 8 章 透明融合与雾化效果在D3D中,“混合”发生在像素着色器阶段的下一阶段,即Output Merger Stage。整个场景在全部经历过像素着色器阶段后,对应于屏幕上每一点像素,可能有多个图元(Fragment)。如下图所示:该图中,场景中有三个点P1,P2,P3投影在屏幕上同一个点P。这样在像素着色器阶段后,针对P1,P2,P3将有三个图元与像素P对应。默认情况下,在渲染管线中,混合是被关闭的。这时为了确定像素P的最终显示颜色,主要依据是深度测试(这时暂不考虑模板测试等其他因素)。通过深度测试的图元将自身颜色替代后缓冲区中P点的当前颜色,未通过的图元被抛弃。 当混合功能被打开时,决定
2、最终颜色的方法有所不同。当一个图元通过深度测试后,并不是直接取代后缓冲区中P点的当前颜色,而是通过一定的比例因子与之进行插值(混合),并将结果作为P点的当前值。当然,未通过深度测试的图元依然被抛弃。这个是“混合”的一种最简单例子。除此之外,D3D针对混合阶段有非常多的配置,从而实现各种特殊效果。1. 混合方程 学习混合的第一步,就是要了解混合方程,计算alpha混合颜色的方程如下:该方程针对每个像素逐一进行。方程左边的C为混合结果,右边Csrc(我们称为源颜色)和Cdst(我们称为目标颜色)分别为即将要绘制的图元颜色值和后缓冲区中该像素当前的颜色;Fsrc和Fdst分别是两个颜色对应的混合因子
3、(通常赋值为表示半透明度的alpha值,也可以是属于枚举D3DBLEND的任意值,用来和Csrc相乘)。注意方程中的在这里为“分量相乘”(Componentwise multiplication),即针对颜色值中的R、G、B三种分量分别进行相乘。源颜色和目标颜色分别与相应的混合因子分量相乘后,将结果进行“op(混合操作)操作(缺少时,为D3DBLENDOP_ADD即相加运算),作为当前图元处理的最终颜色,并替换后缓冲区中该像素处的颜色。 图形显示中,对于alpha混合最普遍的使用方法是:把Fsrc赋值为D3DBLEND_SRCALPHA,即当前绘制像素的alpha值;把Fdst赋值为D3DBL
4、END_INVSRCALPHA,即1减去当前绘制像素的alpha值。 这样一来,计算公式等价与:C=(Csrcalphasrc)+(Cdst(1-alphasrc))2. 混合操作针对上述公式中的混合操作”op,在D3D中定义在如下枚举类型中:typedef enum _D3DBLENDOPD3DBLENDOP_ADD = 1,D3DBLENDOP_SUBTRACT = 2,D3DBLENDOP_REVSUBTRACT = 3,D3DBLENDOP_MIN = 4,D3DBLENDOP_MAX = 5,D3DBLENDOP_FORCE_DWORD = 0x7fffffff D3DBLENDOP
5、;我们省略各个变量的前缀D3DBLENDOP。ADD表示相加操作,即;SUBTRACT表示相关(目标-源),即;REV_SUBTRACT表示反射的相关(源-目标),即;MIN表示取源、目标颜色中较小值,即;MAX表示取源、目标颜色中较大值,即。注意:MIN和MAX操作与混合因子无关。同样,所有这些操作也适合于计算Alpha值。3. 混合因子针对方程中的混合因子F,在D3D中有如下几种:typedef enum _D3DBLENDD3DBLEND_ZERO = 1, 此外针对颜色混合,F为(0,0,0),针对alpha值,F为0。D3DBLEND_ONE = 2, 针对颜色混合为(1,1,1),
6、针对alpha值为1;D3DBLEND_SRCCOLOR = 3, 针对颜色混合为(Rs,Gs, Bs),针对alpha值为As;D3DBLEND_INVSRCCOLOR = 4, 针对颜色混合为(1-Rs,1-Gs,1-Bs),针对alpha值为1-As;D3DBLEND_SRCALPHA = 5, 针对颜色混合为(As,As,As),针对alpha值为As;D3DBLEND_INVSRCALPHA = 6, 针对颜色混合为(1-As,1-As,1-As),针对alpha值为1-AsD3DBLEND_DESTALPHA = 7, 针对颜色混合为(Ad,Ad,Ad),针对alpha值为Ad;D
7、3DBLEND_INVDESTALPHA = 8, 针对颜色混合为(1-Rd,1-Rd,1-Rd),针对alpha值为1-Ad;D3DBLEND_DESTCOLOR = 9, 针对颜色混合为(Rd,Gd,Bd),针对alpha值为AdD3DBLEND_INVDESTCOLOR = 10, 针对颜色混合为(1-Rd,1-Gd,1-Bd),针对alpha值为1-Ad;D3DBLEND_SRCALPHASAT = 11,D3DBLEND_BOTHSRCALPHA = 12,D3DBLEND_BOTHINVSRCALPHA = 13,D3DBLEND_BLENDFACTOR = 14, 此时的混合因子
8、为程序员指定的颜色值(R,G,B,A),针对颜色混合为(R,G,B),针对alpha值为AD3DBLEND_INVBLENDFACTOR = 15, 同上,为程序员指定颜色值,针对颜色混合为(1-R,1-G,1-B),针对alpha值为1-A。D3DBLEND_FORCE_DWORD = 0x7fffffff D3DBLEND;4混合的例子#include /-/ Desc: 全局变量/-LPDIRECT3D9 g_pD3D = NULL; /Direct3D对象LPDIRECT3DDEVICE9 g_pd3dDevice = NULL; /Direct3D设备对象LPD3DXMESH g_p
9、MeshWall = NULL; / 墙面网格对象LPD3DXMESH g_pMeshTorus = NULL; / 圆环体网格对象LPD3DXMESH g_pMeshTeapot = NULL; / 茶壶网格对象D3DMATERIAL9 g_Materials3 = 0; / 材质/-/ Desc: 设置世界矩阵/-/VOID SetWorldMatrix()/创建并设置世界矩阵/ D3DXMATRIX matWorld;/D3DXMATRIX matTrans;/D3DXMatrixTranslation(&matWorld,-2.0f,0.0f,0.0f); /平移/ g_pd3dDev
10、ice-SetTransform( D3DTS_WORLD, &matWorld );/-/ Desc: 设置观察矩阵和投影矩阵/-VOID SetupViewandProjMatrices() /建立并设置观察矩阵 D3DXVECTOR3 vEyePt( 0.0f, 0.5f,-8.0f ); D3DXVECTOR3 vLookatPt( 0.0f, 0.0f, 0.0f ); D3DXVECTOR3 vUpVec( 0.0f, 1.0f, 0.0f ); D3DXMATRIX matView; D3DXMatrixLookAtLH( &matView, &vEyePt, &vLookatP
11、t, &vUpVec ); g_pd3dDevice-SetTransform( D3DTS_VIEW, &matView ); /建立并设置投影矩阵 D3DXMATRIX matProj; D3DXMatrixPerspectiveFovLH( &matProj, D3DX_PI/4, 1.0f, 1.0f, 100.0f ); g_pd3dDevice-SetTransform( D3DTS_PROJECTION, &matProj );/-/ Desc: 设置材质和灯光/-VOID SetLight() /设置灯光 D3DXVECTOR3 vecDir; D3DLIGHT9 light;
12、 ZeroMemory( &light, sizeof(D3DLIGHT9) ); light.Type = D3DLIGHT_DIRECTIONAL; light.Diffuse.r = 1.0f; light.Diffuse.g = 1.0f; light.Diffuse.b = 1.0f; vecDir = D3DXVECTOR3(0, 0, 1); D3DXVec3Normalize( (D3DXVECTOR3*)&light.Direction, &vecDir ); light.Range = 1000.0f; g_pd3dDevice-SetLight( 0, &light );
13、 g_pd3dDevice-LightEnable( 0, TRUE );g_pd3dDevice-SetRenderState( D3DRS_LIGHTING, true );/-/ Desc: 初始化Direct3D/-HRESULT InitD3D( HWND hWnd )/创建Direct3D对象, 该对象用于创建Direct3D设备对象 if( NULL = ( g_pD3D = Direct3DCreate9( D3D_SDK_VERSION ) ) ) return E_FAIL;/设置D3DPRESENT_PARAMETERS结构, 准备创建Direct3D设备对象 D3DPR
14、ESENT_PARAMETERS d3dpp; ZeroMemory( &d3dpp, sizeof(d3dpp) ); d3dpp.Windowed = TRUE; d3dpp.SwapEffect = D3DSWAPEFFECT_DISCARD; d3dpp.BackBufferFormat = D3DFMT_UNKNOWN;/创建Direct3D设备对象 if( FAILED( g_pD3D-CreateDevice( D3DADAPTER_DEFAULT, D3DDEVTYPE_HAL, hWnd, D3DCREATE_SOFTWARE_VERTEXPROCESSING, &d3dpp
15、, &g_pd3dDevice ) ) ) return E_FAIL; / 长方体 D3DXCreateBox(g_pd3dDevice, 5.0f, 4.0f, 0.0f, &g_pMeshWall, NULL); g_Materials0.Ambient = D3DXCOLOR(0.6f, 0.6f, 0.6f, 1.0f); g_Materials0.Diffuse = D3DXCOLOR(1.0f, 1.0f, 1.0f, 1.0f); g_Materials0.Specular = D3DXCOLOR(0.1f, 0.1f, 0.1f, 1.0f); / 圆环体 D3DXCreat
16、eTorus(g_pd3dDevice, 0.4f, 0.8f, 20, 20, &g_pMeshTorus, 0); g_Materials1.Ambient = D3DXCOLOR(0.0f, 0.0f, 1.0f, 0.5f); g_Materials1.Diffuse = D3DXCOLOR(0.0f, 0.0f, 1.0f, 0.5f); g_Materials1.Specular = D3DXCOLOR(0.1f, 0.1f, 0.1f, 0.5f); / 茶壶 D3DXCreateTeapot(g_pd3dDevice, &g_pMeshTeapot, NULL); g_Mate
17、rials2.Ambient = D3DXCOLOR(1.0f, 0.0f, 0.0f, 0.5f); g_Materials2.Diffuse = D3DXCOLOR(1.0f, 0.0f, 0.0f, 0.5f); g_Materials2.Specular = D3DXCOLOR(0.1f, 0.1f, 0.1f, 0.5f);/设置剔出模式,为不剔出任何面(正面和方面) g_pd3dDevice-SetRenderState( D3DRS_CULLMODE, D3DCULL_NONE );/关闭光照处理, 默认情况下使用光照处理 g_pd3dDevice-SetRenderState(
18、 D3DRS_LIGHTING, FALSE);/设置观察和投影矩阵SetupViewandProjMatrices();/设置材质和灯光SetLight(); return S_OK;/-/ Desc: 释放创建对象/-VOID Cleanup()/释放三维字体网格模型if( pTextMesh != NULL) pTextMesh-Release();if(g_pMeshWall!=NULL)g_pMeshWall-Release();if(g_pMeshTorus!=NULL)g_pMeshTorus-Release();if(g_pMeshTeapot!=NULL)g_pMeshTea
19、pot-Release();/释放Direct3D设备对象 if( g_pd3dDevice != NULL ) g_pd3dDevice-Release();/释放Direct3D对象 if( g_pD3D != NULL ) g_pD3D-Release();/-/ Desc: 渲染图形/-VOID Render()/清空后台缓冲区 g_pd3dDevice-Clear( 0, NULL, D3DCLEAR_TARGET, D3DCOLOR_XRGB(255,255,255), 1.0f, 0 );/开始在后台缓冲区绘制图形 if( SUCCEEDED( g_pd3dDevice-Begi
20、nScene() ) ) / 开启Alpha融合 g_pd3dDevice-SetRenderState(D3DRS_ALPHABLENDENABLE, true); g_pd3dDevice-SetRenderState(D3DRS_SRCBLEND, D3DBLEND_SRCALPHA); g_pd3dDevice-SetRenderState(D3DRS_DESTBLEND, D3DBLEND_INVSRCALPHA);/ 设置世界变换矩阵 D3DXMATRIX matWorld, R; D3DXMatrixRotationY(&R, :timeGetTime() / 1000.0f);
21、/在后台缓冲区绘制图形/pTextMesh-DrawSubset(0); static FLOAT fOffset = 0.0f; static BOOL bIncrease = true; if (fOffset = 2.6f) bIncrease = false; fOffset =( bIncrease ? fOffset+0.05f : fOffset-0.05f);/ 绘制墙面 D3DXMatrixTranslation(&matWorld, 0.0f, 0.0f, 0.0f); D3DXMatrixMultiply(&matWorld, &matWorld, &R); g_pd3d
22、Device-SetTransform(D3DTS_WORLD, &matWorld); g_pd3dDevice-SetMaterial(&g_Materials0); g_pMeshWall-DrawSubset(0); / 绘制圆环体 D3DXMatrixTranslation(&matWorld, fOffset, 0.0f, 0.0f); D3DXMatrixMultiply(&matWorld, &matWorld, &R); g_pd3dDevice-SetTransform(D3DTS_WORLD, &matWorld); g_pd3dDevice-SetMaterial(&g
23、_Materials1); g_pMeshTorus-DrawSubset(0); / 绘制茶壶 D3DXMatrixTranslation(&matWorld, -fOffset, 0.0f, 0.0f); D3DXMatrixMultiply(&matWorld, &matWorld, &R); g_pd3dDevice-SetTransform(D3DTS_WORLD, &matWorld); g_pd3dDevice-SetMaterial(&g_Materials2); g_pMeshTeapot-DrawSubset(0);/结束在后台缓冲区绘制图形 g_pd3dDevice-En
24、dScene(); /将在后台缓冲区绘制的图形提交到前台缓冲区显示 g_pd3dDevice-Present( NULL, NULL, NULL, NULL );/-/ Desc: 消息处理/-LRESULT WINAPI MsgProc( HWND hWnd, UINT msg, WPARAM wParam, LPARAM lParam ) switch( msg ) case WM_DESTROY:Cleanup(); PostQuitMessage( 0 ); return 0; return DefWindowProc( hWnd, msg, wParam, lParam );/-/
25、Desc: 入口函数/-INT WINAPI WinMain( HINSTANCE hInst, HINSTANCE, LPSTR, INT )/注册窗口类 WNDCLASSEX wc = sizeof(WNDCLASSEX), CS_CLASSDC , MsgProc, 0L, 0L, GetModuleHandle(NULL), NULL, NULL, NULL, NULL, LClassName, NULL ; RegisterClassEx( &wc );/创建窗口 HWND hWnd = CreateWindow( LClassName, L三维字体, WS_OVERLAPPEDWI
26、NDOW, 200, 100, 600,500, GetDesktopWindow(), NULL, wc.hInstance, NULL );/初始化Direct3Dif( SUCCEEDED( InitD3D( hWnd ) ) ) /显示窗口ShowWindow( hWnd, SW_SHOWDEFAULT );UpdateWindow( hWnd );/进入消息循环MSG msg;ZeroMemory( &msg, sizeof(msg) );while( msg.message!=WM_QUIT )if( PeekMessage( &msg, NULL, 0U, 0U, PM_REMO
27、VE ) )TranslateMessage( &msg );DispatchMessage( &msg );elseRender(); /渲染图形 UnregisterClass( LClassName, wc.hInstance ); return 0;雾化效果雾化是指d3d游戏程序中模拟真实世界的云雾、水汽、灰尘等自然景观。在雾气较为严重的地区,往往距离观察点很近的物体比较清晰,而远处的物体随着距离的增加会变得越来越模糊。在游戏中运用雾化效果的深层原因是为了掩盖硬件的不足。在绘制每一帧场景时,由于受到目前硬件的限制,只能绘制一定距离内的场景,在这个距离之外即后裁剪面之后的部分是空白的,为
28、了弥补这个缺陷,很多游戏采用雾化来掩盖没有画出的场景。最简单的是深度雾,假设空间雾无处不在,且均匀分布。所以对于观察者而言,他所看到的雾溶度与他和目标物之间的距离是一个简单的线性关系,距离越远雾越浓。考虑到距离的运算需要开平方根计算,这样的计算量对于游戏这种需要实时反馈的应用显然太大了,所以需要进一步简化,距离直接使用目标物的Z值来表示。在Direct3D 中,雾化是通过将景物颜色与雾的颜色,以随物体到观察点距离增加而衰减的混合因子混合而实现的。d3d计算雾化的方法:Color=f*Colorscene+(1-f)*Colorfog Colorscene场景中物体本身颜色,Colorfog 定
29、义的雾颜色,f雾化混合因子。 两种雾化方法:顶点雾化和像素雾化。 顶点雾化是在d3d顶点坐标变换和光照流水线阶段实现,它根据物体多边形每个顶点与观察点的距离计算每个顶点雾化程序,并在多边形上面根据计算结果进行插值计算。而像素雾化在d3d像素绘制阶段实现,它通过每个像素对于观察点的深度计算雾化效果值,与顶点雾化比,像素雾化计算更为精确,但消耗更多。三种雾化公式:线性雾化,指数雾化,指数平方雾化。typedef enum _D3DFOGMODED3DFOG_NONE = 0,/禁用雾化D3DFOG_EXP = 1,/指数雾化 D3DFOG_EXP2 = 2,/ 指数平方雾化D3DFOG_LINEA
30、R = 3, /线性雾化 F=(end-d)/(end-start) /d:物体与眼睛之间的距离D3DFOG_FORCE_DWORD = 0x7fffffff D3DFOGMODE;线性雾化 F=(end-d)/(end-start), d为当前计算点与观察点距离指数雾化 F=1/ed*density, density表示雾的浓度指数平方雾化F=1/e(d*density)2两种雾化处理:基于深度的雾化处理和基于范围的雾化处理。基于深度是指两个点之间的深度(Z)差值,基于范围则是两点间的直线距离。Direct3D默认的是基于深度的雾化。可设置基于范围的雾化,但要先检测设备是否支持:D3DCAP
31、S9 caps; g_pd3dDevice-GetDeviceCaps(&caps); if(caps.RasterCaps & D3DPRASTERCAPS_FOGRANGE) g_pd3dDevice-SetRenderState(D3DRS_RANGEFOGENABLE, true);雾化处理步骤:1、Direct3D默认禁用雾化效果,可以激活雾化:g_pd3dDevice-SetRendState( D3DRS_FOGENABLE, true );2、设置雾的颜色:g_pd3dDevice-SetRendState( D3DRS_FOGCOLOR, 0xffffffff); /白色3、
32、设置雾化计算公式:g_pd3dDevice-SetRenderState(D3DRS_FOGVERTEXMODE, D3DFOG_LINEAR);g_pd3dDevice-SetRenderState(D3DRS_FOGSTART, *(DWORD*)(&start); g_pd3dDevice-SetRenderState(D3DRS_FOGEND, *(DWORD*)(&end); 或 g_pd3dDevice-SetRenderState(D3DRS_FOGVERTEXMODE, D3DFOG_EXP); float density=0.01f;g_pd3dDevice-SetRende
33、rState(D3DRS_FOGDENSITY, (DWORD *)&density); 若设置为像素雾: g_pd3dDevice-SetRenderState(D3DRS_FOGTABLEMODE, D3DFOG_LINEAR);完整代码:#include #include #pragma comment(lib, d3d9.lib)#pragma comment(lib, d3dx9.lib)LPDIRECT3D9g_pD3D = NULL;LPDIRECT3DDEVICE9g_pd3dDevice = NULL;LPDIRECT3DVERTEXBUFFER9 g_pVB = NULL;
34、LPDIRECT3DTEXTURE9g_Texture = NULL;struct CUSTOMVERTEX float x, y, z; unsigned long color; float u, v;#define D3DFVF_CUSTOMVERTEX (D3DFVF_XYZ|D3DFVF_DIFFUSE|D3DFVF_TEX1)/-/ Desc: 设置观察矩阵和投影矩阵/-VOID SetupViewandProjMatrices() /建立并设置观察矩阵 D3DXVECTOR3 vEyePt( 0.0f, 0.0f,-3.0f ); D3DXVECTOR3 vLookatPt( 0.
35、0f, 0.0f, 0.0f ); D3DXVECTOR3 vUpVec( 0.0f, 1.0f, 0.0f ); D3DXMATRIX matView; D3DXMatrixLookAtLH( &matView, &vEyePt, &vLookatPt, &vUpVec ); g_pd3dDevice-SetTransform( D3DTS_VIEW, &matView ); /建立并设置投影矩阵 D3DXMATRIX matProj; D3DXMatrixPerspectiveFovLH( &matProj, D3DX_PI/4, 1.0f, 1.0f, 100.0f ); g_pd3dD
36、evice-SetTransform( D3DTS_PROJECTION, &matProj );HRESULT InitD3D(HWND hWnd) /创建Direct3D对象, 该对象用于创建Direct3D设备对象 if( NULL = ( g_pD3D = Direct3DCreate9( D3D_SDK_VERSION ) ) ) return E_FAIL;/设置D3DPRESENT_PARAMETERS结构, 准备创建Direct3D设备对象 D3DPRESENT_PARAMETERS d3dpp; ZeroMemory( &d3dpp, sizeof(d3dpp) ); d3d
37、pp.Windowed = TRUE; d3dpp.SwapEffect = D3DSWAPEFFECT_DISCARD; d3dpp.BackBufferFormat = D3DFMT_UNKNOWN;/创建Direct3D设备对象 if( FAILED( g_pD3D-CreateDevice( D3DADAPTER_DEFAULT, D3DDEVTYPE_HAL, hWnd, D3DCREATE_SOFTWARE_VERTEXPROCESSING, &d3dpp, &g_pd3dDevice ) ) ) return E_FAIL; / Start and end distance of
38、 the fog. float start = 2, end = 8; / 设置雾化属性. g_pd3dDevice-SetRenderState(D3DRS_FOGENABLE,1);/ 启用雾效果/ 设置要渲染的雾的期望颜色(这里为灰色) g_pd3dDevice-SetRenderState(D3DRS_FOGCOLOR, D3DCOLOR_XRGB(128, 128, 128);/ 使用顶点雾 g_pd3dDevice-SetRenderState(D3DRS_FOGVERTEXMODE, D3DFOG_LINEAR);/ 指定雾的开始距离和终点距离 g_pd3dDevice-SetR
39、enderState(D3DRS_FOGSTART, *(DWORD*)(&start); g_pd3dDevice-SetRenderState(D3DRS_FOGEND, *(DWORD*)(&end);/ Pixel Fog 像素雾 / g_pd3dDevice-SetRenderState(D3DRS_FOGTABLEMODE, D3DFOG_LINEAR);/ 如果支持,则启用基于距离的雾/ D3DCAPS9 caps;/ g_pd3dDevice-GetDeviceCaps(&caps);/if(caps.RasterCaps & D3DPRASTERCAPS_FOGRANGE)
40、/ g_pd3dDevice-SetRenderState(D3DRS_RANGEFOGENABLE, true); /设置剔出模式为不剔出任何面(正面和反面) g_pd3dDevice-SetRenderState( D3DRS_CULLMODE, D3DCULL_NONE );/关闭光照处理, 默认情况下启用光照处理 g_pd3dDevice-SetRenderState( D3DRS_LIGHTING, FALSE );/设置观察和投影矩阵SetupViewandProjMatrices();return S_OK;HRESULT InitVB()/顶点数据 CUSTOMVERTEX o
41、bjData = -2.5f, -0.5f, -6.0f, D3DCOLOR_XRGB(255,255,255), 0.0f, 1.0f, 2.5f, -0.5f, -6.0f, D3DCOLOR_XRGB(255,255,255), 1.0f, 1.0f, 2.5f, -0.5f, 6.0f, D3DCOLOR_XRGB(255,255,255), 1.0f, 0.0f, 2.5f, -0.5f, 6.0f, D3DCOLOR_XRGB(255,255,255), 1.0f, 0.0f, -2.5f, -0.5f, 6.0f, D3DCOLOR_XRGB(255,255,255), 0.0f
42、, 0.0f, -2.5f, -0.5f, -6.0f, D3DCOLOR_XRGB(255,255,255), 0.0f, 1.0f ;/创建顶点缓冲区 if(FAILED(g_pd3dDevice-CreateVertexBuffer(sizeof(objData), 0, D3DFVF_CUSTOMVERTEX, D3DPOOL_DEFAULT,&g_pVB, NULL) return E_FAIL; /填充顶点缓冲区 void *ptr; if(FAILED(g_pVB-Lock(0, sizeof(objData),(void*)&ptr, 0) return E_FAIL; mem
43、cpy(ptr, objData, sizeof(objData); g_pVB-Unlock();if(D3DXCreateTextureFromFile(g_pd3dDevice, LFloor.bmp, &g_Texture) != D3D_OK) return false;return S_OK;/-/ Desc: 释放创建对象/-VOID Cleanup()if(g_pd3dDevice != NULL) g_pd3dDevice-Release(); if(g_pD3D != NULL) g_pD3D-Release(); if(g_pVB!= NULL)g_pVB-Release(); if(g_Texture != NULL) g_Texture-Release();void Render() / Clear the backbuffer. g_pd3dDevice-Clear(0, NULL, D3DCLEAR_TARGET, D3DCOLOR_XRGB(128,120,128
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 铝型材氧化、电泳生产车间工艺操作规程
- 沙洗砂生产线操作规程
- 2025年恩替卡韦合作协议书
- 2026年甘肃白银社区工作者考试试题解析及答案
- 2025年山东(专升本)历史考试题库(含答案)
- 2025年印铁油墨合作协议书
- 楼顶广告牌抗风检测技师(初级)考试试卷及答案
- 矿山工程师考试试卷及答案
- 版权登记代理技师试卷及答案
- 网络信息安全风险评估与防范指南
- 湖北省圆创高中名校联盟2026届高三2月第三次联合测评生物试卷(含答案解析)
- 2026年赣州职业技术学院单招职业技能考试备考试题附答案详解
- 雇佣老人看门协议书
- 赠与财物协议书模板
- 高等学校学生食堂伙食结构及成本核算指导意见
- 高一年级英语上册阅读理解专项练习及答案(50篇)
- 颅内肿瘤放疗护理管理
- 低温环境透水混凝土施工工艺方案
- 火电企业设备金属健康状态监测与防控体系
- 2025年全国中级经济师考试真题卷含答案经济基础知识
- 锻造加热工作业指导书
评论
0/150
提交评论