Examples of D3D triangle rotation and d3d triangle Rotation
The two triangles rotate around the Y axis.
Program
#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);}
Running result
1. Turn off the light and clear the back.
2. The main practice is coordinate transformation, but it is still not very understandable.
Two identical triangles can be combined into a () Shape by rotating and translating. If the area of the image is 18 cm²
Two identical triangles can be combined into a (parallel four sides) Shape by rotating and translating. If the area of the image is 18 cm², then the area of one of the triangles is (9) square centimeter.
Two completely identical triangles are converted into a () Shape by rotation and translation. If the area of the image is 24 m², then
Two completely identical triangles are combined into one (parallel four sides) Shape by rotating and translating. If the area of this image is 24 m², then the area of a triangle is (12) square meters.