#include//direct3d程式不需的標頭檔案
#include//如果要使用d3dx庫就必須加入這個標頭檔案
#include
#include
#pragma comment(lib,"d3d9.lib")
#pragma comment(lib,"d3dx9.lib")
#pragma comment(lib,"winmm.lib")
//4個本程式用到的全域性變數
lpdirect3d9 g_pd3d = null; //direct3d指標
lpdirect3ddevice9 g_pd3ddevice = null;//direct3d裝置
lpdirect3dvertexbuffer9 g_pvb = null;//頂點緩衝區指標
lpdirect3dindexbuffer9 g_pib = null;//索引緩衝區指標
//定義使用到的頂點結構
struct customvertex
;//定義上述頂點的fvf結構
#define d3dfvf_customvertex (d3dfvf_xyz|d3dfvf_diffuse)
//初始化direct3d裝置過程函式
hresult initd3d(hwnd hwnd)
//填寫建立direct3d裝置結構體
d3dpresent_parameters d3***;
zeromemory(&d3***,sizeof(d3***));
d3***.windowed = false;//執行在視窗模式
d3***.swapeffect = d3dswapeffect_discard;//最高效的工作方式
d3***.backbufferformat = d3dfmt_unknown;//螢幕緩衝區資料畫素格式
//建立direct3d裝置
if(failed(g_pd3d->createdevice(d3dadapter_default,d3ddevtype_hal,hwnd,
d3dcreate_software_vertexprocessing,&d3***,&g_pd3ddevice)))
return s_ok;
}//初始化與本程式繪圖相關的資料函式
hresult initdraw(),,
,,,,
,,};// 把上面的頂點資料複製到建立的緩衝區內
customvertex * pvertices;
if(failed(g_pvb->lock(0,8*sizeof(customvertex),(void **)&pvertices,0)))
memcpy(pvertices,source_vertices,8 * sizeof(customvertex));
g_pvb->unlock();
//定義索引緩衝區內容,這裡可以手動定義,也可以用陣列設定好,然後內容複製,向上面頂點緩衝區一樣
word *indices = 0;
g_pib->lock(0,0,(void **) & indices,0);
//正面
indices[0]=0;indices[1]=1;indices[2]=2;
indices[3]=0;indices[4]=2;indices[5]=3;
//背面
indices[6]=4;indices[7]=6;indices[8]=5;
indices[9]=4;indices[10]=7;indices[11]=6;
//左面
indices[12]=4;indices[13]=5;indices[14]=1;
indices[15]=4;indices[16]=1;indices[17]=0;
//右面
indices[18]=3;indices[19]=2;indices[20]=6;
indices[21]=3;indices[22]=6;indices[23]=7;
//頂面
indices[24]=1;indices[25]=5;indices[26]=6;
indices[27]=1;indices[28]=6;indices[29]=2;
//底面
indices[30]=4;indices[31]=0;indices[32]=3;
indices[33]=4;indices[34]=3;indices[35]=7;
g_pib->unlock();
//設定攝像機
d3dxvector3 position(0.0f,0.0f,-3.0f);
d3dxvector3 target(0.0f,0.0f,0.0f);
d3dxvector3 up(0.0f,1.0f,0.0f);
d3dxmatrix v;
d3dxmatrixlookatlh(&v,&position,&target,&up);
g_pd3ddevice->settransform(d3dts_view,&v);
//設定投影矩陣
d3dxmatrix proj;
d3dxmatrixperspectivefovlh(& proj,
d3dx_pi * 0.5f,
(float)800/(float) 600,
1.0f,
1000.0f);
g_pd3ddevice->settransform(d3dts_projection,&proj);
//因為沒有使用材質,紋理資訊,所以關閉燈光顯示出本身色彩
g_pd3ddevice->setrenderstate(d3drs_lighting,false);
return s_ok;
}void cleanup()
if(g_pib != null)
if(g_pd3ddevice != null)
if(g_pd3d != null)
}//渲染函式
void render()
//顯示到螢幕
g_pd3ddevice->present(null,null,null,null);
}//訊息**函式。只處理退出訊息,所以滑鼠一直顯示忙狀態
lresult winapi msgproc(hwnd hwnd,uint msg,wparam wparam,lparam lparam)
return defwindowproc(hwnd,msg,wparam,lparam);
}int winapi winmain(hinstance hinst,hinstance , lpstr,int)
;registerclas***(&wc);
//建立視窗
hwnd hwnd = createwindow("d3d tutorical",
"3d立方體",
100,
100,
800,
600,
getdesktopwindow(),
null,
wc.hinstance,
null);
//巢狀if保證全部初始化成功才可以進入迴圈執行
if(succeeded (initd3d(hwnd)))
else}}
}unregisterclass("d3d tutorical",wc.hinstance);
return 0;
}
HTML CSS寫乙個3D立方體
相信有許多的朋友在學3d轉換的時候很懵,或者學完之後想做個小練習獲得成就感鼓勵自己,再或者想更理解透徹。做完這小練習相信大家一定會有所收穫。廢話不多說了,直接開始 html 前後上 下左右相信大家玩過魔方以及在小學的時候學過立方體展開,上面 都能理解。preserve div preserve這裡主...
CSS3D 從構建乙個立方體開始
css3d 3d變化是css3的新屬性,可以用來實現一些酷炫的效果。本文以如何搭建乙個立方體為例談談關於3d的個人見解。頁面座標是三維的,x軸從頁面左邊向右,y軸從頁面上方向下,z軸從頁面裡面向外,和我們以前數學立體幾何中的座標系很相似,只是y軸的方向相反,座標原點預設時圖形中心。需要注意兩點 1....
小炫酷的3D旋轉立方體相簿
前言 今年是特別的一年,是特別宅的一年,大家都宅在家做貢獻。在這個逆戰時期,讓我們發揮逆戰精神,一起來敲 吧!正文 今天,我們來做乙個有點小炫酷的3d旋轉立方體相簿。那麼首先,讓我們來了解一下3d。屬性 perspective 景深 近大遠小 是觀察物體的乙個視角距離,距離越小效果越明顯,它的數值一...