锘??xml version="1.0" encoding="utf-8" standalone="yes"?> 銆奃D銆?br>銇勩仺銇嗐亱銇亾 闈犺嫳鏂囩増緲昏瘧鍑虹殑澶ц嚧姝岃瘝錛?/p>
Another
鍏ㄥ眬鍙橀噺鏄痚xtern涔熸槸甯擱噺錛屽湪shader閲岄潰涓嶈兘淇敼錛屼絾鍙互浠庡涓葷▼搴忛噷鏀廣?br>浠ュ墠鐨勭紪璇戝櫒娌℃湁寮哄埗榪欎竴鐐癸紝鐜板湪鏂扮殑寮哄寲浜嗚繖涓瑕佹眰銆?br>
鎶奺xtern 鏀規垚static榪愯鎴愬姛
]]>
words:娓¤竟銈偤銉掋儹銆music
Une
Quelque
Ton
Mon
C'est
Pas
Tu
Je
Tu
Tu
Mais,c'est
Tant
La
Est
Y
Je
J'ai
Je
Mais
Les
J'appelle
Crier
Encore
Le
On
Si
Autre
Nos
L'amour
Dis-moi,
Tu
Je
La
Tiens
si
Je
J'ai
Je
Mais
La
La
L'espoir
Où
Je
J'ai
Je
Mais
Je
J'ai
Je
Mais
鍙堝緱鍒頒竴涓啝鍐涘鏉?br>
But
浣嗗嵈澶卞幓浜嗕竴浜涗笢瑗?br>
Your
浣犵殑涓栫晫宕╂簝浜?br>
My
鎴戠殑蹇冨彉寰楅夯鏈ㄤ笉浠?br>
Triumph
涓轟簡浠涔堝幓鍙栧緱鑳滃埄?
Zero
姣棤甯屾湜,涓?br>
Tell
鍛婅瘔鎴戣劚紱誨洶澧冪殑鍔炴硶
If
濡傛灉浣犳壘鍒扮殑璇?br>
I
鎴戝懠鍞ょ潃浣犵殑鍚嶅瓧
You
浣犳復姹傜潃鐖?br>
Know
鐭ラ亾鍦ㄥ摢閲屽悧?
I
鎴戞湁娑堟伅緇欎綘
Roads
璺旈仴榪?br>
Answer
鍥炵瓟鎴戠殑闂
Is
鏈変粈涔堝煎緱濂嬫枟鐨勭洰鏍囧悧?
I
鎴戜笉璁板緱浜?br>
No,I
涓?鏄垜涓嶆効璁拌搗
Yeah,I
鑰?鎴戜笉璁板緱浜?br>
But
浣嗘槸鎴戠煡閬撴垜闇瑕佸畠
One
涓涓俊浠?br>
That's
閭e氨鏄垜浠墍闇瑕佺殑
One
涓閬撴槑鍏?br>
That
灝嗕細鐓т寒鎴戜滑鐨勯亾璺?br>
What
鏈変粈涔堜笢瑗垮嚭閿欎簡
Hope
甯屾湜宸茬粡紱繪垜浠緢榪?br>
Won't
鏈変漢鍙互鍛婅瘔鎴戝悧?
I
鎴戜笉璁板緱浜?br>
No,I
涓?鏄垜涓嶆効璁拌搗
Yeah,I
鑰?鎴戜笉璁板緱浜?br>
But
浣嗘槸鎴戠煡閬撴垜闇瑕佸畠
I
鎴戜笉璁板緱浜?br>
But
浣嗘槸鎴戠煡閬撴垜闇瑕佸畠
]]>
鍋囪鐭ラ亾鑸瑰彧鍦ㄦ搗涓殑浣嶇疆鍜屽彇鍚戯紝涔熺煡閬撶偖濉旂浉瀵逛簬鑸圭殑浣嶇疆浠ュ強鐐鐩稿浜庣偖濉旂殑浣嶇疆銆備笌涓烘瘡涓墿浣撹綆楀涓煩闃電劧鍚庡瓨鍌ㄦ瘡涓煩闃電浉鍙嶏紝鍙互浣跨敤涓涓爢鏍堝茍鎸変笅鍒楃殑姝ラ鏉ユ覆鏌撴暣涓埞鍙細
1銆佷嬌鐢―3DXCreateMatrixStack鍒涘緩涓涓爢鏍堟帴鍙c?br>2銆佷負鑸瑰彧鐨勪綅緗綆楃煩闃靛茍灝嗚鐭╅樀鍘嬪叆鍫嗘爤銆?br>3銆佸皢鏍堥《璁劇疆涓哄綋鍓嶄笘鐣屽彉鎹㈠茍娓叉煋鑸逛綋銆?br>4銆佸鏍堝仛Push鎿嶄綔騫惰繛鎺ョ偖濉旂殑鐩稿鍙樻崲銆?br>5銆佸皢鏍堥《璁劇疆涓哄綋鍓嶄笘鐣屽彉鎹㈠茍娓叉煋鐐銆?br>6銆佸鏍堝仛Push鎿嶄綔騫惰繛鎺ョ涓鏍圭偖綆$殑鐩稿鍙樻崲銆?br>7銆佸皢鏍堥《璁劇疆涓哄綋鍓嶄笘鐣屽彉鎹㈠茍娓叉煋絎竴鏍圭偖綆°?br>8銆佸鏍堝仛Pop鎿嶄綔錛岃繖灝卞皢鐐鍙樻崲緗簬鏍堥《銆?br>9銆佸鏍堝彨鍋歅ush鎿嶄綔騫惰繛鎺ョ浜屾牴鐐鐨勭浉瀵瑰彉鎹€?br>10銆佸皢鏍堥《璁劇疆涓哄綋鍓嶄笘鐣屽彉鎹㈠茍娓叉煋絎簩鏍圭偖綆°?br>11銆佸鏍堝仛Pop鎿嶄綔錛岃繖灝卞皢鐐鍙樻崲緗簬鏍堥《銆?br>12銆佸鏍堝仛Pop鎿嶄綔錛岃繖灝卞皢鑸瑰彧鍙樻崲緗簬鏍堥《銆?br>13銆佷互鍚屾牱鐨勬柟寮忔覆鏌撹埞鍙殑鍏朵粬閮ㄥ垎銆?/p>
]]>
]]>
鏀規垚涓嬮潰榪欐牱灝辮揪鍒扮洰鐨?br> //欏剁偣鏁版嵁
CUSTOMVERTEX g_Vertices[10];
g_Vertices[0].x = 300;
g_Vertices[0].y = 250;
g_Vertices[0].z = 0.5f;
g_Vertices[0].rhw = 1.0f;
g_Vertices[0].color = 0xffff0000;
//g_Vertices[9]=g_Vertices[0];
for(int i=0; i<8; i++)
{
g_Vertices[i+1].x = (float)(200*sin(i*3.14159/4.0)) + 300;
g_Vertices[i+1].y = -(float)(200*cos(i*3.14159/4.0)) + 250;
g_Vertices[i+1].z = 0.5f;
g_Vertices[i+1].rhw = 1.0f;
g_Vertices[i+1].color = 0xff00ff00;
}
g_Vertices[9]=g_Vertices[1];
};
璁劇疆涓?br>//欏剁偣鏁版嵁
CUSTOMVERTEX g_Vertices[] =
{
{ -3, -3, 0.0f, 0.0f, 1.0f},
{ -3, 0, 0.0f, 0.0f, 0.5f},
{ 3, -3, 0.0f, 1.0f, 1.0f},
{ 3, 0, 0.0f, 1.0f, 0.5f }
};
鍙皢涓鍗婄汗鐞嗘槧灝勫埌鍥懼厓涓?br>
HRESULT IDirect3DDevice9::SetStreamSource(
UINT StreamNumber,
IDirect3DVertexBuffer9* pStreamData,
UINT OffsetInBytes,
UINT Stride
);
StreamNumber鈥斺旂‘瀹氭垜浠殑欏剁偣緙撳瓨涓庡摢涓涓祫婧愭祦鎸傞挬銆傛垜浠笉浣跨敤澶氶噸嫻侊紱鍥犳鎴戜滑鎬繪槸浣跨敤0鍙鋒祦銆?
pStreamData鈥斺斾竴涓寚鍚戞垜浠兂涓庢祦鎸傞挬鐨勯偅涓《鐐圭紦瀛樼殑鎸囬拡銆?
OffsetInBytes鈥斺旂浉瀵規祦寮濮嬪鐨勫亸縐婚噺銆備互瀛楄妭涓哄崟浣嶏紝瀹冩寚瀹氳濉叆娓叉煋綆$嚎鐨勯《鐐規暟鎹殑寮濮嬩綅緗傞氳繃媯鏌3DCAPS9緇撴瀯涓殑D3DDEVCAPS2_STREAMOFFSET鏍囧織錛屽亣濡備綘鐨勮澶囨敮鎸侊紝閭d箞榪欎釜鍙傛暟灝辨湁涓浜涢潪0鍊箋?
Stride鈥斺旀垜浠湪欏剁偣緙撳瓨涓搷浣滅殑姣忎釜閮ㄥ垎鐨勬祦鐨勫瓧鑺傚ぇ灝忋?
渚嬪錛屽亣璁緑b鏄竴涓凡緇忓~鍏呬簡欏剁偣淇℃伅鐨勯《鐐圭紦瀛橈細
_device->SetStreamSource( 0, vb, 0, sizeof( Vertex ) );
瀹氫箟錛?/font>
D3DXVECTOR3 *WINAPI D3DXVec3Normalize(
D3DXVECTOR3 *pOut,
CONST D3DXVECTOR3 *pV
);
鍙傛暟錛?/font>
pOut
[in, out] 鎸囧悜 D3DXVECTOR3 緇撴瀯鐨勬搷浣滅粨鏋溿?/span>
pV
[in] 鎸囧悜D3DXVECTOR3 緇撴瀯鐨勬簮鍚戦噺銆?/span>
榪斿洖鍊鹼細
鎸囧悜D3DXVECTOR3 緇撴瀯鐨勮鏍煎寲鍚庣殑鍚戦噺銆?/span>
璇存槑錛?/font>
鍑芥暟榪斿洖鍊艱窡pOut 鍙傛暟榪斿洖鍊兼槸涓鏍風殑銆傝繖鏍峰彲浠ヨ鍑芥暟D3DXVec3Normalize浣滀負鍏跺畠鍑芥暟鐨勫弬鏁頒嬌鐢ㄣ?/span>
鍑芥暟淇℃伅錛?/font>
Header |
d3dx9math.h |
Import library |
d3dx9.lib |
Minimum operating systems |
Windows 98 |
#include <d3dx9.h> //D3DX瀹炵敤搴撳嚱鏁? 璇ュご鏂囦歡涓張鍖呭惈浜哾3d9.h澶存枃浠?/p>
//-----------------------------------------------------------------------------
// Desc: 鍏ㄥ眬鍙橀噺
//-----------------------------------------------------------------------------
LPDIRECT3D9 g_pD3D = NULL; //Direct3D瀵硅薄
LPDIRECT3DDEVICE9 g_pd3dDevice = NULL; //Direct3D璁懼瀵硅薄
LPDIRECT3DVERTEXBUFFER9 g_pVB = NULL; //欏剁偣緙撳啿鍖哄璞?br>HWND g_Wnd = NULL; //紿楀彛鍙ユ焺
D3DRECT g_ClentRect;
LPDIRECT3DINDEXBUFFER9 g_pIB = NULL;
//-----------------------------------------------------------------------------
// Desc: 欏剁偣緇撴瀯
//-----------------------------------------------------------------------------
struct CUSTOMVERTEX
{
D3DXVECTOR3 position;
DWORD color;
};
#define D3DFVF_CUSTOMVERTEX (D3DFVF_XYZ|D3DFVF_DIFFUSE)
//-----------------------------------------------------------------------------
// Desc: 璁劇疆涓栫晫鐭╅樀
//-----------------------------------------------------------------------------
VOID SetupWorldMatrice()
{
//寤虹珛涓涓粫X杞村姩鎬佹棆杞殑涓栫晫鐭╅樀
D3DXMATRIX matWorld;
UINT iTime = timeGetTime() % 1000;
FLOAT fAngle = iTime * (2.0f * D3DX_PI) / 1000.0f;
D3DXMatrixIdentity( &matWorld );
D3DXMatrixRotationX( &matWorld, fAngle );
//璁劇疆涓栫晫鐭╅樀
g_pd3dDevice->SetTransform( D3DTS_WORLD, &matWorld );
}
//-----------------------------------------------------------------------------
// Desc: 璁劇疆瑙傚療鐭╅樀鍜屾姇褰辯煩闃?br>//-----------------------------------------------------------------------------
VOID SetupViewandProjMatrices()
{
//寤虹珛騫惰緗瀵熺煩闃?br> D3DXVECTOR3 vEyePt( 0.0f, 3.0f,-5.0f );
D3DXVECTOR3 vLookatPt( 0.0f, 0.0f, 0.0f );
D3DXVECTOR3 vUpVec( 0.0f, 1.0f, 0.0f );
D3DXMATRIX matView;
D3DXMatrixLookAtLH( &matView, &vEyePt, &vLookatPt, &vUpVec );
g_pd3dDevice->SetTransform( D3DTS_VIEW, &matView );
//寤虹珛騫惰緗姇褰辯煩闃?br> D3DXMATRIX matProj;
D3DXMatrixPerspectiveFovLH( &matProj, D3DX_PI/4, 1.0f, 1.0f, 100.0f );
g_pd3dDevice->SetTransform( D3DTS_PROJECTION, &matProj );
}
//-----------------------------------------------------------------------------
// Desc: 璁劇疆瑙嗗尯
//-----------------------------------------------------------------------------
VOID SetupViewPort()
{
RECT rect;
GetClientRect(g_Wnd,&rect);
D3DVIEWPORT9 vp;
vp.X = 0;
vp.Y = 0;
vp.Width = rect.right;
vp.Height = rect.bottom;
vp.MinZ = 0.0f;
vp.MaxZ = 1.0f;
g_pd3dDevice->SetViewport(&vp);
}
//-----------------------------------------------------------------------------
// Desc: 鍒濆鍖朌irect3D
//-----------------------------------------------------------------------------
HRESULT InitD3D( HWND hWnd )
{
//鍒涘緩Direct3D瀵硅薄, 璇ュ璞$敤浜庡垱寤篋irect3D璁懼瀵硅薄
if( NULL == ( g_pD3D = Direct3DCreate9( D3D_SDK_VERSION ) ) )
return E_FAIL;
//璁劇疆D3DPRESENT_PARAMETERS緇撴瀯, 鍑嗗鍒涘緩Direct3D璁懼瀵硅薄
D3DPRESENT_PARAMETERS d3dpp;
ZeroMemory( &d3dpp, sizeof(d3dpp) );
d3dpp.Windowed = TRUE;
d3dpp.SwapEffect = D3DSWAPEFFECT_DISCARD;
d3dpp.BackBufferFormat = D3DFMT_UNKNOWN;
//鍒涘緩Direct3D璁懼瀵硅薄
if( FAILED( g_pD3D->CreateDevice( D3DADAPTER_DEFAULT, D3DDEVTYPE_HAL, hWnd,
D3DCREATE_SOFTWARE_VERTEXPROCESSING,
&d3dpp, &g_pd3dDevice ) ) )
{
return E_FAIL;
}
//璁劇疆鍓斿嚭妯″紡涓轟笉鍓斿嚭浠諱綍闈?姝i潰鍜屽弽闈?
g_pd3dDevice->SetRenderState( D3DRS_CULLMODE, D3DCULL_NONE );
//鍏抽棴鍏夌収澶勭悊, 榛樿鎯呭喌涓嬪惎鐢ㄥ厜鐓у鐞?br> g_pd3dDevice->SetRenderState( D3DRS_LIGHTING, FALSE );
//璁劇疆瑙傚療鍜屾姇褰辯煩闃?br> SetupViewandProjMatrices();
//璁劇疆瑙嗗尯
SetupViewPort();
return S_OK;
}
//-----------------------------------------------------------------------------
// Desc: 鍒涘緩鍦烘櫙鍥懼艦
//-----------------------------------------------------------------------------
HRESULT InitGeometry()
{
//鍒涢《鐐圭紦鍐插尯
if( FAILED( g_pd3dDevice->CreateVertexBuffer( 50*2*sizeof(CUSTOMVERTEX),
0, D3DFVF_CUSTOMVERTEX,
D3DPOOL_DEFAULT, &g_pVB, NULL ) ) )
{
return E_FAIL;
}
//濉厖欏剁偣緙撳啿鍖?br> CUSTOMVERTEX* pVertices;
if( FAILED( g_pVB->Lock( 0, 0, (void**)&pVertices, 0 ) ) )
return E_FAIL;
for( DWORD i=0; i<50; i++ )
{
FLOAT theta = (2*D3DX_PI*i)/(50-1);
pVertices[2*i+0].position = D3DXVECTOR3( sinf(theta),-1.0f, cosf(theta) );
pVertices[2*i+0].color =0xffffff00;
pVertices[2*i+1].position = D3DXVECTOR3( sinf(theta), 1.0f, cosf(theta) );
pVertices[2*i+1].color =0xffffff00;
}
g_pVB->Unlock();
WORD g_Indices[100] ;
int index;
for (index=0;index<100;index++)
{
g_Indices[index]=index;
}
//鍒涘緩绱㈠紩緙撳啿鍖?br> if( FAILED( g_pd3dDevice->CreateIndexBuffer( 100*sizeof(WORD),
0, D3DFMT_INDEX16, //绱㈠紩綾誨瀷
D3DPOOL_DEFAULT, &g_pIB,NULL ) ) )
{
return E_FAIL;
}
//濉厖绱㈠紩緙撳啿鍖?br> VOID* pIndices;
if( FAILED( g_pIB->Lock( 0, sizeof(g_Indices), (void**)&pIndices, 0 ) ) )
return E_FAIL;
memcpy( pIndices, g_Indices, sizeof(g_Indices) );
g_pIB->Unlock();
return S_OK;
}
//-----------------------------------------------------------------------------
// Desc: 閲婃斁鍒涘緩鐨勫璞?br>//-----------------------------------------------------------------------------
VOID Cleanup()
{
//閲婃斁欏剁偣緙撳啿鍖哄璞?br> if( g_pVB != NULL )
g_pVB->Release();
//閲婃斁Direct3D璁懼瀵硅薄
if( g_pd3dDevice != NULL )
g_pd3dDevice->Release();
//閲婃斁Direct3D瀵硅薄
if( g_pD3D != NULL )
g_pD3D->Release();
}
//-----------------------------------------------------------------------------
// Desc: 娓叉煋鍥懼艦
//-----------------------------------------------------------------------------
VOID Render()
{
//娓呯┖鍚庡彴緙撳啿鍖?br> g_pd3dDevice->Clear( 0, NULL, D3DCLEAR_TARGET, D3DCOLOR_XRGB(45, 50, 170), 1.0f, 0 );
//寮濮嬪湪鍚庡彴緙撳啿鍖虹粯鍒跺浘褰?br> if( SUCCEEDED( g_pd3dDevice->BeginScene() ) )
{
//璁劇疆涓栫晫鐭╅樀
SetupWorldMatrice();
//鍦ㄥ悗鍙扮紦鍐插尯緇樺埗鍥懼艦
g_pd3dDevice->SetStreamSource( 0, g_pVB, 0, sizeof(CUSTOMVERTEX) );
g_pd3dDevice->SetFVF( D3DFVF_CUSTOMVERTEX );
g_pd3dDevice->SetIndices( g_pIB ); //璁劇疆绱㈠紩緙撳啿鍖?br> g_pd3dDevice->DrawIndexedPrimitive ( D3DPT_LINELIST, 0,0,100,0,50 );
//緇撴潫鍦ㄥ悗鍙扮紦鍐插尯娓叉煋鍥懼艦
g_pd3dDevice->EndScene();
}
//灝嗗湪鍚庡彴緙撳啿鍖虹粯鍒剁殑鍥懼艦鎻愪氦鍒板墠鍙扮紦鍐插尯鏄劇ず
g_pd3dDevice->Present( NULL, NULL, NULL, NULL );
}
//-----------------------------------------------------------------------------
// Desc: 娑堟伅澶勭悊
//-----------------------------------------------------------------------------
LRESULT WINAPI MsgProc( HWND hWnd, UINT msg, WPARAM wParam, LPARAM lParam )
{
switch( msg )
{
case WM_DESTROY:
Cleanup();
PostQuitMessage( 0 );
return 0;
}
return DefWindowProc( hWnd, msg, wParam, lParam );
}
//-----------------------------------------------------------------------------
// Desc: 鍏ュ彛鍑芥暟
//-----------------------------------------------------------------------------
INT WINAPI WinMain( HINSTANCE hInst, HINSTANCE, LPSTR, INT )
{
//娉ㄥ唽紿楀彛綾?br> WNDCLASSEX wc = { sizeof(WNDCLASSEX), CS_CLASSDC , MsgProc, 0L, 0L,
GetModuleHandle(NULL), NULL, NULL, NULL, NULL,
L"ClassName", NULL };
RegisterClassEx( &wc );
//鍒涘緩紿楀彛
HWND hWnd = CreateWindow( L"ClassName", L"鍧愭爣鍙樻崲",
WS_OVERLAPPEDWINDOW, 200, 100, 500,500,
GetDesktopWindow(), NULL, wc.hInstance, NULL );
g_Wnd=hWnd;
//鍒濆鍖朌irect3D
if( SUCCEEDED( InitD3D( hWnd ) ) )
{
//鍒涘緩鍦烘櫙鍥懼艦
if( SUCCEEDED( InitGeometry() ) )
{
//鏄劇ず紿楀彛
ShowWindow( hWnd, SW_SHOWDEFAULT );
UpdateWindow( hWnd );
//榪涘叆娑堟伅寰幆
MSG msg;
ZeroMemory( &msg, sizeof(msg) );
while( msg.message!=WM_QUIT )
{
if( PeekMessage( &msg, NULL, 0U, 0U, PM_REMOVE ) )
{
TranslateMessage( &msg );
DispatchMessage( &msg );
}
else
{
Render(); //娓叉煋鍥懼艦
}
}
}
}
UnregisterClass( L"ClassName", wc.hInstance );
return 0;
}
#include <d3d9.h>
#include <math.h>
//-----------------------------------------------------------------------------
// Desc: 鍏ㄥ眬鍙橀噺
//-----------------------------------------------------------------------------
LPDIRECT3D9 g_pD3D = NULL; // Direct3D瀵硅薄
LPDIRECT3DDEVICE9 g_pd3dDevice = NULL; // Direct3D璁懼瀵硅薄
LPDIRECT3DVERTEXBUFFER9 g_pVB = NULL; // 欏剁偣緙撳啿鍖哄璞?br>LPDIRECT3DINDEXBUFFER9 g_pIB = NULL; // 绱㈠紩緙撳啿鍖哄璞?/p>
//-----------------------------------------------------------------------------
// Desc: 欏剁偣緇撴瀯鍜岀伒媧婚《鐐規牸寮?br>//-----------------------------------------------------------------------------
struct CUSTOMVERTEX
{ FLOAT x, y, z, rhw; // 緇忚繃鍧愭爣杞崲鐨勯《鐐逛綅緗?br> DWORD color; // 欏剁偣婕弽灝勯鑹插?br>};
#define D3DFVF_CUSTOMVERTEX (D3DFVF_XYZRHW|D3DFVF_DIFFUSE)
//-----------------------------------------------------------------------------
// Desc: 鍒濆鍖朌irect3D
//-----------------------------------------------------------------------------
HRESULT InitD3D( HWND hWnd )
{
//鍒涘緩Direct3D瀵硅薄, 璇ュ璞$敤浜庡垱寤篋irect3D璁懼瀵硅薄
if( NULL == ( g_pD3D = Direct3DCreate9( D3D_SDK_VERSION ) ) )
return E_FAIL;
//璁劇疆D3DPRESENT_PARAMETERS緇撴瀯, 鍑嗗鍒涘緩Direct3D璁懼瀵硅薄
D3DPRESENT_PARAMETERS d3dpp;
ZeroMemory( &d3dpp, sizeof(d3dpp) );
d3dpp.Windowed = TRUE;
d3dpp.SwapEffect = D3DSWAPEFFECT_DISCARD;
d3dpp.BackBufferFormat = D3DFMT_UNKNOWN;
//鍒涘緩Direct3D璁懼瀵硅薄
if( FAILED( g_pD3D->CreateDevice( D3DADAPTER_DEFAULT, D3DDEVTYPE_HAL, hWnd,
D3DCREATE_SOFTWARE_VERTEXPROCESSING,
&d3dpp, &g_pd3dDevice ) ) )
{
return E_FAIL;
}
return S_OK;
}
//-----------------------------------------------------------------------------
// Desc: 鍒涘緩騫跺~鍏呴《鐐圭紦鍐插尯鍜岀儲寮曠紦鍐插尯
//-----------------------------------------------------------------------------
HRESULT InitVBAndIB()
{
//欏剁偣鏁版嵁
CUSTOMVERTEX g_Vertices[9];
g_Vertices[0].x = 300;
g_Vertices[0].y = 250;
g_Vertices[0].z = 0.5f;
g_Vertices[0].rhw = 1.0f;
g_Vertices[0].color = 0xffff0000;
for(int i=0; i<8; i++)
{
g_Vertices[i+1].x = (float)(200*sin(i*3.14159/4.0)) + 300;
g_Vertices[i+1].y = -(float)(200*cos(i*3.14159/4.0)) + 250;
g_Vertices[i+1].z = 0.5f;
g_Vertices[i+1].rhw = 1.0f;
g_Vertices[i+1].color = 0xff00ff00;
}
//欏剁偣绱㈠紩鏁扮粍
WORD g_Indices[] ={ 0,1,2, 0,2,3, 0,3,4, 0,4,5, 0,5,6, 0,6,7, 0,7,8, 0,8,1 };
//鍒涘緩欏剁偣緙撳啿鍖?br> if( FAILED( g_pd3dDevice->CreateVertexBuffer( 9*sizeof(CUSTOMVERTEX),
0, D3DFVF_CUSTOMVERTEX,
D3DPOOL_DEFAULT, &g_pVB,NULL ) ) )
{
return E_FAIL;
}
//濉厖欏剁偣緙撳啿鍖?br> VOID* pVertices;
if( FAILED( g_pVB->Lock( 0, sizeof(g_Vertices), (void**)&pVertices, 0 ) ) )
return E_FAIL;
memcpy( pVertices, g_Vertices, sizeof(g_Vertices) );
g_pVB->Unlock();
//鍒涘緩绱㈠紩緙撳啿鍖?br> if( FAILED( g_pd3dDevice->CreateIndexBuffer( 24*sizeof(WORD),
0, D3DFMT_INDEX16, //绱㈠紩綾誨瀷
D3DPOOL_DEFAULT, &g_pIB,NULL ) ) )
{
return E_FAIL;
}
//濉厖欏剁偣緙撳啿鍖?br> VOID* pIndices;
if( FAILED( g_pIB->Lock( 0, sizeof(g_Indices), (void**)&pIndices, 0 ) ) )
return E_FAIL;
memcpy( pIndices, g_Indices, sizeof(g_Indices) );
g_pIB->Unlock();
return S_OK;
}
//-----------------------------------------------------------------------------
// Desc: 閲婃斁鍒涘緩鐨勫璞?br>//-----------------------------------------------------------------------------
VOID Cleanup()
{
//閲婃斁欏剁偣緙撳啿鍖哄璞?br> if( g_pVB != NULL )
g_pVB->Release();
//閲婃斁绱㈠紩緙撳啿鍖哄璞?br> if(g_pIB != NULL)
g_pIB->Release();
//閲婃斁Direct3D璁懼瀵硅薄
if( g_pd3dDevice != NULL )
g_pd3dDevice->Release();
//閲婃斁Direct3D瀵硅薄
if( g_pD3D != NULL )
g_pD3D->Release();
}
//-----------------------------------------------------------------------------
// Desc: 娓叉煋鍥懼艦
//-----------------------------------------------------------------------------
VOID Render()
{
//娓呯┖鍚庡彴緙撳啿鍖?br> g_pd3dDevice->Clear( 0, NULL, D3DCLEAR_TARGET, D3DCOLOR_XRGB(0,0,255), 1.0f, 0 );
//寮濮嬪湪鍚庡彴緙撳啿鍖虹粯鍒跺浘褰?br> if( SUCCEEDED( g_pd3dDevice->BeginScene()))
{
//鍦ㄥ悗鍙扮紦鍐插尯緇樺埗鍥懼艦
g_pd3dDevice->SetStreamSource( 0, g_pVB, 0, sizeof(CUSTOMVERTEX) );
g_pd3dDevice->SetFVF( D3DFVF_CUSTOMVERTEX );
g_pd3dDevice->SetIndices( g_pIB ); //璁劇疆绱㈠紩緙撳啿鍖?br> g_pd3dDevice->DrawIndexedPrimitive ( D3DPT_TRIANGLELIST, 0,0,9,0,8 );
//緇撴潫鍦ㄥ悗鍙扮紦鍐插尯娓叉煋鍥懼艦
g_pd3dDevice->EndScene();
}
//灝嗗湪鍚庡彴緙撳啿鍖虹粯鍒剁殑鍥懼艦鎻愪氦鍒板墠鍙扮紦鍐插尯鏄劇ず
g_pd3dDevice->Present( NULL, NULL, NULL, NULL );
}
//-----------------------------------------------------------------------------
// Desc: 娑堟伅澶勭悊
//-----------------------------------------------------------------------------
LRESULT WINAPI MsgProc( HWND hWnd, UINT msg, WPARAM wParam, LPARAM lParam )
{
switch( msg )
{
case WM_DESTROY:
PostQuitMessage( 0 );
return 0;
}
return DefWindowProc( hWnd, msg, wParam, lParam );
}
//-----------------------------------------------------------------------------
// Desc: 鍏ュ彛鍑芥暟
//-----------------------------------------------------------------------------
INT WINAPI WinMain( HINSTANCE hInst, HINSTANCE, LPSTR, INT )
{
//娉ㄥ唽紿楀彛綾?br> WNDCLASSEX wc = { sizeof(WNDCLASSEX), CS_CLASSDC | CS_HREDRAW | CS_VREDRAW, MsgProc, 0L, 0L,
GetModuleHandle(NULL), NULL, NULL, NULL, NULL,
L"ClassName", NULL };
RegisterClassEx( &wc );
//鍒涘緩紿楀彛
HWND hWnd = CreateWindow( L"ClassName", L"绱㈠紩緙撳啿鍖?,
WS_OVERLAPPEDWINDOW, 200, 100, 600, 550,
GetDesktopWindow(), NULL, wc.hInstance, NULL );
//鍒濆鍖朌irect3D
if( SUCCEEDED( InitD3D( hWnd ) ) )
{
//鍒涘緩騫跺~鍏呴《鐐圭紦鍐插尯鍜岀儲寮曠紦鍐插尯
if( SUCCEEDED( InitVBAndIB() ) )
{
//鏄劇ず紿楀彛
ShowWindow( hWnd, SW_SHOWDEFAULT );
UpdateWindow( hWnd );
//榪涘叆娑堟伅寰幆
MSG msg;
ZeroMemory( &msg, sizeof(msg) );
while( msg.message!=WM_QUIT )
{
if( PeekMessage( &msg, NULL, 0U, 0U, PM_REMOVE ) )
{
TranslateMessage( &msg );
DispatchMessage( &msg );
}
else
{
Render(); //娓叉煋鍥懼艦
}
}
}
}
UnregisterClass( L"ClassName", wc.hInstance );
return 0;
}
浣嗗綋鎴戞兂鎶婁緥瀛愭敼鎴愪笅闈㈤偅鏍蜂嬌鐢ㄩ《鐐圭紦瀛樻椂鍙戠幇涓嶈兘杈懼埌鐩殑
HRESULT InitVBAndIB()
{
//欏剁偣鏁版嵁
CUSTOMVERTEX g_Vertices[9];
g_Vertices[0].x = 300;
g_Vertices[0].y = 250;
g_Vertices[0].z = 0.5f;
g_Vertices[0].rhw = 1.0f;
g_Vertices[0].color = 0xffff0000;
for(int i=0; i<8; i++)
{
g_Vertices[i+1].x = (float)(200*sin(i*3.14159/4.0)) + 300;
g_Vertices[i+1].y = -(float)(200*cos(i*3.14159/4.0)) + 250;
g_Vertices[i+1].z = 0.5f;
g_Vertices[i+1].rhw = 1.0f;
g_Vertices[i+1].color = 0xff00ff00;
}
//欏剁偣绱㈠紩鏁扮粍
WORD g_Indices[] ={ 0,1,2, 0,2,3, 0,3,4, 0,4,5, 0,5,6, 0,6,7, 0,7,8, 0,8,1 };
//鍒涘緩欏剁偣緙撳啿鍖?br> if( FAILED( g_pd3dDevice->CreateVertexBuffer( 9*sizeof(CUSTOMVERTEX),
0, D3DFVF_CUSTOMVERTEX,
D3DPOOL_DEFAULT, &g_pVB,NULL ) ) )
{
return E_FAIL;
}
//濉厖欏剁偣緙撳啿鍖?br> VOID* pVertices;
if( FAILED( g_pVB->Lock( 0, sizeof(g_Vertices), (void**)&pVertices, 0 ) ) )
return E_FAIL;
memcpy( pVertices, g_Vertices, sizeof(g_Vertices) );
g_pVB->Unlock();
return S_OK;
}
//-----------------------------------------------------------------------------
// Desc: 閲婃斁鍒涘緩鐨勫璞?br>//-----------------------------------------------------------------------------
VOID Cleanup()
{
//閲婃斁欏剁偣緙撳啿鍖哄璞?br> if( g_pVB != NULL )
g_pVB->Release();
//閲婃斁Direct3D璁懼瀵硅薄
if( g_pd3dDevice != NULL )
g_pd3dDevice->Release();
//閲婃斁Direct3D瀵硅薄
if( g_pD3D != NULL )
g_pD3D->Release();
}
//-----------------------------------------------------------------------------
// Desc: 娓叉煋鍥懼艦
//-----------------------------------------------------------------------------
VOID Render()
{
//娓呯┖鍚庡彴緙撳啿鍖?br> g_pd3dDevice->Clear( 0, NULL, D3DCLEAR_TARGET, D3DCOLOR_XRGB(0,0,255), 1.0f, 0 );
//寮濮嬪湪鍚庡彴緙撳啿鍖虹粯鍒跺浘褰?br> if( SUCCEEDED( g_pd3dDevice->BeginScene()))
{
//鍦ㄥ悗鍙扮紦鍐插尯緇樺埗鍥懼艦
g_pd3dDevice->SetStreamSource( 0, g_pVB, 0, sizeof(CUSTOMVERTEX) );
g_pd3dDevice->SetFVF( D3DFVF_CUSTOMVERTEX );
g_pd3dDevice->DrawPrimitive ( D3DPT_TRIANGLELIST, 0,8 );
//緇撴潫鍦ㄥ悗鍙扮紦鍐插尯娓叉煋鍥懼艦
g_pd3dDevice->EndScene();
}
//灝嗗湪鍚庡彴緙撳啿鍖虹粯鍒剁殑鍥懼艦鎻愪氦鍒板墠鍙扮紦鍐插尯鏄劇ず
g_pd3dDevice->Present( NULL, NULL, NULL, NULL );
}