乙個簡單的3D立方體C 原始碼

2021-04-20 12:31:19 字數 3673 閱讀 7525

#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 景深 近大遠小 是觀察物體的乙個視角距離,距離越小效果越明顯,它的數值一...