DirectX游戏编程入门

刚开始学习D3D,安装完DirectX9后,在VS2008中新建Win32项目·

--------------------------------------------------------------

//设置好Direct3D的库链接,这里也可以通过项目属性的链接器 -- 附加依赖项完成添加;

#pragma  comment(lib,"dxerr.lib")
#pragma  comment(lib,"dxguid.lib")
#pragma  comment(lib,"d3dx9d.lib")
#pragma  comment(lib,"d3d9.lib")
#pragma  comment(lib,"winmm.lib")
#include <Windows.h>
#include <d3d9.h>

//////////////////////////////////////////////////////////////////////////
//D3D基础对象;
LPDIRECT3D9 g_pD3D = NULL;
//D3D设备对象;
LPDIRECT3DDEVICE9 g_pd3dDevice = NULL;

//----------------------------//
//初始d3d对象;
//----------------------------//
HRESULT InitializeD3D(HWND hwndTemp){

  //创建D3D对象 通过该对象获得D3D设备的对象;
    if (NULL==(g_pD3D=Direct3DCreate9(D3D_SDK_VERSION)))
    {
        return false;
    }
    //设置d3dpreame参数 用来创建设置d3d设备对象;
    D3DPRESENT_PARAMETERS d3dpp;
    ZeroMemory(&d3dpp,sizeof(d3dpp));
    d3dpp.Windowed = true;//窗口模式;
    d3dpp.SwapEffect = D3DSWAPEFFECT_DISCARD;
    d3dpp.BackBufferFormat = D3DFMT_UNKNOWN;
  //创建获得D3D设备的对象;
  
 if
(FAILED(g_pD3D->CreateDevice(D3DADAPTER_DEFAULT,D3DDEVTYPE_HAL,hwndTemp,D3DCREATE_SOFTWARE_VERTEXPROCESSING,&d3dpp,&g_pd3dDevice)))
    {
        return false;
    }
    return true;
}

///渲染图象///////////////////////////////////////////////////////////////////////
VOID Render(){

  //清空后台缓存;
    g_pd3dDevice->Clear(0,NULL,D3DCLEAR_TARGET,D3DCOLOR_XRGB(45,50,170),1.0f,0);

  //开始绘制图形;
    if (SUCCEEDED(g_pd3dDevice->BeginScene()))
    {

    //结束绘制;
        g_pd3dDevice->EndScene();
    }

  //把绘制完毕的图形提交给前段 告诉设备可以进行相应的显示;
    g_pd3dDevice->Present(NULL,NULL,NULL,NULL);
}

///结束释放资源///////////////////////////////////////////////////////////////////////
VOID CleanUp(){
  //由上层往下逐渐释放;
    if(!g_pd3dDevice){
        g_pd3dDevice->Release();
    }
    if(!g_pD3D){
        g_pD3D->Release();
    }
}

///处理Win32消息循环///////////////////////////////////////////////////////////////////////
LRESULT WINAPI MsgProc(HWND hwnd,UINT msgid, WPARAM wParam, LPARAM LParam){
    switch(msgid){
        case WM_DESTROY:
            CleanUp();
            PostQuitMessage(0);
            return 0;
        case WM_PAINT:
            Render();
            ValidateRect(hwnd,NULL);
            return 0;
    }
    return DefWindowProc(hwnd,msgid,wParam,LParam);
}

///创建windows窗口 程序入口///////////////////////////////////////////////////////////////////////
INT WINAPI WinMain(HINSTANCE hint,HINSTANCE,LPSTR,INT){

  //注册窗口类;
    WNDCLASSEX wc={sizeof(WNDCLASSEX),CS_CLASSDC,MsgProc,0L,0L,GetModuleHandle(NULL),NULL,NULL,NULL,NULL,L"ClassName",NULL};
    RegisterClassEx(&wc);

  //创建窗口;
    HWND hwnd = CreateWindow(L"ClassName",L"D3D游戏编程",WS_OVERLAPPEDWINDOW    ,200,100,600,500,NULL,NULL,wc.hInstance  ,NULL);
  //初始化Direct3D;
    if (SUCCEEDED(InitializeD3D(hwnd)))
    {

    //显示主窗口;
        ShowWindow(hwnd,SW_SHOWDEFAULT);
        UpdateWindow(hwnd);
      //进入消息循环;
        MSG msg;
        ZeroMemory(&msg,sizeof(msg));
        while(msg.message!=WM_QUIT){
            if (PeekMessage(&msg,NULL,0U,0U,PM_REMOVE))
            {
                TranslateMessage(&msg);
                DispatchMessage(&msg);
            }
            else
            {//渲染图象;
                Render();
            }
        }
    }
    UnregisterClass(L"ClassName",wc.hInstance);
    return 0;
}

通过以上的代码,我们可以初步的理解基于Win32框架的Direct3D程序的基本结构。

时间: 2024-08-09 02:20:30

DirectX游戏编程入门的相关文章

PC游戏编程(入门篇)(前言写的很不错)

PC游戏编程(入门篇) 第一章 基石 1. 1 BOSS登场--GAF简介 第二章 2D图形程式初体验 2.l 饮水思源--第一个"游戏"程式 2.2 知其所以然一一2D图形学基础 2.3 进入图形世界的钥匙--GAFDDraw 2.4 2D图像的本质--图层表面 2.5 场景的秘密--背景卷动 2.6 诱惑--来自"精灵"的问候 2.7 餐后甜点--GAFApp/GAFDDraw的其他法宝 第三章 塞壬的歌声魔力和第三类接触 3.1 1,2,3--计算机音乐概述

