載入複雜網格模型
上面都是簡單的網格例子,並且只能作為演示作用,沒有多少實用價值,下面來載入乙個更複雜的網格模型。在我們玩過的遊戲裡,絕大多數都有室內場境的地方,比如到**店裡買東西,就需要有乙個室內場境。在我們最常見的房子,大多數都是長方形的,也就是有6個面的立方體,而在這六個面貼上紋理,就是室內環境了。由於我沒有美工,只能拿現成的網格模型來載入顯示,模型檔案放在目錄g:/mm3d/engine/bin/models裡,其中room.x是網格模型檔案,doordiff.dds、fireplacediff.dds、oldwood.dds、wall*****.dds都是紋理。實現的效果圖如下:
本電子書、mm3d引擎源程式、例子源程式共49元一套
聯絡人:蔡軍生
****:
email: caimouse1976 at sina.com
在這個場境裡,主要有四部份組成,地板是由貼木板紋理的模型組成。四周的牆是由花紋紋理的模型組成。還有乙個門模型,以及火牆模型。在這個例子裡,比上面乙個複雜的地方,就是多了紋理貼圖。
先看看載入網格模型的函式,看看怎麼樣實現載入網格和紋理。 //
//載入網格模型。
//蔡軍生 2006/09/15 //
hresult ccairoom::loadmeshfromfile(void)
std::string strname(chpath);
std::basic_string ::size_type stpos = strname.find_last_of("//");
if(stpos != std::string::npos)
std::string strpath = strname;
const std::string strfile("//bin//models");
strname += strfile;
//載入x檔案。
lpd3dxbuffer padjacencybuffer = null;
lpd3dxbuffer pd3dxmtrlbuffer = null;
hresult hr = d3dxloadmeshfromx( strname.c_str(), d3dxmesh_managed,
m_pd3ddevice, &padjacencybuffer,
&pd3dxmtrlbuffer, null, &m_dwnumroommaterials,
&m_pmeshroom );
if (failed(hr))
// 優化網格顯示。
if( failed( hr = m_pmeshroom->optimizeinplace(
d3dxmeshopt_compact | d3dxmeshopt_attrsort | d3dxmeshopt_vertexcache,
(dword*)padjacencybuffer->getbufferpointer(), null, null, null ) ) )
if (pd3dxmtrlbuffer)
return dxtrace_err("optimizeinplace",hr); }
//是否有材料。
if (pd3dxmtrlbuffer && m_dwnumroommaterials > 0)
//儲存材料和紋理。
3D遊戲從入門到精通 30
載入複雜網格模型 上面都是簡單的網格例子,並且只能作為演示作用,沒有多少實用價值,下面來載入乙個更複雜的網格模型。在我們玩過的遊戲裡,絕大多數都有室內場境的地方,比如到 店裡買東西,就需要有乙個室內場境。在我們最常見的房子,大多數都是長方形的,也就是有6個面的立方體,而在這六個面貼上紋理,就是室內環...
3D遊戲從入門到精通 31
當我們看到現實世界裡,有很多山地。那麼這種山地,在 3d世界裡又是怎麼樣顯示出來的呢?要模擬現實中的山地,就需要研究它怎麼樣構成,然後採用各種方法建立出來。在遊戲的世界裡,對於地形的要求是不嚴謹的,只要看起來像山地,就行了,而不像其它地理系統,一定要精確到跟現實世界里山比例一樣。因此,在這裡建立的 ...
3D遊戲從入門到精通 21 22
2.10.1 燈光與材質 在現實的世界裡,沒有光線,是什麼東西也看不見的。在d3d的世界裡,也是一樣的。但是在d3d裡有一種光線,是非常奇怪的,這種光線是沒有方向,沒有位置,整個世界全可以照亮的光線,它就是環境光,它其實有點像我們現實生活裡的無影燈。在d3d裡光線分為三種型別,分別是點光源 聚光燈和...