青青草原综合久久大伊人导航_色综合久久天天综合_日日噜噜夜夜狠狠久久丁香五月_热久久这里只有精品

溪風(fēng)蟬月

heading to free
隨筆 - 2, 文章 - 0, 評(píng)論 - 0, 引用 - 0
數(shù)據(jù)加載中……

一步一步從DX中導(dǎo)入并使用.X File

  我們看到3d世界的奇妙,豐富的場(chǎng)景,真實(shí)的物體… … 在DX中是如何實(shí)現(xiàn)這樣豐富的場(chǎng)景的,一種方法是用DX繪制(用頂點(diǎn)緩存一個(gè)一個(gè)繪制,如DrawTrangle,DrawTube等),但這樣會(huì)很麻煩,你要考慮無限物體的參數(shù),考慮它們的位置等;另外一種方法就是在3d制作軟件(如3dmax或者maya)中隨心所欲地創(chuàng)作好你的3d世界,然后導(dǎo)出為DX可識(shí)別的格式(如3dmax導(dǎo)出為XFile),進(jìn)而在DX中加載進(jìn)去即可。下面就是整個(gè)從3dmax中建好模到用DX顯示出來的過程。

 

1. 安裝插件(PandaDirectXMaxExporter_x86.dle)——安裝方法

2. 在3dmax中建模。

3. 把模型導(dǎo)出為.x 文件。

    導(dǎo)出時(shí)3dmax參數(shù)設(shè)置:

    3DS Max Object選項(xiàng)卡

 

    Mesh選項(xiàng)卡

 

    Animation選項(xiàng)卡

   

    Textures&.fx files選項(xiàng)卡

 

    X File Setting選項(xiàng)卡

 

