DX初学咋练----配置环境及初次运行(vs2010/dx9.0)

2024-02-06 05:38

本文主要是介绍DX初学咋练----配置环境及初次运行(vs2010/dx9.0),希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!

纠结了两天了 dx环境配置及运行一个小例子 终于解决了

 

新建一个 win32项目 选择 “空项目”(如果给建成win32控制台的项目了 那就要更改一些其他的属性 最后说)

 

点击项目->属性->VC++目录 添加包含目录和库目录

$(DXSDK_DIR)Include

$(DXSDK_DIR)Lib\x86

(添加的时候 不要忘了加英文标点符号;

例如 原来是

$(VCInstallDir)include;$(VCInstallDir)atlmfc\include;$(WindowsSdkDir)include;$(FrameworkSDKDir)\include

在这个的最后添加 ;$(DXSDK_DIR)Include )

 然后再 点击连接器->输入 在附加依赖项上添加 需要的.lib

d3dx9.lib;d3d9.lib;dinput8.lib;dxguid.lib;winmm.lib;

到这就配置完了

下面是在 http://www.mysjtu.com/page/M0/S655/655240.html 上找的一个dx 的例子。

复制代码
  1 #include <Windows.h>
  2 #include <d3dx9.h>
  3 #include <MMSystem.h>
  4 LPDIRECT3D9 g_pD3D;
  5 LPDIRECT3DDEVICE9 g_pd3dDevice;
  6 LPDIRECT3DVERTEXBUFFER9 g_pVB;
  7 struct CUSTOMVERTEX{    
  8     FLOAT x, y, z;    
  9     DWORD color;
 10 };
 11 #define D3DFVF_CUSTOMVERTEX (D3DFVF_XYZ|D3DFVF_DIFFUSE)
 12 HRESULT InitObject()
 13 {    
 14     CUSTOMVERTEX triangle[] =     
 15     {        
 16         { -1.0f,-1.0f, 0.0f, 0xffff0000, },        
 17         {  1.0f,-1.0f, 0.0f, 0xff0000ff, },        
 18         {  0.0f, 1.0f, 0.0f, 0xffffffff, }  
 19     };    
 20     if (FAILED(g_pd3dDevice->CreateVertexBuffer(3*sizeof(CUSTOMVERTEX),0, D3DFVF_CUSTOMVERTEX, D3DPOOL_DEFAULT, &g_pVB, NULL)))        
 21         return E_FAIL;    
 22     VOID* pVertices;    
 23     if (FAILED(g_pVB->Lock(0,sizeof(triangle), &pVertices, 0)))        
 24         return E_FAIL;    
 25     memcpy(pVertices, triangle, sizeof(triangle));    
 26     g_pVB->Unlock();    
 27     return S_OK;
 28 }
 29 HRESULT InitD3D(HWND hWnd)
 30 {    
 31     g_pD3D = Direct3DCreate9(D3D_SDK_VERSION);    
 32     if (NULL == g_pD3D)        
 33         return E_FAIL;    
 34     D3DPRESENT_PARAMETERS d3dpp;    
 35     ZeroMemory(&d3dpp, sizeof(d3dpp));    
 36     d3dpp.Windowed = TRUE;    
 37     d3dpp.SwapEffect = D3DSWAPEFFECT_DISCARD;    
 38     d3dpp.BackBufferFormat = D3DFMT_UNKNOWN;    
 39     if(FAILED( g_pD3D->CreateDevice(D3DADAPTER_DEFAULT, D3DDEVTYPE_HAL,                                         
 40         hWnd, D3DCREATE_SOFTWARE_VERTEXPROCESSING,                                        
 41         &d3dpp, &g_pd3dDevice)))    
 42     {        
 43         return E_FAIL;    
 44     }    
 45     g_pd3dDevice->SetRenderState(D3DRS_CULLMODE, D3DCULL_NONE);    
 46     // Turn off D3D lighting, since we are providing our own vertex colors    
 47     g_pd3dDevice->SetRenderState( D3DRS_LIGHTING, FALSE );    
 48     if (FAILED(InitObject()))        
 49         return E_FAIL;    
 50     return S_OK;
 51 }
 52 void SetupMatrices()
 53 {    
 54     D3DXMATRIX matWorld;    
 55     UINT iTime = timeGetTime() % 1000;    
 56     FLOAT fAngle = iTime * ( 2.0f * D3DX_PI ) / 1000.0f;    
 57     D3DXMatrixRotationY(&matWorld, fAngle);    
 58     g_pd3dDevice->SetTransform(D3DTS_WORLD, &matWorld);    
 59     D3DXVECTOR3 vEyePt(0.0f, 3.0f, -5.0f);    
 60     D3DXVECTOR3 vLookAtPt(0.0f, 0.0f, 0.0f);    
 61     D3DXVECTOR3 vUp(0.0f, 1.0f, 0.0f);    
 62     D3DXMATRIXA16 matView;    
 63     D3DXMatrixLookAtLH(&matView, &vEyePt, &vLookAtPt, &vUp);    
 64     g_pd3dDevice->SetTransform(D3DTS_VIEW, &matView);    
 65     D3DXMATRIX matPoj;    
 66     D3DXMatrixPerspectiveFovLH(&matPoj, D3DX_PI/4, 1.0f, 1.0f, 100.0f);    
 67     g_pd3dDevice->SetTransform(D3DTS_PROJECTION, &matPoj);
 68 }
 69 void Render()
 70 {    
 71     g_pd3dDevice->Clear(0,NULL,  D3DCLEAR_TARGET, D3DCOLOR_XRGB(0, 0, 255), 1.0f, 0);    
 72     g_pd3dDevice->BeginScene();    
 73     SetupMatrices();    
 74     g_pd3dDevice->SetStreamSource(0, g_pVB, 0, sizeof(CUSTOMVERTEX));    
 75     g_pd3dDevice->SetFVF(D3DFVF_CUSTOMVERTEX);    
 76     g_pd3dDevice->DrawPrimitive(D3DPT_TRIANGLELIST, 0, 1);    
 77     g_pd3dDevice->EndScene();    
 78     g_pd3dDevice->Present(NULL, NULL, NULL, NULL);
 79 }
 80 void Cleanup()
 81 {    
 82     if (g_pd3dDevice)        
 83         g_pd3dDevice->Release();    
 84     if (g_pD3D)        
 85         g_pD3D->Release();    
 86     if (g_pVB)        
 87         g_pVB->Release();
 88 }
 89 LRESULT WINAPI MsgProc(HWND hWnd, UINT msg, WPARAM wParam, LPARAM lParam)
 90 {    
 91     switch (msg)    
 92     {    
 93     case WM_DESTROY:       
 94         PostQuitMessage(0);        
 95         return 0;    
 96     case WM_PAINT:        
 97         ValidateRect(hWnd, NULL);        
 98         return 0;   
 99     }    
100     return DefWindowProc(hWnd, msg, wParam, lParam);
101 }
102 INT WINAPI WinMain(__in HINSTANCE hInstance, __in_opt HINSTANCE hPrevInstance, __in_opt LPSTR lpCmdLine, __in int nShowCmd )
103 {    
104     WNDCLASSEX wc = {sizeof(WNDCLASSEX), CS_CLASSDC, MsgProc, 0, 0,    GetModuleHandle(NULL), NULL, NULL, NULL, NULL,     L"Direct3D", NULL};    
105     RegisterClassEx(&wc);    
106     // Create the application window    
107     HWND hWnd = CreateWindow(L"Direct3D", 
108         L"Learn", WS_OVERLAPPEDWINDOW,        
109         100, 100, 300, 300,         
110         GetDesktopWindow(), 
111         NULL, wc.hInstance, NULL);    
112     //
113     ShowWindow(hWnd, SW_SHOW);    
114     if (SUCCEEDED(InitD3D(hWnd)))    
115     {
116         ShowWindow(hWnd, SW_SHOWDEFAULT);        
117         UpdateWindow(hWnd);       
118         MSG msg;        
119         ZeroMemory(&msg, sizeof(msg));    
120         while (msg.message != WM_QUIT)   
121         {         
122             if(PeekMessage(&msg, NULL, 0, 0, PM_REMOVE))     
123             {           
124                 TranslateMessage(&msg);     
125                 DispatchMessage(&msg);      
126             }          
127             else           
128                 Render();       
129         }           
130     }       
131     UnregisterClass( L"Direct3D", wc.hInstance );    
132     Cleanup();
133     return nShowCmd;
134 }
复制代码

