|
|
搞不懂啊搞不懂
我运行他给的例子就行
但是复制到我工程里就不行了
- 头文件
- #pragma once
- #include "resource.h"
- template<class T>void Release(T t)
- {
- if(t)
- {
- t->Release();
- }
- }
- CPP
- #include "stdafx.h"
- #include "DX3.h"
- #include <d3dx9.h>
- #include "mmsystem.h"
- #pragma comment(lib, "d3d9.lib")
- #pragma comment(lib, "d3dx9.lib")
- #pragma comment(lib, "dxguid.lib")
- #pragma comment(lib,"winmm.lib")
- IDirect3DDevice9 *Device = 0;
- D3DXMATRIX w;
- IDirect3DVertexBuffer9* VB = 0;
- IDirect3DTexture9* Tex = 0;
- struct Vertex
- {
-
- Vertex(){};
- Vertex(float x,float y,float z,float a,float b,float t,float u,float v)
- {
- _x =x;
- _y=y;
- _z=z;
- _a=a;
- _b=b;
- _c=t;
- _u=u;
- _v=v;
- }
- float _x,_y,_z;
- float _a,_b,_c;
- float _u,_v;
- static const DWORD FVF;
- };
- const DWORD Vertex::FVF = D3DFVF_XYZ|D3DFVF_NORMAL|D3DFVF_TEX1;
- LRESULT CALLBACK WndProc(HWND, UINT, WPARAM, LPARAM);
- int EnterMsgLoop( bool (*p)(float timeDelta) );
- bool Display(float timeDelta);
- int APIENTRY _tWinMain(HINSTANCE hInstance,
- HINSTANCE hPrevInstance,
- LPTSTR lpCmdLine,
- int nCmdShow)
- {
-
- static TCHAR szAppName[] = TEXT ("1") ;
- HWND hwnd ;
-
- WNDCLASS wndclass ;
- wndclass.style = CS_HREDRAW | CS_VREDRAW ;
- wndclass.lpfnWndProc = WndProc ;
- wndclass.cbClsExtra = 0 ;
- wndclass.cbWndExtra = 0 ;
- wndclass.hInstance = hInstance ;
- wndclass.hIcon = LoadIcon (NULL, IDI_APPLICATION) ;
- wndclass.hCursor = LoadCursor (NULL, IDC_ARROW) ;
- wndclass.hbrBackground = (HBRUSH) GetStockObject (WHITE_BRUSH) ;
- wndclass.lpszMenuName = NULL ;
- wndclass.lpszClassName = szAppName ;
- if (!RegisterClass (&wndclass))
- {
- MessageBox (NULL, TEXT ("This program requires Windows NT!"),
- szAppName, MB_ICONERROR) ;
- return 0 ;
- }
-
- hwnd = CreateWindow (szAppName, // window class name
- TEXT ("1"), // window caption
- WS_OVERLAPPEDWINDOW, // window style
- CW_USEDEFAULT, // initial x position
- CW_USEDEFAULT, // initial y position
- 640, // initial x size
- 480, // initial y size
- NULL, // parent window handle
- NULL, // window menu handle
- hInstance, // program instance handle
- NULL) ; // creation parameters
-
- ShowWindow (hwnd, nCmdShow) ;
- UpdateWindow (hwnd) ;
- //创建D3D接口
- HRESULT hr= 0;
- IDirect3D9* d3d9 =0;
- d3d9 = Direct3DCreate9(D3D_SDK_VERSION);
- if(!d3d9)
- {
- MessageBox(NULL, TEXT ("This program requires Windows NT!"),
- szAppName, MB_ICONERROR) ;
- }
-
-
- D3DCAPS9 caps;
- d3d9->GetDeviceCaps(D3DADAPTER_DEFAULT,D3DDEVTYPE_HAL,&caps);
- int vp = 0;
- if(caps.DevCaps & D3DDEVCAPS_HWTRANSFORMANDLIGHT)
- vp=D3DCREATE_HARDWARE_VERTEXPROCESSING;
- else
- vp = D3DCREATE_SOFTWARE_VERTEXPROCESSING;
-
-
-
-
- D3DPRESENT_PARAMETERS d3dpp;
- d3dpp.AutoDepthStencilFormat =D3DFMT_D24S8;
- d3dpp.BackBufferCount =1;
- d3dpp.BackBufferFormat =D3DFMT_A8R8G8B8;
- d3dpp.BackBufferHeight =480;
- d3dpp.BackBufferWidth =640;
- d3dpp.EnableAutoDepthStencil = true;
- d3dpp.Flags =0;
- d3dpp.FullScreen_RefreshRateInHz =D3DPRESENT_RATE_DEFAULT;
- d3dpp.hDeviceWindow = hwnd;
- d3dpp.MultiSampleQuality =0;
- d3dpp.MultiSampleType =D3DMULTISAMPLE_NONE;
- d3dpp.PresentationInterval =D3DPRESENT_INTERVAL_IMMEDIATE;
- d3dpp.SwapEffect =D3DSWAPEFFECT_DISCARD;
- d3dpp.Windowed = true ;
-
-
-
- hr=d3d9->CreateDevice(D3DADAPTER_DEFAULT,
- D3DDEVTYPE_HAL,
- hwnd,
- vp,
- &d3dpp,
- &Device);
- if(FAILED(hr))
- {
-
- d3dpp.AutoDepthStencilFormat =D3DFMT_D16;
- hr=d3d9->CreateDevice(D3DADAPTER_DEFAULT,
- D3DDEVTYPE_HAL,
- hwnd,
- vp,
- &d3dpp,
- &Device);
- if(FAILED(hr))
- {
- MessageBox(NULL, TEXT ("创建失败!"),
- szAppName, MB_ICONERROR) ;
- return 0;
- }
- }
- //d3d9->Release();
-
- Device->CreateVertexBuffer
- (
- 6*sizeof(Vertex),
- D3DUSAGE_WRITEONLY,
- Vertex::FVF ,
- D3DPOOL_MANAGED,
- &VB,
- 0
- );
-
- Vertex * v;
- VB->Lock(0,0,(void**)&v,0);
- v[0] = Vertex(-1.0f, -1.0f, 1.25f,/*三角形坐标*/ 0.0f,0.0f,-1.0f,/*点法线*/ 0.0f,3.0f/*纹理坐标*/);
- v[1] = Vertex(-1.0f,1.0f,1.25f,0.0f,0.0f,-1.0f,0.0f,0.0f );
- v[2] = Vertex( 1.0f,1.0f,1.25f,0.0f,0.0f,-1.0f,3.0f,0.0f);
- // left face
- v[3] = Vertex(-1.0f,-1.0f,1.25f,0.0f,0.0f,-1.0f,0.0f,3.0f);
- v[4] = Vertex(1.0f,1.0f,1.25f,0.0f,0.0f,-1.0f,3.0f,0.0f );
- v[5] = Vertex(1.0f,-1.0f,1.25f,0.0f,0.0f,-1.0f,3.0f,3.0f);
-
-
- VB->Unlock();
-
-
- D3DXCreateTextureFromFile(Device,(LPCTSTR)"a.jpg",&Tex);
- Device->SetTexture (0,Tex);
-
- Device->SetSamplerState (0,D3DSAMP_MAGFILTER,D3DTEXF_LINEAR);
- Device->SetSamplerState (0,D3DSAMP_MAGFILTER,D3DTEXF_LINEAR);
- Device->SetSamplerState (0,D3DSAMP_MAGFILTER,D3DTEXF_POINT);
-
- Device->SetRenderState (D3DRS_LIGHTING,false);
-
- D3DXMATRIX proj;
- D3DXMatrixPerspectiveFovLH(
- &proj,
- D3DX_PI* 0.5f,
- 640/480,
- 1.0f,//近投影面
- 1000.0f//远投影面
- );
- Device->SetTransform (D3DTS_PROJECTION,&proj);
- EnterMsgLoop(Display);
- //释放资源
- Release<IDirect3DVertexBuffer9*>(VB);
- Release<IDirect3DTexture9*>(Tex);
- }
- bool Display(float timeDelta)
- {
- if(Device)
- {
- if( ::GetAsyncKeyState('W') & 0x8000f )
- {
- Device->SetSamplerState(0, D3DSAMP_ADDRESSU, D3DTADDRESS_WRAP);
- Device->SetSamplerState(0, D3DSAMP_ADDRESSV, D3DTADDRESS_WRAP);
- }
- // set border color address mode
- if( ::GetAsyncKeyState('B') & 0x8000f )
- {
- Device->SetSamplerState(0, D3DSAMP_ADDRESSU, D3DTADDRESS_BORDER);
- Device->SetSamplerState(0, D3DSAMP_ADDRESSV, D3DTADDRESS_BORDER);
- Device->SetSamplerState(0, D3DSAMP_BORDERCOLOR, 0x000000ff);
- }
- // set clamp address mode
- if( ::GetAsyncKeyState('C') & 0x8000f )
- {
- Device->SetSamplerState(0, D3DSAMP_ADDRESSU, D3DTADDRESS_CLAMP);
- Device->SetSamplerState(0, D3DSAMP_ADDRESSV, D3DTADDRESS_CLAMP);
- }
- // set mirror address mode
- if( ::GetAsyncKeyState('M') & 0x8000f )
- {
- Device->SetSamplerState(0, D3DSAMP_ADDRESSU, D3DTADDRESS_MIRROR);
- Device->SetSamplerState(0, D3DSAMP_ADDRESSV, D3DTADDRESS_MIRROR);
- }
-
- Device->Clear(0,0,D3DCLEAR_TARGET|D3DCLEAR_ZBUFFER,0xffffffff,1.0f,0);
-
- Device->BeginScene();
- Device->SetStreamSource(0,VB,0,sizeof(Vertex));//合并顶点资源流
- Device->SetFVF(Vertex::FVF);
-
-
-
- Device->DrawPrimitive(D3DPT_TRIANGLELIST,0,2);
-
-
- Device->EndScene();
- Device->Present(0,0,0,0);
- }
- return true;
- }
- LRESULT CALLBACK WndProc (HWND hwnd, UINT message, WPARAM wParam, LPARAM lParam)
- {
-
-
- switch (message)
- {
- case WM_KEYDOWN:
- if(wParam == VK_ESCAPE)
- DestroyWindow(hwnd);
-
- case WM_DESTROY:
- PostQuitMessage (0) ;
- return 0 ;
- }
- return DefWindowProc (hwnd, message, wParam, lParam) ;
- }
- int EnterMsgLoop( bool (*p)(float timeDelta) )
- {
- MSG msg ;
- ZeroMemory(&msg,sizeof(MSG));
- static float lastTime = (float)timeGetTime();
- while (msg.message != WM_QUIT)
- {
- if(PeekMessage(&msg,0,0,0,PM_REMOVE))
- {
- TranslateMessage (&msg) ;
- DispatchMessage (&msg) ;
- }
- else
- {
- float currtTime = (float)timeGetTime();
- float timeDelta = (currtTime - lastTime)*0.001f;
- p(timeDelta);
- lastTime = currtTime;
- }
- }
- return (int)msg.wParam ;
-
- }
复制代码 |
|