D3D纹理小例
来源:互联网 发布:矩阵论 方保镕 答案pdf 编辑:程序博客网 时间:2024/05/16 10:21
#include <d3dx9.h>//-----------------------------------------------------------------------------// Desc: 全局变量//-----------------------------------------------------------------------------LPDIRECT3D9 g_pD3D = NULL; //Direct3D对象LPDIRECT3DDEVICE9 g_pd3dDevice = NULL; //Direct3D设备对象LPDIRECT3DTEXTURE9 g_pTex = NULL; //纹理LPD3DXSPRITE g_pSprite = NULL; //点精灵//-----------------------------------------------------------------------------// Desc: 初始化Direct3D//-----------------------------------------------------------------------------bool InitATexture(int iX, int iY){// 默认是 32bit D3DFMT_A8R8G8B8if(g_pd3dDevice->CreateTexture(iX,iY,1,D3DUSAGE_DYNAMIC,D3DFMT_A8R8G8B8,D3DPOOL_DEFAULT,&g_pTex,NULL) != D3D_OK)return false;D3DLOCKED_RECT LockedRect;if(g_pTex->LockRect(0,&LockedRect,NULL,D3DLOCK_DISCARD) != D3D_OK)return false;int iTextureSize=iX*iY*4;unsigned char *pucSourceData=new unsigned char[iTextureSize];ZeroMemory(pucSourceData,iTextureSize);/*这里你要对pdwSourceData的内容初始化,我只做了一个ZeroMemory,这样做的后果就是图片时全黑的*/memcpy(LockedRect.pBits,pucSourceData,iTextureSize);delete[]pucSourceData;g_pTex->UnlockRect(0);return true;}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) );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, &g_pd3dDevice ) ) ){return E_FAIL;}// 创建点精灵if (FAILED(D3DXCreateSprite( g_pd3dDevice, &g_pSprite ))){return E_FAIL;}//加载纹理if(!InitATexture(200,200)) {return E_FAIL;}//if (FAILED(D3DXCreateTextureFromFile(g_pd3dDevice, L"Image1.jpg", &g_pTex)))//{//return E_FAIL;//}return S_OK;}//-----------------------------------------------------------------------------// Desc: 释放创建的对象//-----------------------------------------------------------------------------VOID Cleanup(){//释放纹理if(g_pTex != NULL){g_pTex->Release();}//释放点精灵if (g_pSprite != NULL){g_pSprite->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(45, 50, 170), 1.0f, 0 );//开始在后台缓冲区绘制图形if( SUCCEEDED( g_pd3dDevice->BeginScene() ) ){if ( SUCCEEDED( g_pSprite->Begin(D3DXSPRITE_ALPHABLEND) ) ){g_pSprite->Draw(g_pTex, NULL, NULL, NULL, 0xffffffff);g_pSprite->End();}//结束在后台缓冲区绘制图形g_pd3dDevice->EndScene();}//将在后台缓冲区绘制的图形提交到前台缓冲区显示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 );}//-----------------------------------------------------------------------------// Desc: 入口函数//-----------------------------------------------------------------------------INT main( HINSTANCE hInst, HINSTANCE, LPSTR, INT ){//注册窗口类WNDCLASSEX wc = { sizeof(WNDCLASSEX), CS_CLASSDC, MsgProc, 0L, 0L,GetModuleHandle(NULL), NULL, NULL, NULL, NULL,L"ClassName", NULL };RegisterClassEx( &wc );//创建窗口HWND hWnd = CreateWindow( L"ClassName", L"顶点缓冲区",WS_OVERLAPPEDWINDOW, 200, 100, 800, 600,GetDesktopWindow(), NULL, wc.hInstance, NULL );//初始化Direct3Dif( SUCCEEDED( InitD3D( hWnd ) ) ){//创建并填充顶点缓冲区if( SUCCEEDED( TRUE ) ){//显示窗口ShowWindow( hWnd, SW_SHOWDEFAULT );UpdateWindow( hWnd );//进入消息循环MSG msg;ZeroMemory( &msg, sizeof(msg) );while( msg.message!=WM_QUIT ){if( PeekMessage( &msg, NULL, 0U, 0U, PM_REMOVE ) ){TranslateMessage(&msg);DispatchMessage(&msg);}else{Render(); //渲染图形}}}}UnregisterClass(L"ClassName", wc.hInstance);return 0;}
0 0
- D3D纹理小例
- D3D纹理
- D3D纹理
- 【D3D Review】4 纹理
- d3d纹理过滤
- D3D学习笔记:纹理
- D3D纹理基础
- D3D纹理混合方式
- D3D纹理混合
- D3D 纹理映射
- D3D加载纹理渲染
- D3D纹理映射
- D3D混合纹理
- d3d纹理参数研究
- D3D 纹理 例子程序
- D3D中的纹理贴图
- MFC d3d纹理贴图
- d3d纹理过滤器配置
- HDU2121 Ice_cream’s world II【最小树形图】【不定根】
- "Base SDK Missing"问题的解决
- 常用的Mac快捷键和VM虚拟机键位设置
- 如何创建CView
- Pat(Basic Level)Practice--1027(打印沙漏)
- D3D纹理小例
- GNU开发环境基础-------GCC开发环境
- Linux内核Crash分析
- .NET下使用JQuery实现登录
- HttpModule注册说明
- cocos2d-x CCControlPotentiometer 圆形音量按钮
- 数字在排序数组中出现的次数
- 推荐一个强大和灵活的处理XML的开源框架---GenXDM
- 利用反射加载配置文件中的类动态生成集合