D3DXCreateTextureFromFileEx的应用
来源:互联网 发布:002174游族网络论坛 编辑:程序博客网 时间:2024/05/29 13:08
2014/09/18
(转自:http://www.cnblogs.com/wonderKK/archive/2011/11/07/2240306.html)
D3DXCreateTextureFromFileEx
D3DXCreateTextureFromFileEx
上次在玩公告板时,用到了D3DXCreateTextureFromFileEx函数,上次的主要目的是公告板,对这个函数没太多的关心,现在发现这个函数是D3DXCreateTextureFromFile的高级板本,还是有它优势的,不然它就没有存在的意义了。D3DXCreateTextureFromFileEx这个函数有14个参数,在MSDN中的原型(后面中文解释为本人理解,仅供参考,原文请查看MSDN):
HRESULT D3DXCreateTextureFromFileEx(
LPDIRECT3DDEVICE9 pDevice, //调入是IDirect3DDevice9对象指针
LPCTSTR pSrcFile, //文件名
UINT Width, //图像的宽
UINT Height, //图像的长
UINT MipLevels, //图片的图层,一般用D3DX_DEFAULT,但也用1的
DWORD Usage, //设定这个纹理的使用方法,这个参数可以是0,
//D3DUSAGE_RENDERTARGET,和
//D3DUSAGE_DYNAMIC。一般我用的是0,你也可以使用了D3DUSAGE_DYNAMIC,
//这样可以动态改变纹理中的数据。如果你纹理不需要动态性改变,就不需要设定这
//个参数为D3DUSAGE_DYNAMIC。
D3DFORMAT Format, // 纹理的格式,可以自己定义,也可以直接定义为D3DFMT_UNKNOWN,让程序
//在载入图像文件时定义象素深度
D3DPOOL Pool, //这是如何管理这些纹理,一般使用D3DPOOL_MANAGED
DWORD Filter, //图像像素的过滤方式
DWORD MipFilter, //MIP的像素过滤方式
D3DCOLOR ColorKey, //透明色,设定这个颜色,在显示时,这图像中的这个颜色将忽略
D3DXIMAGE_INFO * pSrcInfo, //记录载入图片信息
PALETTEENTRY * pPalette, //记录调色板信息
LPDIRECT3DTEXTURE9 * ppTexture //用来储存载入图片的纹理对象实例
);
在上次的公告板中,调用为:
D3DXCreateTextureFromFileEx(
Device,
"Billboard.bmp",
D3DX_DEFAULT,
D3DX_DEFAULT,
D3DX_DEFAULT,
0,
D3DFMT_A1R5G5B5,
D3DPOOL_MANAGED,
D3DX_FILTER_TRIANGLE,
D3DX_FILTER_TRIANGLE,
D3DCOLOR_RGBA(0,0,0,255),
NULL,
NULL,
&BillboardTexture);
在这里,关键颜色值为D3DFMT_A1R5G5B5(就是RGB都少于5的颜色),将载入的图片里面的关键颜色值设置为透明色.只要在画时加上
Device->SetRenderState(D3DRS_ALPHATESTENABLE, TRUE); //启用alpha测试
就可以让指定的颜色透明。在公告和粒子系统中可能常用到这个函数。
关注 - 32
粉丝 - 36
» 下一篇:D3D中材质通过D3DMATERIAL9结构说明
posted on 2011-11-07 21:03 ☆A希亿 阅读(1043) 评论(3) 编辑 收藏
评论
#1楼 2012-11-03 15:53 若然子
#2楼 2012-11-03 16:03 若然子
现在是另一个问题,
我画的PNG图,是一个椭圆,边缘有锯齿,
而我用了HGE,或者DXTEX工具,或者GDI+画来了,就没有锯齿,
比较图片我放下面了,你帮我看下,
代码就一个文件,请帮忙看下,
谢谢,
HRESULT InitDirect3D(HWND hWnd)
{
LPDIRECT3D9 pD3D = NULL;
pD3D = Direct3DCreate9(D3D_SDK_VERSION);
if (pD3D == NULL) return E_FAIL;
D3DCAPS9 caps; int vp = 0;
pD3D->GetDeviceCaps( D3DADAPTER_DEFAULT, D3DDEVTYPE_HAL, &caps );
if( caps.DevCaps & D3DDEVCAPS_HWTRANSFORMANDLIGHT )
vp = D3DCREATE_HARDWARE_VERTEXPROCESSING;
else
vp = D3DCREATE_SOFTWARE_VERTEXPROCESSING;
D3DPRESENT_PARAMETERS d3dpp;
ZeroMemory(&d3dpp, sizeof(d3dpp));
d3dpp.BackBufferWidth = 800;
d3dpp.BackBufferHeight = 600;
d3dpp.BackBufferFormat = D3DFMT_A8R8G8B8;
d3dpp.BackBufferCount = 1;
d3dpp.MultiSampleType = D3DMULTISAMPLE_NONE;
d3dpp.MultiSampleQuality = 0;
d3dpp.SwapEffect = D3DSWAPEFFECT_DISCARD;
d3dpp.hDeviceWindow = hWnd;
d3dpp.Windowed = true;
d3dpp.EnableAutoDepthStencil = true;
d3dpp.AutoDepthStencilFormat = D3DFMT_D24S8;
d3dpp.Flags = 0;
d3dpp.FullScreen_RefreshRateInHz = D3DPRESENT_RATE_DEFAULT;
d3dpp.PresentationInterval = D3DPRESENT_INTERVAL_IMMEDIATE;
pD3D->CreateDevice(D3DADAPTER_DEFAULT, D3DDEVTYPE_HAL,
hWnd, vp, &d3dpp, &g_pd3dDevice);
pD3D->Release();
D3DXCreateTextureFromFileEx(
g_pd3dDevice,
L"crate.dds",
D3DX_DEFAULT,
D3DX_DEFAULT,
D3DX_DEFAULT,
0,
D3DFMT_UNKNOWN,
D3DPOOL_MANAGED,
D3DX_DEFAULT,
D3DX_DEFAULT,
0,
NULL,
NULL,
&g_pTexture);
g_pd3dDevice->CreateVertexBuffer(4 * sizeof(CUSTOMVERTEX), 0,
D3DFVF_CUSTOMVERTEX, D3DPOOL_DEFAULT, &g_pVertexBuf, NULL);
CUSTOMVERTEX *pVertices = NULL;
g_pVertexBuf->Lock(0, 0, (void**)&pVertices, 0);
pVertices[0] = CUSTOMVERTEX(-128.0f, 128.0f, -1.0f, 0.0f, 0.0f);
pVertices[1] = CUSTOMVERTEX( 128.0f, 128.0f, -1.0f, 1.0f, 0.0f);
pVertices[2] = CUSTOMVERTEX( 128.0f, -128.0f, -1.0f, 1.0f, 1.0f);
pVertices[3] = CUSTOMVERTEX(-128.0f, -128.0f, -1.0f, 0.0f, 1.0f);
g_pVertexBuf->Unlock();
g_pd3dDevice->CreateIndexBuffer(6 * sizeof(WORD), 0,
D3DFMT_INDEX16, D3DPOOL_DEFAULT, &g_pIndexBuf, NULL);
WORD *pIndices = NULL;
g_pIndexBuf->Lock(0, 0, (void**)&pIndices, 0);
pIndices[0] = 0; pIndices[1] = 1; pIndices[2] = 2;
pIndices[3] = 0; pIndices[4] = 2; pIndices[5] = 3;
g_pIndexBuf->Unlock();
D3DMATERIAL9 mtrl;
::ZeroMemory(&mtrl, sizeof(mtrl));
mtrl.Ambient = D3DXCOLOR(1.0f, 1.0f, 1.0f, 1.0f);
mtrl.Diffuse = D3DXCOLOR(1.0f, 1.0f, 1.0f, 1.0f);
mtrl.Specular = D3DXCOLOR(1.0f, 1.0f, 1.0f, 1.0f);
g_pd3dDevice->SetMaterial(&mtrl);
g_pd3dDevice->SetRenderState(D3DRS_AMBIENT, D3DXCOLOR(1.0f, 1.0f, 1.0f, 1.0f));
g_pd3dDevice->SetRenderState(D3DRS_MULTISAMPLEANTIALIAS, TRUE); //抗锯齿
g_pd3dDevice->SetRenderState(D3DRS_ALPHATESTENABLE, TRUE);
g_pd3dDevice->SetRenderState( D3DRS_ALPHATESTENABLE, TRUE );
g_pd3dDevice->SetRenderState(D3DRS_ALPHAREF, 0x00000000);
g_pd3dDevice->SetRenderState(D3DRS_ALPHAFUNC, D3DCMP_GREATER);
D3DXMATRIX matView;
D3DXVECTOR3 vEye(0.0f, 0.0f, -7.0f);
D3DXVECTOR3 vAt(0.0f, 0.0f, 0.0f);
D3DXVECTOR3 vUp(0.0f, 1.0f, 0.0f);
D3DXMatrixOrthoLH(&matView, 800, 600, -1.0f, 1.0f);
D3DXMATRIX iden;
D3DXMatrixIdentity(&iden);
g_pd3dDevice->SetTransform(D3DTS_PROJECTION, &matView);
g_pd3dDevice->SetTransform(D3DTS_WORLD, &iden);
g_pd3dDevice->SetTransform(D3DTS_VIEW, &iden);
return S_OK;
}
#3楼 2012-11-03 16:06 若然子
VOID Direct3DRender()
{
g_pd3dDevice->Clear(0, NULL, D3DCLEAR_TARGET | D3DCLEAR_ZBUFFER,
D3DCOLOR_XRGB(100, 200, 100), 1.0f, 0);
g_pd3dDevice->BeginScene(); // 开始绘制
// 设置世界变换矩阵
FLOAT fAngle = (float)::timeGetTime() / 360.0f;
D3DXMATRIX matWorld, Rx, Ry, Rz;
D3DXMatrixIdentity(&matWorld);
D3DXMatrixRotationX(&Rx, fAngle);
D3DXMatrixRotationY(&Ry, fAngle);
D3DXMatrixRotationZ(&Rz, fAngle);
matWorld = Rx * Ry * Rz * matWorld;
// g_pd3dDevice->SetTransform(D3DTS_WORLD, &matWorld);
// 绘制立方体
g_pd3dDevice->SetStreamSource(0, g_pVertexBuf, 0, sizeof(CUSTOMVERTEX));
g_pd3dDevice->SetFVF(D3DFVF_CUSTOMVERTEX);
g_pd3dDevice->SetIndices(g_pIndexBuf);
g_pd3dDevice->SetTexture(0, g_pTexture);
g_pd3dDevice->DrawIndexedPrimitive(D3DPT_TRIANGLELIST, 0, 0, 6, 0, 4);
// g_pd3dDevice->DrawPrimitive(D3DPT_TRIANGLELIST, 0, 4);
g_pd3dDevice->EndScene(); // 结束绘制
g_pd3dDevice->Present(NULL, NULL, NULL, NULL); // 翻转
}
听云App——终结移动App性能黑洞
☆渲染吧少年☆
D3DXCreateTextureFromFileEx
D3DXCreateTextureFromFileEx
上次在玩公告板时,用到了D3DXCreateTextureFromFileEx函数,上次的主要目的是公告板,对这个函数没太多的关心,现在发现这个函数是D3DXCreateTextureFromFile的高级板本,还是有它优势的,不然它就没有存在的意义了。D3DXCreateTextureFromFileEx这个函数有14个参数,在MSDN中的原型(后面中文解释为本人理解,仅供参考,原文请查看MSDN):
HRESULT D3DXCreateTextureFromFileEx(
LPDIRECT3DDEVICE9 pDevice, //调入是IDirect3DDevice9对象指针
LPCTSTR pSrcFile, //文件名
UINT Width, //图像的宽
UINT Height, //图像的长
UINT MipLevels, //图片的图层,一般用D3DX_DEFAULT,但也用1的
DWORD Usage, //设定这个纹理的使用方法,这个参数可以是0,
//D3DUSAGE_RENDERTARGET,和
//D3DUSAGE_DYNAMIC。一般我用的是0,你也可以使用了D3DUSAGE_DYNAMIC,
//这样可以动态改变纹理中的数据。如果你纹理不需要动态性改变,就不需要设定这
//个参数为D3DUSAGE_DYNAMIC。
D3DFORMAT Format, // 纹理的格式,可以自己定义,也可以直接定义为D3DFMT_UNKNOWN,让程序
//在载入图像文件时定义象素深度
D3DPOOL Pool, //这是如何管理这些纹理,一般使用D3DPOOL_MANAGED
DWORD Filter, //图像像素的过滤方式
DWORD MipFilter, //MIP的像素过滤方式
D3DCOLOR ColorKey, //透明色,设定这个颜色,在显示时,这图像中的这个颜色将忽略
D3DXIMAGE_INFO * pSrcInfo, //记录载入图片信息
PALETTEENTRY * pPalette, //记录调色板信息
LPDIRECT3DTEXTURE9 * ppTexture //用来储存载入图片的纹理对象实例
);
在上次的公告板中,调用为:
D3DXCreateTextureFromFileEx(
Device,
"Billboard.bmp",
D3DX_DEFAULT,
D3DX_DEFAULT,
D3DX_DEFAULT,
0,
D3DFMT_A1R5G5B5,
D3DPOOL_MANAGED,
D3DX_FILTER_TRIANGLE,
D3DX_FILTER_TRIANGLE,
D3DCOLOR_RGBA(0,0,0,255),
NULL,
NULL,
&BillboardTexture);
在这里,关键颜色值为D3DFMT_A1R5G5B5(就是RGB都少于5的颜色),将载入的图片里面的关键颜色值设置为透明色.只要在画时加上
Device->SetRenderState(D3DRS_ALPHATESTENABLE, TRUE); //启用alpha测试
就可以让指定的颜色透明。在公告和粒子系统中可能常用到这个函数。
关注 - 32
粉丝 - 36
» 下一篇:D3D中材质通过D3DMATERIAL9结构说明
posted on 2011-11-07 21:03 ☆A希亿 阅读(1043) 评论(3) 编辑 收藏
评论
#1楼 2012-11-03 15:53 若然子
#2楼 2012-11-03 16:03 若然子
现在是另一个问题,
我画的PNG图,是一个椭圆,边缘有锯齿,
而我用了HGE,或者DXTEX工具,或者GDI+画来了,就没有锯齿,
比较图片我放下面了,你帮我看下,
代码就一个文件,请帮忙看下,
谢谢,
HRESULT InitDirect3D(HWND hWnd)
{
LPDIRECT3D9 pD3D = NULL;
pD3D = Direct3DCreate9(D3D_SDK_VERSION);
if (pD3D == NULL) return E_FAIL;
D3DCAPS9 caps; int vp = 0;
pD3D->GetDeviceCaps( D3DADAPTER_DEFAULT, D3DDEVTYPE_HAL, &caps );
if( caps.DevCaps & D3DDEVCAPS_HWTRANSFORMANDLIGHT )
vp = D3DCREATE_HARDWARE_VERTEXPROCESSING;
else
vp = D3DCREATE_SOFTWARE_VERTEXPROCESSING;
D3DPRESENT_PARAMETERS d3dpp;
ZeroMemory(&d3dpp, sizeof(d3dpp));
d3dpp.BackBufferWidth = 800;
d3dpp.BackBufferHeight = 600;
d3dpp.BackBufferFormat = D3DFMT_A8R8G8B8;
d3dpp.BackBufferCount = 1;
d3dpp.MultiSampleType = D3DMULTISAMPLE_NONE;
d3dpp.MultiSampleQuality = 0;
d3dpp.SwapEffect = D3DSWAPEFFECT_DISCARD;
d3dpp.hDeviceWindow = hWnd;
d3dpp.Windowed = true;
d3dpp.EnableAutoDepthStencil = true;
d3dpp.AutoDepthStencilFormat = D3DFMT_D24S8;
d3dpp.Flags = 0;
d3dpp.FullScreen_RefreshRateInHz = D3DPRESENT_RATE_DEFAULT;
d3dpp.PresentationInterval = D3DPRESENT_INTERVAL_IMMEDIATE;
pD3D->CreateDevice(D3DADAPTER_DEFAULT, D3DDEVTYPE_HAL,
hWnd, vp, &d3dpp, &g_pd3dDevice);
pD3D->Release();
D3DXCreateTextureFromFileEx(
g_pd3dDevice,
L"crate.dds",
D3DX_DEFAULT,
D3DX_DEFAULT,
D3DX_DEFAULT,
0,
D3DFMT_UNKNOWN,
D3DPOOL_MANAGED,
D3DX_DEFAULT,
D3DX_DEFAULT,
0,
NULL,
NULL,
&g_pTexture);
g_pd3dDevice->CreateVertexBuffer(4 * sizeof(CUSTOMVERTEX), 0,
D3DFVF_CUSTOMVERTEX, D3DPOOL_DEFAULT, &g_pVertexBuf, NULL);
CUSTOMVERTEX *pVertices = NULL;
g_pVertexBuf->Lock(0, 0, (void**)&pVertices, 0);
pVertices[0] = CUSTOMVERTEX(-128.0f, 128.0f, -1.0f, 0.0f, 0.0f);
pVertices[1] = CUSTOMVERTEX( 128.0f, 128.0f, -1.0f, 1.0f, 0.0f);
pVertices[2] = CUSTOMVERTEX( 128.0f, -128.0f, -1.0f, 1.0f, 1.0f);
pVertices[3] = CUSTOMVERTEX(-128.0f, -128.0f, -1.0f, 0.0f, 1.0f);
g_pVertexBuf->Unlock();
g_pd3dDevice->CreateIndexBuffer(6 * sizeof(WORD), 0,
D3DFMT_INDEX16, D3DPOOL_DEFAULT, &g_pIndexBuf, NULL);
WORD *pIndices = NULL;
g_pIndexBuf->Lock(0, 0, (void**)&pIndices, 0);
pIndices[0] = 0; pIndices[1] = 1; pIndices[2] = 2;
pIndices[3] = 0; pIndices[4] = 2; pIndices[5] = 3;
g_pIndexBuf->Unlock();
D3DMATERIAL9 mtrl;
::ZeroMemory(&mtrl, sizeof(mtrl));
mtrl.Ambient = D3DXCOLOR(1.0f, 1.0f, 1.0f, 1.0f);
mtrl.Diffuse = D3DXCOLOR(1.0f, 1.0f, 1.0f, 1.0f);
mtrl.Specular = D3DXCOLOR(1.0f, 1.0f, 1.0f, 1.0f);
g_pd3dDevice->SetMaterial(&mtrl);
g_pd3dDevice->SetRenderState(D3DRS_AMBIENT, D3DXCOLOR(1.0f, 1.0f, 1.0f, 1.0f));
g_pd3dDevice->SetRenderState(D3DRS_MULTISAMPLEANTIALIAS, TRUE); //抗锯齿
g_pd3dDevice->SetRenderState(D3DRS_ALPHATESTENABLE, TRUE);
g_pd3dDevice->SetRenderState( D3DRS_ALPHATESTENABLE, TRUE );
g_pd3dDevice->SetRenderState(D3DRS_ALPHAREF, 0x00000000);
g_pd3dDevice->SetRenderState(D3DRS_ALPHAFUNC, D3DCMP_GREATER);
D3DXMATRIX matView;
D3DXVECTOR3 vEye(0.0f, 0.0f, -7.0f);
D3DXVECTOR3 vAt(0.0f, 0.0f, 0.0f);
D3DXVECTOR3 vUp(0.0f, 1.0f, 0.0f);
D3DXMatrixOrthoLH(&matView, 800, 600, -1.0f, 1.0f);
D3DXMATRIX iden;
D3DXMatrixIdentity(&iden);
g_pd3dDevice->SetTransform(D3DTS_PROJECTION, &matView);
g_pd3dDevice->SetTransform(D3DTS_WORLD, &iden);
g_pd3dDevice->SetTransform(D3DTS_VIEW, &iden);
return S_OK;
}
#3楼 2012-11-03 16:06 若然子
VOID Direct3DRender()
{
g_pd3dDevice->Clear(0, NULL, D3DCLEAR_TARGET | D3DCLEAR_ZBUFFER,
D3DCOLOR_XRGB(100, 200, 100), 1.0f, 0);
g_pd3dDevice->BeginScene(); // 开始绘制
// 设置世界变换矩阵
FLOAT fAngle = (float)::timeGetTime() / 360.0f;
D3DXMATRIX matWorld, Rx, Ry, Rz;
D3DXMatrixIdentity(&matWorld);
D3DXMatrixRotationX(&Rx, fAngle);
D3DXMatrixRotationY(&Ry, fAngle);
D3DXMatrixRotationZ(&Rz, fAngle);
matWorld = Rx * Ry * Rz * matWorld;
// g_pd3dDevice->SetTransform(D3DTS_WORLD, &matWorld);
// 绘制立方体
g_pd3dDevice->SetStreamSource(0, g_pVertexBuf, 0, sizeof(CUSTOMVERTEX));
g_pd3dDevice->SetFVF(D3DFVF_CUSTOMVERTEX);
g_pd3dDevice->SetIndices(g_pIndexBuf);
g_pd3dDevice->SetTexture(0, g_pTexture);
g_pd3dDevice->DrawIndexedPrimitive(D3DPT_TRIANGLELIST, 0, 0, 6, 0, 4);
// g_pd3dDevice->DrawPrimitive(D3DPT_TRIANGLELIST, 0, 4);
g_pd3dDevice->EndScene(); // 结束绘制
g_pd3dDevice->Present(NULL, NULL, NULL, NULL); // 翻转
}
听云App——终结移动App性能黑洞
- D3DXCreateTextureFromFileEx的应用
- D3DXCreateTextureFromFileEx
- D3DXCreateTextureFromFileEx()
- D3DXCreateTextureFromFileEx接口获取图片的实际数据
- D3DXCreateTextureFromFileEx function
- D3DXCreateTextureFromFileEx中参数介绍
- D3DXCreateTextureFromFileEx中参数介绍
- pivot 的应用,有图有应用
- Servlet应用---HttpServletRequest的应用
- Servlet应用---HttpServletRequest的应用
- Servlet应用---HttpServletRequest的应用
- Servlet应用---HttpServletRequest的应用
- Servlet应用---HttpServletRequest的应用
- Servlet应用---HttpServletRequest的应用
- Servlet应用---HttpServletRequest的应用
- AndroidMenu的应用之OptionMenu的应用
- 模型的应用 && Xib &&代理模式的应用【应用管理】
- 工作流的应用之shark+jawe应用
- 给ImageView添加边框
- 随堂笔记
- 用php处理百万级以上的数据提高查询速度的方法
- Java线程池之FutureTask【Java线程池系列3】
- 为ActiveX控件增加安全认证
- D3DXCreateTextureFromFileEx的应用
- 随堂笔记
- 回溯算法
- 使用Volley请求,获取POST请求cookie值
- 机房收费系统之多表连接查询
- Intellij IDEA配置Android Annotations注解框架
- 基于MySQL5.7MHA的配置
- 随堂笔记
- Qt图形视图框架