然后点击调试(F5)就OK了 下面是例子的截图

/**********************************************************/

如果给建成win32控制台的项目了 那就要更改一些其他的属性

这样 代码就可正常运行了 而不会报错:

  error LNK2019: 无法解析的外部符号 _main,该符号在函数 ___tmainCRTStartup 中被引用

  fatal error LNK1120: 1 个无法解析的外部命令

终于运行出来啦,希望可以帮到和我一样困惑的

这篇关于DX初学咋练----配置环境及初次运行(vs2010/dx9.0)的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!



http://www.chinasem.cn/article/683286

相关文章

MySQL数据库双机热备的配置方法详解

《MySQL数据库双机热备的配置方法详解》在企业级应用中,数据库的高可用性和数据的安全性是至关重要的,MySQL作为最流行的开源关系型数据库管理系统之一,提供了多种方式来实现高可用性,其中双机热备(M... 目录1. 环境准备1.1 安装mysql1.2 配置MySQL1.2.1 主服务器配置1.2.2 从

一篇文章彻底搞懂macOS如何决定java环境

《一篇文章彻底搞懂macOS如何决定java环境》MacOS作为一个功能强大的操作系统,为开发者提供了丰富的开发工具和框架,下面:本文主要介绍macOS如何决定java环境的相关资料,文中通过代码... 目录方法一:使用 which命令方法二:使用 Java_home工具(Apple 官方推荐)那问题来了,

Nginx搭建前端本地预览环境的完整步骤教学

《Nginx搭建前端本地预览环境的完整步骤教学》这篇文章主要为大家详细介绍了Nginx搭建前端本地预览环境的完整步骤教学,文中的示例代码讲解详细,感兴趣的小伙伴可以跟随小编一起学习一下... 目录项目目录结构核心配置文件:nginx.conf脚本化操作:nginx.shnpm 脚本集成总结:对前端的意义很多

Linux云服务器手动配置DNS的方法步骤

《Linux云服务器手动配置DNS的方法步骤》在Linux云服务器上手动配置DNS(域名系统)是确保服务器能够正常解析域名的重要步骤,以下是详细的配置方法,包括系统文件的修改和常见问题的解决方案,需要... 目录1. 为什么需要手动配置 DNS?2. 手动配置 DNS 的方法方法 1:修改 /etc/res

mysql8.0.43使用InnoDB Cluster配置主从复制

《mysql8.0.43使用InnoDBCluster配置主从复制》本文主要介绍了mysql8.0.43使用InnoDBCluster配置主从复制,文中通过示例代码介绍的非常详细,对大家的学习或者... 目录1、配置Hosts解析(所有服务器都要执行)2、安装mysql shell(所有服务器都要执行)3、

java程序远程debug原理与配置全过程

《java程序远程debug原理与配置全过程》文章介绍了Java远程调试的JPDA体系,包含JVMTI监控JVM、JDWP传输调试命令、JDI提供调试接口,通过-Xdebug、-Xrunjdwp参数配... 目录背景组成模块间联系IBM对三个模块的详细介绍编程使用总结背景日常工作中,每个程序员都会遇到bu

JDK8(Java Development kit)的安装与配置全过程

《JDK8(JavaDevelopmentkit)的安装与配置全过程》文章简要介绍了Java的核心特点(如跨平台、JVM机制)及JDK/JRE的区别,重点讲解了如何通过配置环境变量(PATH和JA... 目录Java特点JDKJREJDK的下载,安装配置环境变量总结Java特点说起 Java,大家肯定都

linux配置podman阿里云容器镜像加速器详解

《linux配置podman阿里云容器镜像加速器详解》本文指导如何配置Podman使用阿里云容器镜像加速器:登录阿里云获取专属加速地址,修改Podman配置文件并移除https://前缀,最后拉取镜像... 目录1.下载podman2.获取阿里云个人容器镜像加速器地址3.更改podman配置文件4.使用po

Vue3 如何通过json配置生成查询表单

《Vue3如何通过json配置生成查询表单》本文给大家介绍Vue3如何通过json配置生成查询表单,本文结合实例代码给大家介绍的非常详细,对大家的学习或工作具有一定的参考借鉴价值,需要的朋友参考下吧... 目录功能实现背景项目代码案例功能实现背景通过vue3实现后台管理项目一定含有表格功能,通常离不开表单

通过Docker容器部署Python环境的全流程

《通过Docker容器部署Python环境的全流程》在现代化开发流程中,Docker因其轻量化、环境隔离和跨平台一致性的特性,已成为部署Python应用的标准工具,本文将详细演示如何通过Docker容... 目录引言一、docker与python的协同优势二、核心步骤详解三、进阶配置技巧四、生产环境最佳实践