




已阅读5页,还剩2页未读, 继续免费阅读
版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
DirectX TBy Andy PikeDirectX 8 教程著 Andy P译 Aman JIANG第一章: 准备就绪What you will need (你需要什么) DirectX 8.0 SDK (可以从 /directx 下载) VC6(SP5)/VC.NET Windows 程序设计经验 通晓 C+ 和OOPIntroduction (序)(原著的话)欢迎阅读本DX教程。本教程至少能帮你入门、使你了解怎样用DX8 来开发Windows游戏。我写这个教程的原由有二:首先,当出现DX时,我还是一个初学者。所以,我想边学习边写一个教程来锻炼自己。其次,对初学者来说,DX SDK 并不是很有帮助。而且,网上也没有什么像样的Dx8教程。另外,就像上面我提到的,我也是个初学者,所以,如果你发现教程中有什么地方不对,请给我写信:。译者言我也是一名初学者,所以,有言在先:如果你读英文能如履平地,建议你还是去读原著。此教程很适合入门,等你入门以后,你会发现,其实一切并没有想象的那样复杂。这是个不错的Dx8教程,我会尽最大努力把它翻译好。注:我并没有完全按照原著来译,不适之处,请多包涵。嗯,你应该弄到教程附带的源代码,没有那个可不行!可以到去下载。欢迎指出我的错误,或与我联系,我的Email:Chaoyu_JIANG or Aman_JIANG163.com , QQ:15852673。COM What is COM? COM 是什么呢?COM 就是 Component Object Model, 组件对象模型。COM 接口和C+的抽象类相似(但不一样),就像抽象类没有与之相关的实际代码一样,COM描述了一套符号和语法而非实现过程。你也可以把 COM 对象就想象成一套为某个主题而设计的一整套库函数。DX 就提供了一套完整的设计3D游戏的库。最棒的就是,使用DX时,你不必去直接接触硬件,而由DX帮你代理了。这使得一些事情变得简单了。使用 COM 时应该注意,必须在程序结束前释放所有的 COM 对象(或接口)。而且,释放它们的顺序应该和创建它们的顺序相反。就像这样:1. Create interface A.2. Create interface B.3. Release interface B.4. Release interface A. 调用它们的 Release 模块来释放它们。Page Flipping (页翻动)页翻动又是什么呢?嗯,你知道电影的原理吗?电影通过以每秒钟24幅的速度连续的闪动图像,每幅图像之间的差别又很小,由于人眼的滞留作用,我们看到的画面就是连续的了。这不难理解。其实,DirectX 也是这样工作的。我们把要显示的物体通通绘制到一个不可见的页上,我们称这个页为“后缓冲区”。绘制完后,快速的把它翻动到可见的“前缓冲区”上,并重复这个过程。当用户正在观看新绘制的可见页(前缓冲区)时,程序要降下一幅要显示的东西绘制到“后缓冲区”上。快速而连续的重复次过程,用户就会看到像电影一样连续的图像了。不过一般情况下,我们每秒钟能绘制的页数要比电影多很多。如果我们不是用页翻动技术,那用户看到的屏幕中的物体,将会一个个的被绘制出来,虽然速度可能很快,但效果会很差,那并不是我们想要的。所以,我们的游戏需要一个循环,称之为“Game Loop”。每次循环,我们都要清除“后缓冲区”,把该绘制的物体按照一定的逻辑都绘制到那上面,然后把它翻动到“前缓冲区”上,然后进入下一次循环。这个循环得直到游戏退出了才能结束。有时我们可能需要好几个这样的“后缓冲区”(多缓冲)来组成一个“交换链”(Swap Chain),以求更好的效果。Devices (设备)What is a device? 设备是什么?简单的说,就是你的3D卡。 你得创建一个接口来代表设备,然后使用那个接口来绘制东西。Game Loop (游戏循环)什么是游戏循环呢?游戏循环是一段代码,在游戏退出之前循环执行的代码。这段代码在每次循环中都要:在屏幕上绘制物体(或场景人物随便什么)、处理游戏的逻辑过程(如:物体的移动、人工智能等等)、处理Windows的消息等等。基本上就是这样了。Creating Your First Project (创建你的第一个项目)译者:嗯,这部分我就不用译了吧,这可是基础的东西。不过还是说说初学者容易忽略的一点:一定要把你的DX SDK的Include目录和Lib目录的路径添加到VC的目录设置列表中去,而且不要把Include和Lib的地方放错了,而且还要放在第一位。还要把d3d8.lib添加到项目设置的Lib列表中,否则编译不了。Okay, thats enough theory lets get started. Follow the step-by-step guide below to create your first DirectX Graphics project. 1. In Visual C+ create a new Win32 Application.a. File Newb. From the Projects tab select Win32 Applicationc. Enter a name for your project such as “DX Project 1”d. Select a folder for the location of your source code filese. Click Nextf. Select the empty project option.g. Click Finish2. Make sure that your project settings are correct.a. Project Settings.b. On the Link tab, make sure that d3d8.lib is in the list of Object/Library Modules. If it isnt simply type it in.3. Make sure that your search paths are correct.a. Tools Options Directories Tabb. In the Show directories for drop-down, select include files.c. If it does not exist already, add the following path: include.d. Make sure that this path is at the top of the list by clicking on the up arrow button (if needed).e. In the Show directories for drop-down, select library files.f. If it does not exist already, add the following path: lib.g. Make sure that this path is at the top of the list by clicking on the up arrow button (if needed).4. Add the source code.a. File Newb. From the Files tab, select C+ Source Filec. Enter a filename such as “Main.cpp”d. Copy the code segment below, and then paste it into your new file.5. Build and Run the program.a. Press F7 to build your projectb. Press F5 to run下面就是本章的例子了,好好研究吧,不难。#include LPDIRECT3D8 g_pD3D = NULL;LPDIRECT3DDEVICE8 g_pD3DDevice = NULL;HRESULT InitialiseD3D(HWND hWnd) /First of all, create the main D3D object. If it is created successfully we /should get a pointer to an IDirect3D8 interface. g_pD3D = Direct3DCreate8(D3D_SDK_VERSION); if(g_pD3D = NULL) return E_FAIL; /Get the current display mode D3DDISPLAYMODE d3ddm; if(FAILED(g_pD3D-GetAdapterDisplayMode(D3DADAPTER_DEFAULT, &d3ddm) return E_FAIL; /Create a structure to hold the settings for our device D3DPRESENT_PARAMETERS d3dpp; ZeroMemory(&d3dpp, sizeof(d3dpp); /Fill the structure. /We want our program to be windowed, and set the back buffer to a format /that matches our current display mode d3dpp.Windowed = TRUE; d3dpp.SwapEffect = D3DSWAPEFFECT_COPY_VSYNC; d3dpp.BackBufferFormat = d3ddm.Format; /Create a Direct3D device. if(FAILED(g_pD3D-CreateDevice(D3DADAPTER_DEFAULT, D3DDEVTYPE_HAL, hWnd, D3DCREATE_SOFTWARE_VERTEXPROCESSING, &d3dpp, &g_pD3DDevice) return E_FAIL; return S_OK;void Render() if(g_pD3DDevice = NULL) return; /Clear the back buffer to a green colour g_pD3DDevice-Clear(0, NULL, D3DCLEAR_TARGET, D3DCOLOR_XRGB(0, 255, 0), 1.0f, 0); /Begin the scene g_pD3DDevice-BeginScene(); /Rendering of our game objects will go here /End the scene g_pD3DDevice-EndScene(); /Filp the back and front buffers so that whatever has been rendered on the /back buffer will now be visible on screen (front buffer). g_pD3DDevice-Present(NULL, NULL, NULL, NULL);void CleanUp() if(g_pD3DDevice != NULL) g_pD3DDevice-Release(); g_pD3DDevice = NULL; if(g_pD3D != NULL) g_pD3D-Release(); g_pD3D = NULL; void GameLoop() /Enter the game loop MSG msg; BOOL fMessage; PeekMessage(&msg, NULL, 0U, 0U, PM_NOREMOVE); while(msg.message != WM_QUIT) fMessage = PeekMessage(&msg, NULL, 0U, 0U, PM_REMOVE); if(fMessage) /Process message TranslateMessage(&msg); DispatchMessage(&msg); else /No message to process, so render the current scene Render(); /The windows message handlerLRESULT WINAPI WinProc(HWND hWnd, UINT msg, WPARAM wParam, LPARAM lParam) switch(msg) case WM_DESTROY: PostQuitMessage(0); return 0; break; case WM_KEYUP: switch (wParam) case VK_ESCAPE: /User has pressed the escape key, so quit DestroyWindow(hWnd); return 0; break; break; return DefWindowProc(hWnd, msg, wParam, lParam);/Application entry pointINT WINAPI WinMain(HINSTANCE hInst, HINSTANCE, LPSTR, INT) /Register the window class WNDCLASSEX wc = sizeof(WNDCLASSEX), CS_CLASSDC, WinProc, 0L, 0L, GetModuleHandle(NULL), NULL, NULL, NULL, NULL, DX Project 1, NULL; RegisterClassEx(&wc); /Create the applications window HWND hWnd = CreateWindow(DX Project 1, : Tutorial 1, WS_OVERLAPPEDWINDOW, 50, 50, 500, 500, GetDesktopWindow(), NULL, wc.hInstance, NULL); /Initialize Direct3D if(SUCCEEDED(InitialiseD3D(hWnd) /Show our window ShowWindow(hWnd, SW_SHOWDEFAULT); UpdateWindow(hWnd); /Start game running: Enter the game loop GameLoop(); CleanUp(); UnregisterClass(DX Project 1, wc.hInstance); return 0;你会得到一个绿色背景的窗户(读者:是窗口,白痴),虽然看起来不怎么样,但至少是一个好的开始,不是吗?好地开头,就是成功地半拉!(读者: )(译者:嗯,那个老外用WinXP?我看还是Win2K好 )(读者:切别在那废话。)WinMain此乃Win32程序的入口点,代码会从这里开始执行。这是我们注册、创建、显示窗口的地方。然后,我们要初始化Direct3D并进入游戏循环(Game Loop)。WinProc这是应用程序的消息处理过程。Windows发给我们的程序的消息,都要有它处理。注意我们上面的例子,我们处理了两种消息:WM_DESTROY(结束程序) 和 WM_KEYUP(有按键被按下)。其他的消息我们都交给默认消息处理过程DefWindowProc处理了。g_pD3D这是指向IDirect3D8接口的指针,我们得通过它来创建Direct3D设备接口。g_pD3DDevice这是 IDirect3DDevice8(D3D 设备) 的接口的指针,它实际上代表了你的硬件3D卡。
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 昆明市现代农业生态园花卉苗木基地一期工程建设项目可行性研究报告
- 防汛知识培训总结课件
- DB65T 4143-2018 反恐怖防范设置规范 汽车客运站
- 部队网络工程布线方案(3篇)
- 航空港口行业发展模式探讨
- 2025年高考政治总复习主观题万能答题模板汇编(全四册)
- 湖北省汉川市金益高级中学2025-2026学年高二上学期9月月考考试数学试卷
- 天津市2025-2026学年七年级语文上学期第一次月考复习试卷(含答案)
- 青海省海西州2024-2025学年七年级下学期期末考试生物试卷(含答案)
- 20xx教师暑假政治学习心得体会
- 【精】人民音乐出版社人音版五年级上册音乐《清晨》课件PPT
- 河南省道路救援收费标准
- 色盲检测图(第五版)-驾校考试-体检必备-自制最全最准确课件
- 特殊教育的基础理论-特殊教育学的理论基础
- 毕业生转正定级审批表
- 动画运动规律-动物-课件
- 涉诈风险账户审查表
- 【短视频直播带货营销策略分析9700字(论文)】
- solidworks高级培训钣金件经典课件
- 2023年高考数学复习专题课件★★空间向量与空间角、距离问题 课件(共34张PPT)
- 四年级暑假实践作业
评论
0/150
提交评论