【3D技术宅公社】XR数字艺术论坛  XR技术讨论 XR互动电影 定格动画

 找回密码
 立即注册

QQ登录

只需一步,快速开始

调查问卷
论坛即将给大家带来全新的技术服务,面向三围图形学、游戏、动画的全新服务论坛升级为UTF8版本后,中文用户名和用户密码中有中文的都无法登陆,请发邮件到324007255(at)QQ.com联系手动修改密码

3D技术论坛将以计算机图形学为核心,面向教育 推出国内的三维教育引擎该项目在持续研发当中,感谢大家的关注。

12
返回列表 发新帖
楼主: 鼯鼠

一篇文章搞定3DXSpriet !!

[复制链接]
发表于 2009-1-11 07:52:38 | 显示全部楼层
我不会排版....不好意思
发表于 2009-1-11 12:15:16 | 显示全部楼层
你可以把你的代码拷贝的写字板里再考过来~~
 楼主| 发表于 2009-1-11 00:32:46 | 显示全部楼层

不错不错~~

就是排版太乱了~~

发表于 2009-1-10 22:48:30 | 显示全部楼层
小弟正好最近对这个有所研究~如不嫌弃可以用我的代码
发表于 2009-1-10 22:49:49 | 显示全部楼层
[BR]#include <d3d9.h>#include <d3dx9.h>
[BR]#pragma comment (lib,"d3d9.lib")#pragma comment (lib,"d3dx9.lib")#pragma comment (lib,"winmm.lib")
[BR]ID3DXSprite*                g_pTextSprite = NULL;    //ID3DXSprite文本精灵对象LPDIRECT3D9     g_pD3D   =  NULL;LPDIRECT3DDEVICE9   g_pD3DDevice =  NULL;LPDIRECT3DTEXTURE9      g_pTex[25];              //纹理数组LPDIRECT3DTEXTURE9      g_pQsTex;int          giCurTexIndex;   //当前纹理的索引D3DXVECTOR3                 gvecPos;     RECT         gQsRect[4];int          gRectIndex;
[BR]HRESULT  InitD3D(HWND  hwnd);HRESULT  InitFrame();void  Render();void  Update( double fTime);void  Cleanup();
[BR]LRESULT CALLBACK WinProc(HWND hwnd, UINT  uMsg, WPARAM wParam, LPARAM lParam){ switch(uMsg) { case WM_KEYDOWN:  if(VK_ESCAPE == wParam)   DestroyWindow(hwnd);  break; case WM_DESTROY: &nbspostQuitMessage(0);  break; } return  DefWindowProc(hwnd,uMsg,wParam,lParam);};
[BR]int WINAPI WinMain( __in HINSTANCE hInstance, __in_opt HINSTANCE hPrevInstance,       __in_opt LPSTR lpCmdLine, __in int nShowCmd ){ WNDCLASS  wc = { CS_CLASSDC,WinProc,0,0,hInstance,  LoadIcon(hInstance,IDI_ERROR),LoadCursor(hInstance,IDC_CROSS),  (HBRUSH)GetStockObject(BLACK_BRUSH),NULL,L"myClass"};
[BR] RegisterClass(&wc);
[BR] HWND  hWnd  =  CreateWindow(L"myClass",L"纹理",WS_ACTIVECAPTION,0,0,800,600,  NULL,NULL,hInstance,NULL);  ShowWindow(hWnd,nShowCmd); UpdateWindow(hWnd);
[BR] InitD3D(hWnd); InitFrame();
[BR] MSG  msg; double timedelay;&nbspeekMessage(&msg,0,0U,0U,PM_REMOVE);
[BR] while(msg.message  !=  WM_QUIT) {  if (PeekMessage(&msg,0,0U,0U,PM_REMOVE))  {   TranslateMessage(&msg);   DispatchMessage(&msg);  }   else  {   Sleep(50);   Render();    timedelay = (double)timeGetTime();   Update(timedelay);  } }  UnregisterClassW(L"myClass",hInstance); return 0;}
[BR]HRESULT   InitD3D(HWND hwnd){
[BR] if(NULL  ==  (g_pD3D  =  Direct3DCreate9(D3D_SDK_VERSION)) )  return  E_FAIL;
[BR] D3DDISPLAYMODE   d3ddm; g_pD3D->GetAdapterDisplayMode(D3DADAPTER_DEFAULT,&d3ddm);
[BR] D3DPRESENT_PARAMETERS  d3dpp; ZeroMemory(&d3dpp,sizeof(d3dpp) ); d3dpp.Windowed  =  true; d3dpp.SwapEffect =  D3DSWAPEFFECT_DISCARD; d3dpp.BackBufferFormat  =   d3ddm.Format;
[BR] if( FAILED(g_pD3D->CreateDevice(D3DADAPTER_DEFAULT,D3DDEVTYPE_HAL,hwnd,  D3DCREATE_HARDWARE_VERTEXPROCESSING,&d3dpp,&g_pD3DDevice)) ) {  MessageBox(0,L"error",L"sdf",0);  return  E_FAIL; } //g_pD3DDevice->SetRenderState(D3DRS_LIGHTING,true);
[BR] return  S_OK;}
[BR]void   Render(){ g_pD3DDevice->Clear(0,0,D3DCLEAR_TARGET,0xff000000,1.0f,0);
[BR] g_pD3DDevice->BeginScene();
[BR] g_pTextSprite->Begin(D3DXSPRITE_ALPHABLEND); g_pTextSprite->Draw(g_pTex[giCurTexIndex],NULL,NULL,&gvecPos,0xffffffff); g_pTextSprite->Draw(g_pQsTex,&gQsRect[gRectIndex],NULL,&D3DXVECTOR3(255,100,0),0xffffffff); g_pTextSprite->End();
[BR] g_pD3DDevice->EndScene();
[BR] g_pD3DDevice-&gtresent(NULL,NULL,NULL,NULL);}
[BR]void  Cleanup(){ if(g_pTextSprite  !=  NULL)  g_pTextSprite->Release();
[BR] if (g_pQsTex) {  g_pQsTex->Release(); }
[BR] for (int i = 0; i < 25; i ++) {  if(g_pTex)   g_pTex->Release(); }
[BR] if(g_pD3DDevice  !=  NULL)  g_pD3DDevice->Release();
[BR] if(g_pD3D  !=  NULL)  g_pD3D->Release();}
[BR]HRESULT  InitFrame(){ giCurTexIndex = 0; gRectIndex = 0;
[BR] //创建纹理  D3DXCreateTextureFromFile( g_pD3DDevice, L"Media\\explode00.dds", &g_pTex[0] );  D3DXCreateTextureFromFile( g_pD3DDevice, L"Media\\explode01.dds", &g_pTex[1] );  D3DXCreateTextureFromFile( g_pD3DDevice, L"Media\\explode02.dds", &g_pTex[2] );  D3DXCreateTextureFromFile( g_pD3DDevice, L"Media\\explode03.dds", &g_pTex[3] );  D3DXCreateTextureFromFile( g_pD3DDevice, L"Media\\explode04.dds", &g_pTex[4] );  D3DXCreateTextureFromFile( g_pD3DDevice, L"Media\\explode05.dds", &g_pTex[5] );  D3DXCreateTextureFromFile( g_pD3DDevice, L"Media\\explode06.dds", &g_pTex[6] );  D3DXCreateTextureFromFile( g_pD3DDevice, L"Media\\explode07.dds", &g_pTex[7] );  D3DXCreateTextureFromFile( g_pD3DDevice, L"Media\\explode08.dds", &g_pTex[8] );  D3DXCreateTextureFromFile( g_pD3DDevice, L"Media\\explode09.dds", &g_pTex[9] );  D3DXCreateTextureFromFile( g_pD3DDevice, L"Media\\explode10.dds", &g_pTex[10] );  D3DXCreateTextureFromFile( g_pD3DDevice, L"Media\\explode11.dds", &g_pTex[11] );  D3DXCreateTextureFromFile( g_pD3DDevice, L"Media\\explode12.dds", &g_pTex[12] );  D3DXCreateTextureFromFile( g_pD3DDevice, L"Media\\explode13.dds", &g_pTex[13] );  D3DXCreateTextureFromFile( g_pD3DDevice, L"Media\\explode14.dds", &g_pTex[14] );  D3DXCreateTextureFromFile( g_pD3DDevice, L"Media\\explode15.dds", &g_pTex[15] );  D3DXCreateTextureFromFile( g_pD3DDevice, L"Media\\explode16.dds", &g_pTex[16] );  D3DXCreateTextureFromFile( g_pD3DDevice, L"Media\\explode17.dds", &g_pTex[17] );  D3DXCreateTextureFromFile( g_pD3DDevice, L"Media\\explode18.dds", &g_pTex[18] );  D3DXCreateTextureFromFile( g_pD3DDevice, L"Media\\explode19.dds", &g_pTex[19] );  D3DXCreateTextureFromFile( g_pD3DDevice, L"Media\\explode20.dds", &g_pTex[20] );  D3DXCreateTextureFromFile( g_pD3DDevice, L"Media\\explode21.dds", &g_pTex[21] );  D3DXCreateTextureFromFile( g_pD3DDevice, L"Media\\explode22.dds", &g_pTex[22] );  D3DXCreateTextureFromFile( g_pD3DDevice, L"Media\\explode23.dds", &g_pTex[23] );  D3DXCreateTextureFromFile( g_pD3DDevice, L"Media\\explode24.dds", &g_pTex[24] );
[BR] 
[BR] // D3DXCreateTextureFromFile( pd3dDevice, L"Media\\qs.png", &g_pQsTex ));
[BR] D3DXCreateTextureFromFileEx(g_pD3DDevice,  L"Media\\qs.png",  520,  490,  D3DX_DEFAULT,  0,  D3DFMT_UNKNOWN,  D3DPOOL_MANAGED,  D3DX_FILTER_LINEAR,  D3DX_FILTER_LINEAR,  0,  NULL,  NULL,  &g_pQsTex);
[BR] /* 第一个参数调入是IDirect3DDevice8对象指针。 第二个参数是文件名。 第三个,第四个是图像的长和宽。 第五个是MipLevel,我调入1,表示MipLevel是一层, MIP使用来平滑3D图像远景显示中出现的杂乱线条的问题。 在2D图像程序设计中,我觉得是没什么用,所以,我就设定为一, 也就是说这个层只有一层。 第六个参数设定这个纹理的使用方法,这个参数可以是0, D3DUSAGE_RENDERTARGET,和D3DUSAGE_DYNAMIC。我使用的是0。 你也可以使用了D3DUSAGE_DYNAMIC,这样可以动态改变纹理中的数据。 如果你纹理不需要动态性改变,就不需要设定这个参数为D3DUSAGE_DYNAMIC。 第七个参数是纹理的格式,就是像素深度格式,你可以自己定义, 也可以直接定义为D3DFMT_UNKNOWN,让程序在载入图像文件时定义象素深度。 第八个是POOL,这是如何管理这些纹理。我使用D3DPOOL_MANAGED, 设定这个你必须设定使用方法为0,不能使用D3DUSAGE_DYNAMIC。 第九个参数是图像像素的过滤方式. 第十个是MIP的像素过滤方式. 第十一个参数是透明色,设定这个颜色,在显示时,这图像中的这个颜色将忽略。 第十二个参数可以用来定义图像文件的内部信息,这个参数是进出型,
[BR] 你可以定义一个数据结构对象,初始化里面的数据定义图像文件的信息。 你也可以调入NULL,这样,你就不在乎返回值。 接下来是调色板信息,这个只工作于8位图像文件上,我调入NULL,表示不用调色板信息。 最后是纹理返回的指针。*/
[BR] //创建ID3DXSprite接口对象 D3DXCreateSprite( g_pD3DDevice, &g_pTextSprite );
[BR] gvecPos.x = 4; gvecPos.y = 240; gvecPos.z = 0.0f;
[BR] gQsRect[0].left = 0; gQsRect[0].top = 0; gQsRect[0].right = 130; gQsRect[0].bottom = 123;
[BR] gQsRect[1].left = 130; gQsRect[1].top = 0; gQsRect[1].right = 130 * 2; gQsRect[1].bottom = 123;
[BR] gQsRect[2].left = 130 * 2; gQsRect[2].top = 0; gQsRect[2].right = 130 * 3; gQsRect[2].bottom = 123;
[BR] gQsRect[3].left = 130 * 3; gQsRect[3].top = 0; gQsRect[3].right = 130 * 4; gQsRect[3].bottom = 123;
[BR] return 0;}
[BR]void Update( double fTime){ // 计算当前纹理索引 static double fLastTime = 0.0f;    //记录显示当前纹理的时间 if( fTime - fLastTime > 0.1f ) {  fLastTime = fTime;  giCurTexIndex++;  if( giCurTexIndex > 24 )   giCurTexIndex = 0;
[BR]  gRectIndex++;  if (gRectIndex > 3)  {   gRectIndex = 0;  } }}
[BR] 
[BR] 
[BR] 
[BR]这个是我写的源码~里面应该很好懂
发表于 2009-3-22 19:28:31 | 显示全部楼层
好老的帖子。。师傅领进门。
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

手机版|小黑屋|3D数字艺术论坛 ( 沪ICP备14023054号 )

GMT+8, 2025-5-6 17:09

Powered by Discuz! X3.4

Copyright © 2001-2020, Tencent Cloud.

快速回复 返回顶部 返回列表