游戏编程入门

<游戏编程入门>是2005年由人民邮电出版社出版的图书,该书作者是king,译者是虹夜.游戏编程入门介绍了如何设计和构建自己的电脑游戏. 游戏编程入门适用于任何对C++语言有基本了解的读者阅读,适宜作为读者进入游戏开发领域的技术入门学习用书.游戏编程入门介绍如何设计和构建自己的电脑游戏.游戏编程入门不是泛泛地介绍编程理论,而是引导读者开发一个“即插即用”的游戏引擎,可以增强和重用这个游戏引擎以开发各种游戏.QKXue.NTE友情提示:书中包括了7个完整游戏的详尽解释以及示例代码,使读者准备好开

游戏编程入门——互动出版网

这篇是计算机类的优质预售推荐>>>><游戏编程入门(第4版)> 游戏编程经典入门读物 内容简介 本书是游戏编程经典入门读物的最新版. 全书共分14章,包含两个附录.本书首先介绍Windows和DirectX编程,然后快速介绍游戏编程的工具箱,包括使用C++和DirectX开发游戏所需的所有基础知识.读者将学习到把思想转化为现实所需的技术,比如2D.3D图形的绘制.背景卷动.处理游戏输入.音效.碰撞检测等.在每章结束时,给出了测验题和项目以便帮助读者实践新学到的技能.本书

【教程】原创:历上最简单的游戏编程入门教程(基于cocos2d-js)

前言: 大家好.我是一个游戏开发者.曾就职于cocos2d-x这个手机游戏引擎的开发的公司. 在这边我准备了一个最简单的教程,想告诉大家制作一个游戏有多简单. 回忆起当年刚刚步入游戏这个行业,我也抱着非常多的疑问. 所以如果大家对游戏有兴趣的朋友,可以在下面留言. 这个教程我会讲的非常通俗易懂.争取几句话之内就让你看到一个效果. 另外教程里面有丰富的图文讲解.我保证你学完之后掌握了做游戏的真髓. 你完全可以马上开始做自己的游戏.并且能够让你的游戏在网页上,ios,android 还有pc平台上跑

DirectX游戏编程学习(二)文本显示与基本图元绘制

一.文本显示 在游戏开发中,在游戏界面上现实一些文字信息是很常见的一件事,要学习DX游戏开发,显然了解DX文本如何显示是必不可少的.字符包含诸多的属性,比如颜色,大小,是否加粗,斜体,等等.我们通过DX提供的LPD3DFONT对象来指定这些字体属性,然后再进行渲染. 采用WIN32程序框架实现文本绘制的具体流程如下: 二.基本图元的绘制 无论再复杂的物体,它归根结底都是由基本图元构成的.在CG(Computer graphics)领域,人们普遍使用一组或者多组包围物体表面的多边形近似的表示真实的

Pygame - Python游戏编程入门(2)

前言 前几天我们做出了一个可控制的飞机,今天我们来做一些小改进,这是代码的一些小改进,却是我们小游戏的一大改进啊~(╯°口°)╯(┴—┴ 然后再引进另外一个主题,pygame.sprite,精灵模块,那它究竟又有什么用呢? 正片开始~ 1. 对主循环的优化 记得我们的上一个版本吗?我们在主循环中不断地绘制背景和飞机,这样的做法其实很消耗cpu资源的,但在这种现象在我们的demo中并不明显,这是为什么呢?我想主要原因应该是我们使用了update()函数(部分刷新,surface与surface之间

Visual Basic游戏编程入门 第3版pdf

下载地址:网盘下载 本书致力于教您如何通过Visual Basic 2008创建一个RPG.您将一步步地学习如何使用Windows Forms和GDI+构建游戏引擎的各个部分.如果你喜欢玩游戏,那么你也将会喜欢学习如何创建自己的游戏,因为这会使你拥有一个完全由自己控制的游戏世界.首先您将对Visual Basic有一个基本的了解,给你一个游戏编程的基础以及使用工具创建游戏的能力.在您将学习的每一章中的代码示例都将会帮您创建一个不同游戏组件.直到本书最后,您将创建一个能够运转的完整的RPG游戏.下

游戏编程入门之测试字体输出

(1)创建字体:    DirectX提供一个字体类,它为我们抽象了整个过程,从而让我们可以少关注流程(比如满载字体的位图图像)而花更多的时间在游戏的代码上.ID3DXFont接口用于创建字 体,其指针版本已经预定义好了. 1 LPD3DFONT font:    我们将使用一个名为D3DXCreateFontIndirect的函数来创建字体并且为字体打印做准备.不过在这之前,我们必须先使用D3DXFONT_DESC结构来时 只想要的字体属性. (2)字体描述符: D3DXFONT_DESC结构

DirectX游戏编程心得之:使用2-D坐标显示2-D图形的注意事项

最近打算做几款2-D小游戏,当然是用Direct3D来做的,所以就要使用Direct3D提供的2D顶点了.说是2D顶点,其实却有4个分量!而正是因为这种矛盾性,所以使用起来有不少注意事项.这些是我浪费了很多的青春而发现的,希望大家吸取教训啊! 具体来说,有这么几个方面的注意事项: 1. 2-D顶点结构的定义 比如,要定义一个带纹理坐标的2-D顶点结构,那么应该定义如下: struct Vertex2DTex { Vertex2DTex():pos2D(0.0f, 0.0f, 1.0f, 1.0f