刚开始学习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程序的基本结构。

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

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

    PC游戏编程(入门篇) 第一章 基石 1. 1 BOSS登场--GAF简介 第二章 2D图形程式初体验 2.l 饮水思源--第一个"游戏"程式 2.2 知其所以然一一2D图形学基础 ...

  2. Python游戏编程入门

    <Python游戏编程入门>这些文章负责整理在这本书中的知识点.注意事项和课后习题的尝试实现.并且对每一个章节给出的最终实例进行分析和注释. 初识pygame:pie游戏pygame游戏库 ...

  3. Python游戏编程入门 中文pdf扫描版|网盘下载内附地址提取码|

    Python是一种解释型.面向对象.动态数据类型的程序设计语言,在游戏开发领域,Python也得到越来越广泛的应用,并由此受到重视. 本书教授用Python开发精彩游戏所需的[]为重要的该你那.本书不 ...

  4. Python游戏编程入门2

    I/O.数据和字体:Trivia游戏 本章包括如下内容:Python数据类型获取用户输入处理异常Mad Lib游戏操作文本文件操作二进制文件Trivia游戏 其他的不说,我先去自己学习文件类型和字符串 ...

  5. DirectX游戏编程(一):创建一个Direct3D程序

    一.环境 Visual Studio 2012,DirectX SDK (June 2010) 二.准备 1.环境变量(如没有配置请添加) 变量名:DXSDK_DIR 变量值:D:\Software\ ...

  6. Python游戏编程入门3

    用户输入:Bomb Catcher游戏本章介绍使用键盘和鼠标获得用户输入.包括如下主题:学习pygame事件学习实时循环学习键盘和鼠标事件学习轮询键盘和鼠标的状态编写Bomb Catcher游戏 1本 ...

  7. python编程学习--Pygame - Python游戏编程入门(0)---转载

    原文地址:https://www.cnblogs.com/wuzhanpeng/p/4261015.html 引言 博客刚开,想把最近学习的东西记录下来,算是一种笔记.最近打算开始学习Python,因 ...

  8. Pygame - Python游戏编程入门(0) 转

    博客刚开,想把最近学习的东西记录下来,算是一种笔记.最近打算开始学习Python,因为我感觉Python是一门很有意思的语言,很早以前就想学了(碍于懒),它的功能很强大,你可以用它来做科学运算,或者数 ...

  9. Pygame - Python游戏编程入门

    >>> import pygame>>> print(pygame.ver)1.9.2a0 如果没有报错,应该是安装好了~ 如果报错找不到模块,很可能是安装版本的问 ...

随机推荐

  1. java 多线程——一个定时调度的例子

    java 多线程 目录: Java 多线程——基础知识 Java 多线程 —— synchronized关键字 java 多线程——一个定时调度的例子 java 多线程——quartz 定时调度的例子 ...

  2. K2工作流的使用

    K2的工作流作为工作流中的战斗机,被各大企业争相抢购着,当然我们公司也买了,用起来确实方便也的确很强大. 主要分两的模块: 一.K2.net 2003 Service Manager 以上是对配置用户 ...

  3. BZOJ1590 [Usaco2008 Dec]Secret Message 秘密信息

    建立一颗trie树,记录下来每个点以它为结尾的字符串的个数cnt,和它的子树内有多少字符串size 于是查询的时候就只需要把沿途的cnt加起来,再加上最后的size就好了 /************* ...

  4. weblogic部署ssh2应用出现异常

    一般在domains\your_Domain\bin\startWebLogic.cmd 中找到set CLASSPATH=%CLASSPATH%;%MEDREC_WEBLOGIC_CLASSPATH ...

  5. The C10K problem

    原文链接:http://www.kegel.com/c10k.html It's time for web servers to handle ten thousand clients simulta ...

  6. Java异常--读书笔记

    1. Java将异常分为两种:Checked异常和Runtime异常,Java认为Checked异常都是可以在编译阶段被处理的异常,所以强制程序处理所有的Checked异常:Runtime异常则无需处 ...

  7. SQlServer 从系统表 sysobjects 中获取数据库中所有表或存储过程等对象

    [sysobjects] 一.概述 系统对象表. 保存当前数据库的对象,如约束.默认值.日志.规则.存储过程等,该表中包含该数据库中的表 存储过程 视图等所有对象 在sqlserver2005,sql ...

  8. Win7 Print Spooler服務自动关闭

    对于Win7系统而言,该问题通常是安装了错误的打印驱动引起的,Win7系统为了保护其它进程不受干扰,自动关闭了打印服务. 解决方法就是: a> 把不用的打印机删掉. b> 确保你安装了正确 ...

  9. jquery easyui DataGrid 动态的改变列显示的顺序

    $.extend($.fn.datagrid.methods,{ columnMoving: function(jq){ return jq.each(function(){ var target = ...

  10. 戴文的Linux内核专题:08内核配置(5)

    转自Linux中国 Linux内核拥有许多可以配置的特性,接下来我们还有许多要配置. 下一个可以配置的特性是x86的随机数生成器(x86 architectural random number gen ...