D3D 兩個三角形旋轉 小例子,d3d三角形旋轉例子

來源:互聯網
上載者:User

D3D 兩個三角形旋轉 小例子,d3d三角形旋轉例子

兩個三角形圍繞Y軸旋轉。

程式

#pragma once#pragma comment(lib,"winmm.lib")#pragma comment(lib,"d3d9.lib")#pragma comment(lib,"d3dx9.lib")#include<d3d9.h>#include<d3dx9.h>struct CUSTOMVERTEX{FLOAT x,y,z;DWORD color;};#define D3DFVF_CUSTOMVERTEX (D3DFVF_XYZ|D3DFVF_DIFFUSE)LRESULT CALLBACK MsgProc(HWND hWnd,UINT msg,WPARAM wParam,LPARAM lParam);HRESULT InitVariable(HWND hWnd);void Render();HRESULT InitD3D(HWND hWnd);HRESULT InitVertexData();void CleanUp();void SetupMatrices();LPDIRECT3D9 g_pd3d9=NULL;LPDIRECT3DDEVICE9 g_pd3dDevice9=NULL;LPDIRECT3DVERTEXBUFFER9 g_pd3dVB=NULL;INT WINAPI wWinMain(HINSTANCE,HINSTANCE,LPWSTR,INT){//initialize wnd class struct.WNDCLASSEX wcex;ZeroMemory(&wcex,sizeof(wcex));wcex.cbSize=sizeof(wcex);wcex.hInstance=GetModuleHandle(NULL);wcex.lpfnWndProc=MsgProc;wcex.style=CS_CLASSDC;wcex.lpszClassName=L"Self002";//register wnd class.RegisterClassEx(&wcex);//create window.HWND hWnd=CreateWindowEx(WS_EX_OVERLAPPEDWINDOW,L"Self002",L"Self002 Window",WS_OVERLAPPEDWINDOW,100,100,300,300,NULL,NULL,wcex.hInstance,NULL);//show window and enter message loop.if(SUCCEEDED(InitVariable(hWnd))){//show window.ShowWindow(hWnd,SW_SHOWDEFAULT);UpdateWindow(hWnd);//enter message loop.MSG msg;ZeroMemory(&msg,sizeof(msg));while(msg.message != WM_QUIT){if(PeekMessage(&msg,NULL,0,0,PM_REMOVE)){TranslateMessage(&msg);DispatchMessage(&msg);}else{Render();}}}//unregister wnd class.UnregisterClass(L"Self002",wcex.hInstance);return 0;}LRESULT CALLBACK 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);}HRESULT InitVariable(HWND hWnd){if(FAILED(InitD3D(hWnd))){return E_FAIL;}if(FAILED(InitVertexData())){return E_FAIL;}return S_OK;}void Render(){//TODO: render your sence.//clear render target.g_pd3dDevice9->Clear(0,NULL,D3DCLEAR_TARGET,D3DCOLOR_XRGB(0,0,0),1.0f,0);if(SUCCEEDED(g_pd3dDevice9->BeginScene())){SetupMatrices();g_pd3dDevice9->SetStreamSource(0,g_pd3dVB,0,sizeof(CUSTOMVERTEX));g_pd3dDevice9->SetFVF(D3DFVF_CUSTOMVERTEX);g_pd3dDevice9->DrawPrimitive(D3DPT_TRIANGLELIST,0,2);g_pd3dDevice9->EndScene();}g_pd3dDevice9->Present(NULL,NULL,NULL,NULL);}HRESULT InitD3D(HWND hWnd){//TODO: initialize d3d variables.//create d3dg_pd3d9=Direct3DCreate9(D3D_SDK_VERSION);if(g_pd3d9 == NULL){return E_FAIL;}//initialize d3d present parameters.D3DPRESENT_PARAMETERS d3dpp;ZeroMemory(&d3dpp,sizeof(d3dpp));d3dpp.Windowed=TRUE;d3dpp.SwapEffect=D3DSWAPEFFECT_DISCARD;d3dpp.BackBufferFormat=D3DFMT_UNKNOWN;//create d3d device.if(FAILED(g_pd3d9->CreateDevice(D3DADAPTER_DEFAULT,D3DDEVTYPE_HAL,hWnd,D3DCREATE_SOFTWARE_VERTEXPROCESSING,&d3dpp,&g_pd3dDevice9))){return E_FAIL;}//turn off culling.g_pd3dDevice9->SetRenderState(D3DRS_CULLMODE,D3DCULL_NONE);//turn off lighting.g_pd3dDevice9->SetRenderState(D3DRS_LIGHTING,FALSE);return S_OK;}HRESULT InitVertexData(){//TODO:initialize your vertex data.//initialize vertex data.CUSTOMVERTEX vertices[6]={{-1.0f,-1.0f,0.0f,D3DCOLOR_XRGB(255,0,0)},{-1.0f,1.0f,0.0f,D3DCOLOR_XRGB(0,0,255)},{0.0f,0.0f,0.0f,D3DCOLOR_XRGB(0,255,0)},{0.0f,0.0f,0.0f,D3DCOLOR_XRGB(0,255,0)},{1.0f,1.0f,0.0f,D3DCOLOR_XRGB(0,0,255)},{1.0f,-1.0f,0.0f,D3DCOLOR_XRGB(255,0,0)}};//create vertex buffer.if(FAILED(g_pd3dDevice9->CreateVertexBuffer(sizeof(vertices),0,D3DFVF_CUSTOMVERTEX,D3DPOOL_DEFAULT,&g_pd3dVB,NULL))){return E_FAIL;}//fill data to vertex buffer.void* pVertices=NULL;if(FAILED(g_pd3dVB->Lock(0,sizeof(vertices),&pVertices,0))){return E_FAIL;}memcpy(pVertices,vertices,sizeof(vertices));g_pd3dVB->Unlock();return S_OK;}void CleanUp(){//TODO: clean up you variables.if(g_pd3dVB != NULL){g_pd3dVB->Release();}if(g_pd3dDevice9 != NULL){g_pd3dDevice9->Release();}if(g_pd3d9 != NULL){g_pd3d9->Release();}}void SetupMatrices(){//TODO: setuo transform matrix.//set world transform matrix.D3DXMATRIXA16 matWorld;UINT itimes=timeGetTime()%1000;FLOAT fAngle=itimes * ( 2.0f * D3DX_PI ) / 1000.0f;D3DXMatrixRotationY(&matWorld,fAngle);g_pd3dDevice9->SetTransform(D3DTS_WORLD,&matWorld);//set view transform matrix.D3DXMATRIXA16 matView;D3DXVECTOR3 vEye(0.0f,1.0f,-5.0f);D3DXVECTOR3 vLookAt(0.0f,0.0f,0.0f);D3DXVECTOR3 vUp(0.0f,1.0f,0.0f);D3DXMatrixLookAtLH(&matView,&vEye,&vLookAt,&vUp);g_pd3dDevice9->SetTransform(D3DTS_VIEW,&matView);//set projection transform matrix.D3DXMATRIXA16 matProj;D3DXMatrixPerspectiveFovLH(&matProj,D3DX_PI/4,1.0f,1.0f,100.0f);g_pd3dDevice9->SetTransform(D3DTS_PROJECTION,&matProj);}

運行結果

1.注意關閉光照和背面剔出。

2.主要練習座標變換,但是仍然不是很理解。


兩個完全一樣的三角形通過旋轉平移,可以拼成( )形,如果拼成這個圖形的面積是18平方厘米,那其中

兩個完全一樣的三角形通過旋轉.平移,可以拼成( 平行四邊 )形,如果拼成這個圖形的面積是18平方厘米,那麼其中一個三角形的面積是( 9 )平方厘米
 
兩個完全一樣的三角形通過旋轉平移,拼成一個( )形,如果拼成的這個圖形的面積是24平方米,那一個

兩個完全一樣的三角形通過旋轉平移,拼成一個(平行四邊 )形,如果拼成的這個圖形的面積是24平方米,那麼一個三角形的面積是( 12 )平方米。
 

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.