D3D学习一:真是坑爹的书啊,初始化
2011-08-02 22:11
246 查看
纠结了N天,直接导入《DirectX 9.0 游戏开发编程基础》书本配套的工程运行没什么问题,为了可以尽快熟悉代码,我自己新建工程手打了一次,果真有N多的错误,看着代码明明都一样了就是运行不能,最后调试得崩溃了,干脆直接把配套的代码完全复制过了试试。他妈的,坑爹运行不能:
错误1error LNK2019: 无法解析的外部符号 _Direct3DCreate9@4,该符号在函数 "bool __cdecl d3d::InitD3D(struct HINSTANCE__ *,int,int,bool,enum _D3DDEVTYPE,struct IDirect3DDevice9 *
*)" (?InitD3D@d3d@@YA_NPAUHINSTANCE__@@HH_NW4_D3DDEVTYPE@@PAPAUIDirect3DDevice9@@@Z) 中被引用
错误2error LNK2019: 无法解析的外部符号 __imp__timeGetTime@0,该符号在函数 "int __cdecl d3d::EnterMsgLoop(bool (__cdecl*)(float))" (?EnterMsgLoop@d3d@@YAHP6A_NM@Z@Z)
中被引用
后来经过N次得看书,说要工程要导入库文件:d3d9.lib 、d3dx9.h 、 winmm.lib 这不,在工具选项里导进去没效果,
坑爹啊后来查了谷歌才发现,这个要添加文件的地方在:
项目/属性/配置属性/连接器/输入/附加依赖项中添加
加进去以后就能跑了!
源代码(代码非原创,书上敲下来的):
错误1error LNK2019: 无法解析的外部符号 _Direct3DCreate9@4,该符号在函数 "bool __cdecl d3d::InitD3D(struct HINSTANCE__ *,int,int,bool,enum _D3DDEVTYPE,struct IDirect3DDevice9 *
*)" (?InitD3D@d3d@@YA_NPAUHINSTANCE__@@HH_NW4_D3DDEVTYPE@@PAPAUIDirect3DDevice9@@@Z) 中被引用
错误2error LNK2019: 无法解析的外部符号 __imp__timeGetTime@0,该符号在函数 "int __cdecl d3d::EnterMsgLoop(bool (__cdecl*)(float))" (?EnterMsgLoop@d3d@@YAHP6A_NM@Z@Z)
中被引用
后来经过N次得看书,说要工程要导入库文件:d3d9.lib 、d3dx9.h 、 winmm.lib 这不,在工具选项里导进去没效果,
坑爹啊后来查了谷歌才发现,这个要添加文件的地方在:
项目/属性/配置属性/连接器/输入/附加依赖项中添加
加进去以后就能跑了!
源代码(代码非原创,书上敲下来的):
//《3D游戏编程》金容俊/肖永亮
//----------------------------------------------------------------------- // 创建D3D设备,学习清除画面的方法 //----------------------------------------------------------------------- //使用Direct3D9的首部 #include <d3d9.h> #include <windows.h> //全局参数 LPDIRECT3D9 g_pD3D = NULL; //创建D3D设备的D3D对象参数 LPDIRECT3DDEVICE9 g_pd3dDevice = NULL; //渲染中使用的D3D设备 //Direct3D初始化 HRESULT InitD3D(HWND hWnd) { //创建一个用来创建设备的D3D对象 if(NULL == (g_pD3D = Direct3DCreate9(D3D_SDK_VERSION))) return E_FAIL; D3DPRESENT_PARAMETERS d3dpp; //创建设备的结构体 ZeroMemory(&d3dpp, sizeof(d3dpp)); //必须调用ZeroMemory()函数将结构体清零 d3dpp.Windowed = TRUE; //创建窗口模式 d3dpp.SwapEffect = D3DSWAPEFFECT_DISCARD; //最有效的Swap效果 d3dpp.BackBufferFormat = D3DFMT_UNKNOWN; //建立一个与当前显示模式相匹配的后置缓冲区 //按照以下设置,创建设备; // 1.使用默认设置的显卡(大部分机子都是单显卡) // 2.创建HAL设备(使用HW加速装置,即硬件加速) // 3.顶点处理由支持所用显卡的SW创建(由HW创建性能更佳) if(FAILED(g_pD3D->CreateDevice(D3DADAPTER_DEFAULT, D3DDEVTYPE_HAL, hWnd, D3DCREATE_SOFTWARE_VERTEXPROCESSING, &d3dpp, &g_pd3dDevice))) { return E_FAIL; } //处理设备状态信息时,从这里进行 return S_OK; } //删除初始化对象 VOID Cleanup() { if(g_pd3dDevice != NULL) g_pd3dDevice->Release(); if(g_pD3D != NULL) g_pD3D->Release(); } //绘图 VOID Render() { if(NULL == g_pd3dDevice) return; //将后置缓存清除,同时设置为蓝色 g_pd3dDevice->Clear(0, NULL, D3DCLEAR_TARGET, D3DCOLOR_XRGB(0, 0, 255), 1.0f, 0); //开始渲染 if(SUCCEEDED(g_pd3dDevice->BeginScene())) { //实际渲染命令栏 //结束渲染 g_pd3dDevice->EndScene(); } //显示后置缓冲的画面 g_pd3dDevice->Present(NULL, NULL, NULL, NULL); } //窗口过程 LRESULT WINAPI MsgProc(HWND hWnd, UINT msg, WPARAM wParam, LPARAM lParam) { switch(msg) { case WM_DESTROY: Cleanup(); PostQuitMessage(0); return 0; case WM_PAINT: Render(); ValidateRect(hWnd, NULL); return 0; } return DefWindowProc(hWnd, msg, wParam, lParam); } //程序的起始地址 INT WINAPI WinMain(HINSTANCE hInst, HINSTANCE, LPSTR, INT) { //注册窗口类 WNDCLASSEX wc = { sizeof(WNDCLASSEX), CS_CLASSDC, MsgProc, 0L, 0L, GetModuleHandle(NULL), NULL, NULL, NULL, NULL, TEXT("D3D Tutorial"), NULL }; RegisterClassEx(&wc); //创建窗口 GetDesktopWindow() HWND hWnd = CreateWindow(TEXT("D3D Tutorial"), TEXT("D3D Tutorial 01:CreateDevice"), WS_OVERLAPPEDWINDOW, 100, 100, 300, 300, GetDesktopWindow(), NULL, wc.hInstance, NULL); //HWND hWnd = CreateWindow() //Direct3D初始化 if(SUCCEEDED(InitD3D(hWnd))) { //显示窗口 ShowWindow(hWnd,SW_SHOWDEFAULT); UpdateWindow(hWnd); //消息循环 MSG msg; while(GetMessage(&msg, NULL, 0, 0)) { TranslateMessage(&msg); DispatchMessage(&msg); } } //删除注册的类 UnregisterClass(TEXT("D3D Tutorial"), wc.hInstance); return 0; }
相关文章推荐
- Directx9.0 a shader approach 学习笔记1---初始化D3D
- D3D学习总结基础篇(三)--Direct X 10 初始化
- directx9学习笔记之二:初始化D3D,划线---vs2008、vc助手、DXSDK_Mar09.exe
- 【OC学习-7】2种常用的对象初始化方法以及方法的具体写法
- linux下oracle学习---初始化文件配置
- framework学习之Qualcomm平台qcril初始化及消息处理流程
- 关于java类初始化顺序的学习笔记
- D3D学习笔记之八---纹理
- spring源码学习笔记-初始化(4)
- 【Spring学习14】延迟初始化lazy-init与depends-on
- CAFFE源码学习笔记之初始化Filler
- Linux 路由 学习笔记 之九 路由缓存相关的数据结构及初始化
- spark源码学习(二):sparkContext的初始化分析(二)
- Castle ActiveRecord学习笔记三:初始化配置
- Python源码学习之初始化(三)-PyDictObject的初始化
- 学习OpenGL-ES: 1 - 像素、颜色、显存、初始化
- Cocos2d-x 3.1.1 学习日志2--error:仅仅有静态常量整型数据成员才干够在类中初始化
- WorldWind 学习笔记 二、WW初始化 .
- Swift学习笔记14——初始化(Initialization)和析构(Deinitialization)其一
- D3D初始化