4. 在DX中實(shí)現(xiàn).X文件的導(dǎo)入并顯示出來。

   

   1:  #include <windows.h> 
   2:  #include <d3dx9.h> 
   3:  #include <vector> 
   4:  using namespace std;   
   5:  HINSTANCE hInstance;   
   6:  IDirect3DDevice9 *Device = 0;   
   7:  const D3DXCOLOR      WHITE( D3DCOLOR_XRGB(255, 255, 255) );   
   8:  //設(shè)置全局變量,一個(gè)ID3DXMesh對(duì)象存儲(chǔ)從XFile中加載的網(wǎng)格數(shù)據(jù),另外兩個(gè)變量分別存儲(chǔ)該網(wǎng)格的材質(zhì)和紋理數(shù)據(jù) 
   9:  ID3DXMesh *Mesh = 0;   
  10:  vector<D3DMATERIAL9>Mtrls(0);   
  11:  vector<IDirect3DTexture9*>Textures(0);   
  12:  bool Setup()   
  13:  {   
  14:  //導(dǎo)入XFile數(shù)據(jù) 
  15:      ID3DXBuffer* adjBuffer = 0;   
  16:      ID3DXBuffer* mtrlBuffer = 0;   
  17:  DWORD numMtrls = 0;   
  18:      D3DXLoadMeshFromX("bigship1.x", D3DXMESH_MANAGED, Device, &adjBuffer, &mtrlBuffer, 0, &numMtrls, &Mesh);   
  19:  //加載XFile文件后,我們必須遍歷D3DXMATRIAL數(shù)組中的元素,并加載該網(wǎng)格所引用的紋理數(shù)據(jù) 
  20:  if(mtrlBuffer!=0 && numMtrls!=0)   
  21:      {   
  22:          D3DXMATERIAL *mtrls = (D3DXMATERIAL*)mtrlBuffer->GetBufferPointer();   
  23:  for(int i=0; i<numMtrls; i++)   
  24:          {   
  25:  //設(shè)置MatD3D的屬性 
  26:              mtrls[i].MatD3D.Ambient = mtrls[i].MatD3D.Diffuse;   
  27:  //保存第i個(gè)材質(zhì) 
  28:              Mtrls.push_back(mtrls[i].MatD3D);   
  29:  //檢查第i個(gè)材質(zhì)是否有紋理 
  30:  if(mtrls[i].pTextureFilename != 0)   
  31:              {   
  32:  //是的話導(dǎo)入紋理信息 
  33:                  IDirect3DTexture9* tex = 0;   
  34:                  D3DXCreateTextureFromFile(Device, mtrls[i].pTextureFilename, &tex);   
  35:  //保存導(dǎo)入的紋理 
  36:                  Textures.push_back(tex);   
  37:              }   
  38:  else 
  39:              {   
  40:  //不是的話 
  41:                  Textures.push_back(0);   
  42:              }   
  43:          }   
  44:      }   
  45:      Mesh->OptimizeInplace(          
  46:          D3DXMESHOPT_ATTRSORT |   
  47:          D3DXMESHOPT_COMPACT  |   
  48:          D3DXMESHOPT_VERTEXCACHE,   
  49:          (DWORD*)adjBuffer->GetBufferPointer(),   
  50:          0, 0, 0);   
  51:  // 
  52:  // Set texture filters. 
  53:  // 
  54:      Device->SetSamplerState(0, D3DSAMP_MAGFILTER, D3DTEXF_LINEAR);   
  55:      Device->SetSamplerState(0, D3DSAMP_MINFILTER, D3DTEXF_LINEAR);   
  56:      Device->SetSamplerState(0, D3DSAMP_MIPFILTER, D3DTEXF_POINT);   
  57:  //  
  58:  // Set Lights. 
  59:  // 
  60:      D3DLIGHT9 dir;   
  61:      ZeroMemory(&dir, sizeof(dir));   
  62:      dir.Type      = D3DLIGHT_DIRECTIONAL;   
  63:      dir.Diffuse   = WHITE;   
  64:      dir.Specular  = WHITE * 0.3f;   
  65:      dir.Ambient   = WHITE * 0.6f;   
  66:      dir.Direction = D3DXVECTOR3(1.0f, 0.0f, 0.0f);   
  67:  // 
  68:  // Set and Enable the light. 
  69:  // 
  70:      Device->SetLight(0, &dir);   
  71:      Device->LightEnable(0, true);   
  72:  // 
  73:  // Set camera. 
  74:  // 
  75:      D3DXVECTOR3 pos(4.0f, 4.0f, -13.0f);   
  76:      D3DXVECTOR3 target(0.0f, 0.0f, 0.0f);   
  77:      D3DXVECTOR3 up(0.0f, 1.0f, 0.0f);   
  78:      D3DXMATRIX V;   
  79:      D3DXMatrixLookAtLH(   
  80:          &V,   
  81:          &pos,   
  82:          &target,   
  83:          &up);   
  84:      Device->SetTransform(D3DTS_VIEW, &V);   
  85:  // 
  86:  // Set projection matrix. 
  87:  // 
  88:      D3DXMATRIX proj;   
  89:      D3DXMatrixPerspectiveFovLH(   
  90:              &proj,   
  91:              D3DX_PI * 0.5f, // 90 - degree 
  92:              800.0f/600.0f,   
  93:              1.0f,   
  94:              1000.0f);   
  95:      Device->SetTransform(D3DTS_PROJECTION, &proj);   
  96:  return true;   
  97:  }   
  98:  void Cleanup()   
  99:  {   
 100:  }   
 101:  void Display(float time)   
 102:  {   
 103:  if(Device)   
 104:      {   
 105:  static float y = 0.0f;   
 106:          D3DXMATRIX yRot;   
 107:          D3DXMatrixRotationY(&yRot, y);   
 108:          y = y + time;   
 109:  if(y>6.28f)   
 110:              y = 0.0f;   
 111:          D3DXMATRIX World = yRot;   
 112:          Device ->SetTransform(D3DTS_WORLD, &World);   
 113:          Device ->Clear(0, 0, D3DCLEAR_TARGET|D3DCLEAR_ZBUFFER, 0x0000ffff, 1.0f, 0);   
 114:          Device ->BeginScene();   
 115:  for(int i=0; i<Mtrls.size(); i++)   
 116:          {   
 117:              Device ->SetMaterial(&Mtrls[i]);   
 118:              Device ->SetTexture(0, Textures[i]);   
 119:              Mesh ->DrawSubset(i);   
 120:          }   
 121:          Device ->EndScene();   
 122:          Device ->Present(0, 0, 0, 0);   
 123:      }   
 124:  }   
 125:  LRESULT CALLBACK WndProc(HWND hWnd, UINT uMsg, WPARAM wParam, LPARAM lParam)   
 126:  {   
 127:  switch(uMsg)   
 128:      {   
 129:  case WM_DESTROY:   
 130:          PostQuitMessage(0);   
 131:  break;   
 132:  case WM_KEYDOWN:   
 133:  if( wParam == VK_ESCAPE )   
 134:              DestroyWindow(hWnd);   
 135:  break;   
 136:  default:   
 137:  return DefWindowProc(hWnd, uMsg, wParam, lParam);   
 138:      }   
 139:  return 0;   
 140:  }   
 141:  int WINAPI WinMain(HINSTANCE hInstance, HINSTANCE hPrevInstance, LPSTR lpCmdLine, int nShowCmd)   
 142:  {   
 143:      MSG msg;   
 144:      ZeroMemory(&msg, sizeof(msg));   
 145:      WNDCLASSEX wc;   
 146:      wc.cbClsExtra = NULL;   
 147:      wc.cbSize = sizeof(wc);   
 148:      wc.cbWndExtra = NULL;   
 149:      wc.hbrBackground = (HBRUSH)GetStockObject(WHITE_BRUSH);   
 150:      wc.hCursor = LoadCursor(NULL, IDC_ARROW);   
 151:      wc.hIcon = LoadIcon(NULL, IDI_WINLOGO);   
 152:      wc.hIconSm = NULL;   
 153:      wc.hInstance = hInstance;   
 154:      wc.lpfnWndProc = WndProc;   
 155:      wc.lpszClassName = "draw";   
 156:      wc.lpszMenuName = NULL;   
 157:      wc.style = CS_DROPSHADOW;   
 158:      RegisterClassEx(&wc);   
 159:  HWND hWnd = CreateWindowEx(WS_EX_COMPOSITED, "draw", "draw", WS_HSCROLL, 100, 100, 800, 600, NULL, NULL, hInstance, NULL);   
 160:      ShowWindow(hWnd, SW_NORMAL);   
 161:      UpdateWindow(hWnd);   
 162:      IDirect3D9 *D3D9 = 0;   
 163:      D3D9 = Direct3DCreate9(D3D_SDK_VERSION);   
 164:      D3DCAPS9 caps;   
 165:      D3D9 ->GetDeviceCaps(D3DADAPTER_DEFAULT, D3DDEVTYPE_HAL, &caps);   
 166:  int vp = 0;   
 167:  if(caps.DevCaps & D3DDEVCAPS_HWTRANSFORMANDLIGHT)   
 168:          vp = D3DCREATE_HARDWARE_VERTEXPROCESSING;   
 169:  else 
 170:          vp = D3DCREATE_SOFTWARE_VERTEXPROCESSING;   
 171:      D3DPRESENT_PARAMETERS d3dpp;   
 172:      d3dpp.BackBufferWidth            = 800;   
 173:      d3dpp.BackBufferHeight           = 600;   
 174:      d3dpp.BackBufferFormat           = D3DFMT_A8R8G8B8;   
 175:      d3dpp.BackBufferCount            = 1;   
 176:      d3dpp.MultiSampleType            = D3DMULTISAMPLE_NONE;   
 177:      d3dpp.MultiSampleQuality         = 0;   
 178:      d3dpp.SwapEffect                 = D3DSWAPEFFECT_DISCARD;    
 179:      d3dpp.hDeviceWindow              = hWnd;   
 180:      d3dpp.Windowed                   = true;   
 181:      d3dpp.EnableAutoDepthStencil     = true;    
 182:      d3dpp.AutoDepthStencilFormat     = D3DFMT_D24S8;   
 183:      d3dpp.Flags                      = 0;   
 184:      d3dpp.FullScreen_RefreshRateInHz = D3DPRESENT_RATE_DEFAULT;   
 185:      d3dpp.PresentationInterval       = D3DPRESENT_INTERVAL_IMMEDIATE;   
 186:  HRESULT hr = D3D9-> CreateDevice(   
 187:          D3DADAPTER_DEFAULT,   
 188:          D3DDEVTYPE_HAL,   
 189:          hWnd,   
 190:          vp,   
 191:          &d3dpp,   
 192:          &Device);   
 193:  while(msg.message != WM_QUIT)   
 194:      {   
 195:  if(PeekMessage(&msg, NULL, NULL, NULL, PM_REMOVE))   
 196:          {   
 197:              TranslateMessage(&msg);   
 198:              DispatchMessage(&msg);   
 199:          }   
 200:  else 
 201:          {   
 202:              Setup();   
 203:              Display(0.016f);   
 204:          }   
 205:      }   
 206:  return 0;   
 207:  }  

 

