DirectX学习之第一个可运行的工程

学习一门开发语言的第一件事情当然是搭建一个可运行的环境,然后运行一个可成功执行的案例。

本人在学习DirectX的第一个工程的时候,参考了雨凇MoMo的一篇文章(https://www.xuanyusong.com/archives/802),但是看了之后,还是不知道如何才能运行起来。

然后,又参考了一篇文章(https://blog.csdn.net/chenwu_843402773/article/details/8077935)。

通过参考第二篇文章中的一些内容,最终把第一篇文章中的案例运行了起来,在此做一下记录,具体原理,相信随着学习 Direct 的逐渐升入,会理解的,现在不做过多说明,哈哈哈哈哈哈。。。

  1 #include<d3d9.h>
  2
  3 #define WINDOW_CLASS "UGPDX"                    //宏定义窗口类名称
  4 #define WINDOW_NAME  "MyFirstDirectProject"     //宏定义窗口名称
  5
  6 LRESULT WINAPI MsgProc(HWND hWnd, UINT msg, WPARAM wParam, LPARAM lParam);
  7 LPDIRECT3D9            g_pD3D = NULL;
  8 LPDIRECT3DDEVICE9    g_pDevice = NULL;
  9 HRESULT InitD3D(HWND hwnd);
 10 void Cleanup();
 11 void Render();
 12
 13 int WINAPI WinMain(HINSTANCE hInst, HINSTANCE prevhInst, LPSTR cmdLine, int show)
 14 {
 15     WNDCLASSEX wc = { sizeof(WNDCLASSEX), CS_CLASSDC, MsgProc, 0L, 0L,
 16         GetModuleHandle(NULL), NULL, NULL, NULL, NULL,
 17         WINDOW_CLASS, NULL };
 18     RegisterClassEx(&wc);
 19
 20     HWND hWnd = CreateWindow(WINDOW_CLASS, WINDOW_NAME, WS_OVERLAPPEDWINDOW,
 21         100, 100, 640, 480, GetDesktopWindow(), NULL,
 22         wc.hInstance, NULL);
 23
 24
 25     if (InitD3D(hWnd) == S_OK)
 26     {
 27         ShowWindow(hWnd, SW_SHOWDEFAULT);
 28         UpdateWindow(hWnd);
 29
 30         MSG msg;
 31         ZeroMemory(&msg, sizeof(msg));
 32
 33         while (msg.message != WM_QUIT)
 34         {
 35             if (PeekMessage(&msg, NULL, 0, 0, PM_REMOVE))
 36             {
 37                 TranslateMessage(&msg);
 38                 DispatchMessage(&msg);
 39             }
 40             else
 41             {
 42                 Render();
 43             }
 44         }
 45     }
 46
 47     UnregisterClass(WINDOW_CLASS, wc.hInstance);
 48
 49     return 0;
 50 }
 51 LRESULT WINAPI MsgProc(HWND hWnd, UINT msg, WPARAM wParam, LPARAM lParam)
 52 {
 53     switch (msg)
 54     {
 55     case WM_DESTROY:
 56         PostQuitMessage(0);
 57         return 0;
 58         break;
 59
 60     case WM_KEYUP:
 61         if (wParam == VK_ESCAPE) PostQuitMessage(0);
 62         break;
 63     }
 64
 65     return DefWindowProc(hWnd, msg, wParam, lParam);
 66 }
 67
 68 HRESULT InitD3D(HWND hwnd)
 69 {
 70     if (NULL == (g_pD3D = Direct3DCreate9(D3D_SDK_VERSION)))
 71     {
 72         return E_FAIL;
 73     }
 74
 75     D3DPRESENT_PARAMETERS d3dpparams;
 76     ZeroMemory(&d3dpparams, sizeof(d3dpparams));
 77     d3dpparams.Windowed = true;
 78     d3dpparams.SwapEffect = D3DSWAPEFFECT_DISCARD;
 79     d3dpparams.BackBufferFormat = D3DFMT_UNKNOWN;
 80
 81     if (FAILED(g_pD3D->CreateDevice(D3DADAPTER_DEFAULT,
 82         D3DDEVTYPE_HAL,
 83         hwnd,
 84         D3DCREATE_SOFTWARE_VERTEXPROCESSING,
 85         &d3dpparams,
 86         &g_pDevice)))
 87     {
 88         return E_FAIL;
 89     }
 90
 91     return S_OK;
 92 }
 93
 94 void Cleanup()
 95 {
 96     if (NULL != g_pDevice)
 97     {
 98         g_pDevice->Release();
 99     }
100     if (NULL != g_pD3D)
101     {
102         g_pD3D->Release();
103     }
104 }
105
106
107 void Render()
108 {
109     if (NULL == g_pDevice)
110     {
111         return;
112     }
113
114     g_pDevice->Clear(0, NULL, D3DCLEAR_TARGET, D3DCOLOR_XRGB(30, 60, 90), 1.0f, 0);
115
116     if (SUCCEEDED(g_pDevice->BeginScene()))
117     {
118         g_pDevice->EndScene();
119     }
120
121     g_pDevice->Present(NULL, NULL, NULL, NULL);
122 }

运行结果:

原文地址:https://www.cnblogs.com/luguoshuai/p/10459508.html

时间: 2024-08-01 10:16:39

DirectX学习之第一个可运行的工程的相关文章

Java学习记录第一章

学习Java第一章的记录,这一章主要记录的是Java的最基础部分的了解知识,了解Java的特性和开发环境还有Java语言的优缺点. 计算机语言的发展大概过程:机器语言--->汇编语言--->高级语言(面向过程的语言和面向对象的语言)总而言之就是从人类比较难识别的字符串向人类自然语言靠近使代码的可读性越来越高. Java的发展过程:1991年Sun公司为了抢占市场先机,成立了一个称为Green的项目小组,帕特里克.詹姆斯·高斯林.麦克·舍林丹和其他几个工程师一起组成的工作小组在加利福尼亚州门洛帕

java学习日记第一天

java 学习日记 第一天 java学习准备工作 首先环境配置:一个是jdk安装,另一个编译工具 eclipse ,安装下载教程网上很多 找了一个照着做就行 : 上述步骤完成,我们就可以打开eclipse进行我们第一个程序的编写啦当然是编写我们熟悉的helloWorld创建一个Java Perfect 目前好像基本都习惯用工程管理我们就建一个java工程然后点开工程在src右键new一个class,不用问这是啥这是啥,先把程序跑起来,慢慢就懂了我们在{}写我们的程序,这就好比helloworld

C#学习笔记—第一天

C#学习笔记—第一天 一.C#与.NET Framework的关系 C#编译器专门用于.NET,这表示用C#编写的所有代码总是使用.NET Framework运行.所以对于C#语言来说,可以有一下两个结论: 1)C#的 体系结构和方法论反映了.NET基础方法论. 2)在许多情况下,C#的特定语言功能取决于.NET的功能,或依赖于.NET的基类. 二..NET编译过程 1)将源代码编译成Microsoft中间语言IL(Intermediate Language): 2)公共语言运行库CLR把IL编

DirectX学习笔记(四):利用D3DX网格数据结构绘制可旋转茶壶

前言: 在上篇文章(DirectX学习笔记三)中,我详细的说明了如何利用线框模式绘制可旋转的正方体.链接:点击打开链接.但是应该看到的是,如果我们通过创建三角形单元来创建3D物体是十分繁琐的事情.幸运的是,在D3DX库中提供了一些用于生成简单3D物体的网格数据方法. 如:利用网格数据创建一个茶壶: 1. 我们需要使用ID3DXMesh网格数据结构接口来创建我们的茶壶网格数据,这时我们需要使用此函数: HRESULT D3DXCreateTeapot(LPDIRECT3DDEVICE9 pDevi

Hibernate学习笔记:第一个程序的搭建

Hibernate学习笔记:第一个程序的搭建 前一段时间对Struts2这个框架有了一点点地了解,很高兴,自己开始学习Hibernate这个框架了.本篇博文将记录下第一个Hibernate程序的搭建过程.其实有时候个人觉得无论我们学习什么语言也好,还是学习什么框架也好,第一个HelloWorld程序真的相当重要,假如 我们在学习第一个HelloWorld程序都跑不出来,这完全影响着我们对新接触的东西的兴趣和动力,但是,往往第一个程序都会涉及到很多的配置,因此使得对于初学者要摸索一定的时间,对于我

Android学习路线(三)运行你的Android应用

如果你按照上一课创建了你的Android项目,那么它包含默认的 "Hello World" 的源文件,能够让你的项目马上运行起来. 你如何运行你的应用以来与两件事:你是否拥有真正的Android设备和你是否使用的是Eclipse.这片课程向你展示如何使用Eclipse和命令行工具来将你的应用安装到真机上和模拟器上. 在你运行你的应用之前,你必须了解一下Android项目中的这些目录文件: AndroidManifest.xml 这个manifest file 描述了应用的基本特征和它的

Linux学习笔记——第一篇——Ubuntu安装与操作

笔者是Windows的使用者,由于Coding的需要以及在Linux下开发的方便,所以开始使用Linux. 当然笔者还是割舍不下Windows的,毕竟很多通讯工具等软件以及游戏在Linux下是没有发行的,所以笔者使用了虚拟机啊. 下面给出简单的安装过程. 1.下载虚拟机软件,笔者比较喜欢VMPlayer,因为它比较轻便且免费,并且很好的支持了拖拽复制功能(VM TOOL),当然也可以使用如VirtualBox.VPC等 链接:https://my.vmware.com/web/vmware/fr

javascript的ES6学习总结(第一部分)

ES6(ESNext学习总结——第一部分) ES6, 全称 ECMAScript 6.0 ,是 JavaScript 的下一个版本标准,2015.06 发版. ECMA每年6月份,发布一个版本 2016年6月       ES6.1       ES7       ES20162017年6月       ES6.2       ES8       ES20172018年6月       ES...         ES9       ES2018 1.let.const用法 let 相当于之前的

学习python第一天

学习Python第一天 Python小白,做Linux运维5年,纯系统运维已经不能满足日常工作需要,所以学习Linux运维开发入门级语言python 前言: Python, 是一种面向对象.解释型计算机程序设计语言,由Guido van Rossum于1989年发明,第一个公开发行版发行于1991年. Python是纯粹的自由软件, 源代码和解释器CPython遵循 GPL(GNU General Public License)协议. Python语法简洁清晰,特色之一是强制用空白符(white