第6讲 透明纹理

上传人:汽*** 文档编号:486784251 上传时间:2023-06-24 格式:DOCX 页数:8 大小:157.83KB
返回 下载 相关 举报
第6讲 透明纹理_第1页
第1页 / 共8页
第6讲 透明纹理_第2页
第2页 / 共8页
第6讲 透明纹理_第3页
第3页 / 共8页
第6讲 透明纹理_第4页
第4页 / 共8页
第6讲 透明纹理_第5页
第5页 / 共8页
点击查看更多>>
资源描述

《第6讲 透明纹理》由会员分享,可在线阅读,更多相关《第6讲 透明纹理(8页珍藏版)》请在金锄头文库上搜索。

1、透明纹理贴图技术/*x* *x* *x* *x* *x* *x* *x* *x* *x* *x* *x* *x* *x* *x* *x* *x* *x* *x* *x* *x* *x* *x* *x* *x* *x* *x* *x* *x* *x* *x* *x* *x* *x* *x* *x* *x* *x* *x* *x* *x* *x* *x* *x* *x* *x* *x* *x* *x* *x* *x* *x* *x* *x* *x* *x* *x* *x* *x* *x* *x* *x* *x* *x* *x* *x* *x* *x* *x* *x* *x* *x* *x* *x*

2、/|S|S|S|S|S|S|S|Sjsjsjs/透明纹理贴图实例*x*x*x*x*x*x*x* *x* *x* *x* *x* *x* *x* *x* *x* *x* *x* *x* *x* *x* *x* *x* *x* *x* *x* *x* *x* *x* *x* *x* *x* *x* *x* *x* *x* *x* *x* *x* *x* *x* *x* *x* *x* *x* *x* *x* *x* *x* *x* *x* *x* *x* *x* *x* *x* *x* *x* *x* *x* *x* *x* *x* *x* *x* *x* *x* *x* *x* *x* *x*

3、*x* *x* *x* *x* *x* *x* *x* *x* *x* *x* *x* *x* *x* *x* *x* *x* *x* / |S |S |S |S |S|S |S |S |S |S|S |S |S |S |S|S |S |S |S |S|S |S |S |S |S|S |S |S |S |S|S |S |S |S |S|S|S|S|S|S|S|Sjsjsjs/#include #include d3d9.h#include d3dx9.hLPDIRECT3D9g_pD3D= NULL;/Direct3D 对象LPDIRECT3DDEVICE9g_pd3dDevice = NUL

4、L;/Direct3D 设备对象LPDIRECT3DVERTEXBUFFER9LPDIRECT3DVERTEXBUFFER9LPDIRECT3DTEXTURE9LPDIRECT3DTEXTURE9g_pFloorVB = NULL; /顶点缓冲区对象 g_pTreeVB = NULL; /顶点缓冲区对象 g_pFloorTexture = NULL;g_pTreeTexture = NULL;/ The 3D vertex format and descriptorstruct CUSTOMVERTEXfloat x, y, z; / 3D coordinatesfloat u, v; / t

5、exture coordinates;#define D3DFVF_CUSTOMVERTEX (D3DFVF_XYZ|D3DFVF_TEX1)/ Desc: 创建场景图形/HRESULT InitGeometry()BYTE* vertex_ptr;CUSTOMVERTEX billboard_verts = -40.0f, 80.0f, 0.0f, 0.0f, 0.0f , 40.0f, 80.0f, 0.0f, 1.0f, 0.0f , -40.0f, 0.0f, 0.0f, 0.0f, 1.0f , 40.0f, 0.0f, 0.0f, 1.0f, 1.0f ;CUSTOMVERTEX

6、floor_verts = -100.0f, 0.0f, 100.0f, 0.0f, 0.0f , 100.0f, 0.0f, 100.0f, 1.0f, 0.0f , -100.0f, 0.0f, -100.0f, 0.0f, 1.0f , 100.0f, 0.0f, -100.0f, 1.0f, 1.0f ;/创建树的顶if(FAILED(g_pd3dDevice-CreateVertexBuffer(sizeof(billboard_verts), 0,D3DFVF_CUSTOMVERTEX, D3DPOOL_DEFAULT, &g_pTreeVB, NULL)return FALSE;

7、if(FAILED(g_pTreeVB-Lock(0, 0, (void*)&vertex_ptr, 0)return FALSE;memcpy(vertex_ptr, billboard_verts, sizeof(billboard_verts); g_pTreeVB-Unlock();/ 创建地面顶点 if(FAILED(g_pd3dDevice-CreateVertexBuffer(sizeof(floor_verts), 0, D3DFVF_CUSTOMVERTEX, D3DPOOL_DEFAULT, &g_pFloorVB, NULL)return FALSE;if(FAILED(

8、g_pFloorVB-Lock(0, 0, (void*)&vertex_ptr, 0)return FALSE;memcpy(vertex_ptr, floor_verts, sizeof(floor_verts); g_pFloorVB-Unlock();/创建地面纹理D3DXCreateTextureFromFile(g_pd3dDevice, LFloor.bmp, &g_pFloorTexture);/ 创建透明树纹理D3DXCreateTextureFromFileEx(g_pd3dDevice, Ltree.bmp, D3DX_DEFAULT, D3DX_DEFAULT, D3D

9、X_DEFAULT, 0, D3DFMT_A1R5G5B5, D3DPOOL_MANAGED, D3DX_FILTER_TRIANGLE, D3DX_FILTER_TRIANGLE,D3DCOLOR_RGBA(0,0,0,255), NULL, NULL, &g_pTreeTexture);/透明色,设定这个颜色,在显示时,这图像中的这个颜色将忽略return TRUE; /*HRESULT D3DXCreateTextureFromFileEx (LPDIRECT3DDEVICE9 pDevice,LPCTSTR pSrcFile,UINT Width,UINT Height,UINT Mi

10、pLevels,DWORD Usage;/调入是IDirect3DDevice9对象指针/文件名/图像的宽/图像的长/图片的图层,一般用D3DX_DEFAULT,但也用的/设定这个纹理的使用方法,这个参数可以是,D3DUSAGE_RENDERTARGET和D3DUSAGE_DYNAMIC。/一般用的是,也可以使用D3DUSAGE_DYNAMIC,这样可以动态改变纹理中的数据。/如果纹理不需要动态性改变,就不需要设定这个参数为D3DUSAGE_DYNAMIC。D3DFORMAT Format, /纹理的格式,可以自己定义,也可以直接定义为D3DFMT_UNKNOWN,让程序在载入图像文件时定义象

11、素深度D3DPOOL Pool,DWORD Filter,DWORD MipFilter,D3DCOLOR ColorKey,D3DXIMAGE_INFO * pSrcInfo,/这是如何管理这些纹理,一般使用D3DPOOL_MANAGED /图像像素的过滤方式/MIP的像素过滤方式 /透明色,设定这个颜色,在显示时,这图像中的这个颜色将忽略 /记录载入图片信息PALETTEENTRY * pPalette,/记录调色板信息LPDIRECT3DTEXTURE9 * ppTexture /用来储存载入图片的纹理对象实例 );*/ Desc:初始化Direct3D/HRESULT InitD3D(

12、 HWND hWnd ) D3DPRESENT_PARAMETERS d3dpp;/创建Direct3D对象,该对象用于创建Direct3D设备对象if(g_pD3D = Direct3DCreate9(D3D_SDK_VERSION) = NULL) return FALSE;ZeroMemory(&d3dpp, sizeof(d3dpp);/设置D3DPRESENT_PARAMETERS结构,准备创建Direct3D设备对象 d3dpp.Windowed=TRUE;d3dpp.SwapEffect=D3DSWAPEFFECT_DISCARD;d3dpp.BackBufferFormat=D

13、3DFMT_UNKNOWN;d3dpp.EnableAutoDepthStencil =TRUE;/ 如果要使用Z缓冲,则把它设为TRUEd3dpp.AutoDepthStencilFormat =D3DFMT_D16;/创建Direct3D设备对象if( FAILED( g_pD3D-CreateDevice( D3DADAPTER_DEFAULT, D3DDEVTYPE_HAL, hWnd,D3DCREATE_SOFTWARE_VERTEXPROCESSING,&d3dpp, &g_pd3dDevice ) ) )return E_FAIL;/关闭光照处理, 默认情况下启用光照处理g_pd

14、3dDevice-SetRenderState(D3DRS_LIGHTING, FALSE);/ 设置启用深度测试g_pd3dDevice-SetRenderState(D3DRS_ZENABLE, D3DZB_TRUE);/启用alpha测试g_pd3dDevice-SetRenderState(D3DRS_ALPHATESTENABLE, TRUE);/渲染状态D3DRS_ALPHAREF用来设置进行Alpha测试的参考值AlphaReference g_pd3dDevice-SetRenderState(D3DRS_ALPHAREF, 0x01);/设置Alpha测试函数如大于等于参考值则返回TRUE g_pd3dDevice-SetRenderState(D3DRS_ALPHAFUNC, D3DCMP_GREATEREQUAL);/建立并设置投影矩阵D3DXMATRIX mat_proj;D3DXMatrixPerspectiveFovLH(&mat_proj, D3DX_PI/4.0, 1.0, 1.0, 1000.0); g_pd3dDevice-SetTransform(D3DTS_PROJECTION, &mat_proj);return TRUE;/ Desc: 释放创建的对象.、结束处理/VOID Cleanup()/释放顶点缓冲区对象if( g_pF

展开阅读全文
相关资源
相关搜索

当前位置:首页 > 学术论文 > 其它学术论文

电脑版 |金锄头文库版权所有
经营许可证:蜀ICP备13022795号 | 川公网安备 51140202000112号