5. 效果:

雪中酒家

 

6. 備注:

  從3dmax2010中導(dǎo)出.x文件時(shí),折騰了許久許久,最后發(fā)現(xiàn)是插件的版本不對(duì),應(yīng)使用2010版本的panda插件,而開始使用的是09版。

 

7. 附件:

posted on 2012-02-09 20:37 溪風(fēng)蟬月 閱讀(2103) 評(píng)論(0)  編輯 收藏 引用 所屬分類: DirectX


只有注冊(cè)用戶登錄后才能發(fā)表評(píng)論。
網(wǎng)站導(dǎo)航: 博客園   IT新聞   BlogJava   博問   Chat2DB   管理


青青草原综合久久大伊人导航_色综合久久天天综合_日日噜噜夜夜狠狠久久丁香五月_热久久这里只有精品
  • <ins id="pjuwb"></ins>
    <blockquote id="pjuwb"><pre id="pjuwb"></pre></blockquote>
    <noscript id="pjuwb"></noscript>
          <sup id="pjuwb"><pre id="pjuwb"></pre></sup>
            <dd id="pjuwb"></dd>
            <abbr id="pjuwb"></abbr>
            欧美在线视频一区二区| 亚洲女优在线| 欧美国产一区视频在线观看 | 亚洲精品日韩综合观看成人91| 另类av导航| 欧美激情一区二区三区在线| 亚洲欧洲久久| 亚洲精品极品| 亚洲午夜在线观看视频在线| 麻豆精品精华液| 亚洲日韩中文字幕在线播放| 性久久久久久| 久久嫩草精品久久久精品一| 免费国产一区二区| 亚洲激情在线视频| 一区二区三区不卡视频在线观看 | 香蕉久久a毛片| 久久久久成人网| 欧美成人一区二区三区片免费| 欧美激情中文字幕乱码免费| 国产精品亚洲网站| 一区在线影院| 亚洲视频欧美视频| 久久青青草综合| 亚洲精品美女在线观看播放| 午夜精品久久久久久久99樱桃 | 亚洲日产国产精品| 欧美一级专区免费大片| 欧美激情中文字幕乱码免费| 国产区精品视频| 99国产精品久久久| 葵司免费一区二区三区四区五区| 亚洲美女毛片| 久热爱精品视频线路一| 国产精品天天看| 9国产精品视频| 玖玖玖免费嫩草在线影院一区| 亚洲国产精品一区二区久| 亚洲永久字幕| 欧美日韩国产精品专区| 亚洲国产一区二区三区高清| 久久精品国产久精国产一老狼| 日韩视频中文字幕| 美女网站久久| 黄色精品一二区| 欧美一区二区在线看| 日韩亚洲视频在线| 欧美大片91| 亚洲国产日韩综合一区| 久热精品视频在线观看一区| 欧美一区二区三区精品| 国产精品久久久一区二区| av成人免费| 亚洲精品国产系列| 欧美精品免费看| 亚洲精品少妇| 亚洲福利电影| 免费成人在线观看视频| **性色生活片久久毛片| 久久久久国产精品一区三寸| 久久久久www| 中文在线资源观看网站视频免费不卡 | 久久久九九九九| 国产啪精品视频| 久久精品综合一区| 性8sex亚洲区入口| 国产亚洲欧美色| 欧美在线视频日韩| 欧美一区二区私人影院日本| 国产亚洲欧美激情| 美脚丝袜一区二区三区在线观看| 久久不射中文字幕| 黑丝一区二区| 欧美v日韩v国产v| 欧美韩国日本综合| 亚洲视频一区在线| 亚洲免费在线| 精品av久久久久电影| 欧美国产日韩一区| 欧美成人伊人久久综合网| 亚洲视频在线观看网站| 亚洲午夜在线| 久久精品综合一区| 久久久久久夜| 欧美一区二区观看视频| 亚洲精选在线| 欧美日韩视频在线观看一区二区三区 | 亚洲人妖在线| 亚洲看片一区| 欧美噜噜久久久xxx| 亚洲美女在线一区| 亚洲精品黄网在线观看| 欧美色综合网| 午夜精品久久久久久久白皮肤| 亚洲女人天堂成人av在线| 亚洲国产欧美日韩| 亚洲午夜精品国产| 亚洲一区二区三区四区中文 | 国产色视频一区| 久久人人97超碰人人澡爱香蕉| 欧美成人精品在线播放| 欧美一级日韩一级| 欧美久久久久久久久| 久久国产色av| 欧美日韩成人一区| 免费观看在线综合| 国产欧美精品xxxx另类| 亚洲国产成人精品久久| 国产一级一区二区| 一区二区三区视频在线观看| 激情久久久久久久久久久久久久久久| 亚洲久久一区二区| 亚洲国产成人在线| 欧美在线免费观看视频| 亚洲欧美激情四射在线日| 欧美成人影音| 免费观看欧美在线视频的网站| 国产精品视频观看| 欧美成人免费一级人片100| 国产精品自在线| 一区二区欧美在线观看| 亚洲精品小视频在线观看| 一区二区三区在线免费播放| 国产精品永久入口久久久| 亚洲久久成人| 久久久欧美精品| 性色av一区二区怡红| 欧美日韩情趣电影| 久热精品视频在线观看| 久久久精品999| 国产日本欧美视频| 亚洲一区二区三区视频| 亚洲欧美日韩第一区| 欧美日韩一区二区在线播放| 亚洲国产精品va在看黑人| 在线观看免费视频综合| 久久不射中文字幕| 久久综合久久88| 国产一区二区三区黄| 欧美一区二区三区视频免费| 香蕉av777xxx色综合一区| 国产精品美女久久久| 亚洲午夜久久久| 亚洲午夜日本在线观看| 国产精品欧美一区二区三区奶水| 亚洲深夜激情| 亚洲女性喷水在线观看一区| 国产精品香蕉在线观看| 欧美在线免费一级片| 久久精品一区| 在线观看欧美一区| 欧美xart系列在线观看| 亚洲免费大片| 欧美一区二区高清在线观看| 国产一区二区三区久久| 久久久久久综合| 亚洲欧洲日韩综合二区| 亚洲午夜一区二区三区| 国产日韩av在线播放| 久久久久综合一区二区三区| 91久久精品国产91久久性色| 欧美精品一区二区蜜臀亚洲| 亚洲人成在线观看一区二区| 在线视频欧美日韩| 国产精品视频精品视频| 久久婷婷激情| 99re66热这里只有精品4| 久久精品中文字幕一区二区三区| 一区免费观看| 欧美新色视频| 久久国产欧美| 欧美激情一区二区三区全黄| 亚洲视频成人| 激情综合在线| 欧美日韩精品免费观看| 久久av一区二区| 一区二区日韩欧美| 久热精品视频在线免费观看| 一本色道久久综合亚洲精品按摩| 国产婷婷色一区二区三区在线| 欧美成人午夜| 亚洲一区二区三区四区视频| 美女亚洲精品| 欧美一区二区久久久| 夜夜精品视频| 亚洲国产精品视频一区| 国产欧美日韩视频| 欧美日韩在线精品一区二区三区| 久久精品五月| 亚洲欧美电影在线观看| 亚洲国产精品一区二区第一页 | 一区二区三区在线观看欧美| 欧美美女喷水视频| 久久免费一区| 欧美一区三区二区在线观看| 亚洲精品久久久蜜桃| 麻豆成人小视频| 久久久激情视频| 新狼窝色av性久久久久久| 亚洲精品视频在线观看免费|