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

使用优化算法,以优化VMD算法的惩罚因子惩罚因子 (α) 和分解层数 (K)。 1、将量子粒子群优化(QPSO)算法与变分模态分解(VMD)算法结合 VMD算法背景: VMD算法是一种自适应信号分解算法,主要用于分解信号为不同频率带宽的模态。 VMD的关键参数包括: 惩罚因子 α:控制带宽的限制。 分解层数 K:决定分解出的模态数。 QPSO算法背景: 量子粒子群优化(QPSO)是一种基于粒子群优化(PSO)的一种改进算法,通过量子行为模型增强全局搜索能力。 QPSO通过粒子的量子行为使其在搜索空间中不受位置限制,从而提高算法的收敛速度与全局优化能力。 任务: 使用QPSO优化VMD中的惩罚因子 α 和分解层数 K,以获得信号分解的最佳效果。 计划: 定义适应度函数:适应度函数根据VMD分解的效果来定义,通常使用重构信号的误差(例如均方误差、交叉熵等)来衡量分解的质量。 初始化QPSO粒子:定义粒子的位置和速度,表示 α 和 K 两个参数。初始化时需要在一个合理的范围内为每个粒子分配初始位置。 执行VMD分解:对每一组 α 和 K 参数,运行VMD算法分解信号。 更新QPSO粒子:使用QPSO算法更新粒子的状态,根据适应度函数调整粒子的搜索方向和位置。 迭代求解:重复QPSO的粒子更新步骤,直到满足终止条件(如适应度函数达到设定阈值,或最大迭代次数)。 输出优化结果:最终,QPSO算法会返回一个优化的 α 和 K,从而使VMD分解效果最佳。 2、将极光粒子(PLO)算法与变分模态分解(VMD)算法结合 PLO的优点与适用性 强大的全局搜索能力:PLO通过模拟极光粒子的运动,能够更高效地探索复杂的多峰优化问题,避免陷入局部最优。 鲁棒性强:PLO在面对高维、多模态问题时有较好的适应性,因此适合海上风电时间序列这种非线性、多噪声的数据。 应用场景:PLO适合用于优化VMD参数(α 和 K),并将其用于风电时间序列的预测任务。 进一步优化的建议 a. 实现更细致的PLO更新策略,优化极光粒子的运动模型。 b. 将PLO优化后的VMD应用于真实的海上风电数据,结合LSTM或XGBoost等模型进行风电功率预测。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值