//
// VC,DirectX8开发实例(画面的清除和描画)
// IDirect3DDevice8::Clear()函数使用
 
 
#include <windows.h>
#include <d3d8.h>
#define TITLE  TEXT("Kitty on your lap")
 
IDirect3D8 * pDirect3D;
IDirect3DDevice8 * pD3Device;
D3DPRESENT_PARAMETERS d3dpp;
 
LRESULT CALLBACK WndProc(HWND hWnd , UINT msg , WPARAM wp , LPARAM lp) {
        switch (msg) {
        case WM_DESTROY:
               PostQuitMessage(0);
               return 0;
        case WM_PAINT:
               if (!pD3Device) break;
               
               pD3Device->Clear(0 , 
                       NULL , //Clear全体
                       D3DCLEAR_TARGET ,//指定Clear对象,blankの色にする
                       D3DCOLOR_XRGB(0 , 0 , 0) ,//清楚后显示的颜色
                       1.0 , //Z值,0.0 ~ 1.0 までの深度バッファに保存する
                       0);   //指定为各StencilBuffer的报名保存的整数价值,
                            //0 ~ 2n - 1 までの
 
               //IDirect3DDevice8::Present()
               pD3Device->Present(NULL,// 全体が対象となります
                                  NULL,//
                                  NULL,//
                                  NULL);//
               ValidateRect(hWnd , NULL);
               return 0;
        }
        return DefWindowProc(hWnd , msg , wp , lp);
}
 
int WINAPI WinMain(HINSTANCE hInstance , HINSTANCE hPrevInstance ,
                       PSTR lpCmdLine , int nCmdShow) {
        MSG msg;
        HWND hWnd;
        WNDCLASS winc;
        D3DDISPLAYMODE d3ddm;
 
        pDirect3D = Direct3DCreate8(D3D_SDK_VERSION);
        pDirect3D->GetAdapterDisplayMode(D3DADAPTER_DEFAULT , &d3ddm);
 
        ZeroMemory(&d3dpp , sizeof(D3DPRESENT_PARAMETERS));
        d3dpp.BackBufferFormat = d3ddm.Format;
        d3dpp.BackBufferCount = 1;
        d3dpp.SwapEffect = D3DSWAPEFFECT_DISCARD;
        d3dpp.Windowed = TRUE;
 
        winc.style             = CS_HREDRAW | CS_VREDRAW;
        winc.lpfnWndProc       = WndProc;
        winc.cbClsExtra        = winc.cbWndExtra = 0;
        winc.hInstance         = hInstance;
        winc.hIcon             = LoadIcon(NULL , IDI_APPLICATION);
        winc.hCursor           = LoadCursor(NULL , IDC_ARROW);
        winc.hbrBackground     = (HBRUSH)GetStockObject(WHITE_BRUSH);
        winc.lpszMenuName      = NULL;
        winc.lpszClassName     = TEXT("KITTY");
 
        if (!RegisterClass(&winc)) return 0;
 
        hWnd = CreateWindow(
               TEXT("KITTY") , TITLE , WS_OVERLAPPEDWINDOW | WS_VISIBLE ,
               CW_USEDEFAULT , CW_USEDEFAULT , CW_USEDEFAULT , CW_USEDEFAULT ,
               NULL , NULL , hInstance , NULL
        );
        if (!hWnd) return 0;
 
        pDirect3D->CreateDevice(
               D3DADAPTER_DEFAULT , D3DDEVTYPE_HAL , hWnd ,
               D3DCREATE_SOFTWARE_VERTEXPROCESSING , &d3dpp , &pD3Device
        );
 
        while (GetMessage(&msg , NULL , 0 , 0 )) {
               TranslateMessage(&msg);
               DispatchMessage(&msg);
        }
 
        pDirect3D->Release();
        pD3Device->Release();
        return msg.wParam;
}

本章我想在设备里(上)进行绘画。比起前几章要难,因为加入了Z坐标系。

//
//IDirect3DDevice8::Reset()方法使用
//
#include <windows.h>
#include <d3d8.h>
#define TITLE  TEXT("Kitty on your lap")
 
IDirect3D8 * pDirect3D;
IDirect3DDevice8 * pD3Device;
D3DPRESENT_PARAMETERS d3dpp;
 
LRESULT CALLBACK WndProc(HWND hWnd , UINT msg , WPARAM wp , LPARAM lp) {
        switch (msg) {
        case WM_DESTROY:
               PostQuitMessage(0);
               return 0;
        case WM_PAINT:
               if (!pD3Device) break;
               pD3Device->Clear(0 , NULL , D3DCLEAR_TARGET ,
                       D3DCOLOR_XRGB(0 , 0 , 0) , 1.0 , 0);
 
               pD3Device->Present(NULL,NULL,NULL,NULL);
               ValidateRect(hWnd , NULL);
               return 0;
        case WM_SIZE://如果窗体大小发生变化,执行此事件
               if (!pD3Device) return 0;
               d3dpp.BackBufferWidth = LOWORD(lp);
               d3dpp.BackBufferHeight = HIWORD(lp);
               pD3Device->Reset(&d3dpp);// 表示新的设备的状态
               InvalidateRect(hWnd , NULL , TRUE);
               return 0;
        }
        return DefWindowProc(hWnd , msg , wp , lp);
}
 
int WINAPI WinMain(HINSTANCE hInstance , HINSTANCE hPrevInstance ,
                       PSTR lpCmdLine , int nCmdShow) {
        MSG msg;
        HWND hWnd;
        WNDCLASS winc;
        D3DDISPLAYMODE d3ddm;
 
        pDirect3D = Direct3DCreate8(D3D_SDK_VERSION);
        pDirect3D->GetAdapterDisplayMode(D3DADAPTER_DEFAULT , &d3ddm);
 
        ZeroMemory(&d3dpp , sizeof (D3DPRESENT_PARAMETERS));
        d3dpp.BackBufferFormat = d3ddm.Format;
        d3dpp.BackBufferCount = 1;
        d3dpp.SwapEffect = D3DSWAPEFFECT_DISCARD;
        d3dpp.Windowed = TRUE;
 
        winc.style             = CS_HREDRAW | CS_VREDRAW;
        winc.lpfnWndProc       = WndProc;
        winc.cbClsExtra        = winc.cbWndExtra = 0;
        winc.hInstance         = hInstance;
        winc.hIcon             = LoadIcon(NULL , IDI_APPLICATION);
        winc.hCursor           = LoadCursor(NULL , IDC_ARROW);
        winc.hbrBackground     = (HBRUSH)GetStockObject(WHITE_BRUSH);
        winc.lpszMenuName      = NULL;
        winc.lpszClassName     = TEXT("KITTY");
 
        if (!RegisterClass(&winc)) return 0;
 
        hWnd = CreateWindow(
               TEXT("KITTY") , TITLE , WS_OVERLAPPEDWINDOW | WS_VISIBLE ,
               CW_USEDEFAULT , CW_USEDEFAULT , CW_USEDEFAULT , CW_USEDEFAULT ,
                NULL , NULL , hInstance , NULL
        );
        if (!hWnd) return 0;
 
        pDirect3D->CreateDevice(
               D3DADAPTER_DEFAULT , D3DDEVTYPE_HAL , hWnd ,
               D3DCREATE_SOFTWARE_VERTEXPROCESSING , &d3dpp , &pD3Device
        );
 
        while (GetMessage(&msg , NULL , 0 , 0 )) {
               TranslateMessage(&msg);
               DispatchMessage(&msg);
        }
 
        pDirect3D->Release();
        pD3Device->Release();
        return msg.wParam;
}

VC,DirectX8开发实例(画面的清除和描画)相关推荐

  1. AutoCAD ObjectARX(VC)开发基础与实例教程2014版光盘镜像

    AutoCAD ObjectARX(VC)开发基础与实例教程2014,最新版,光盘镜像 作者:张帆 朱文俊 编著 出版社:中国电力出版社 出版时间:2014年6月 点击一下 转载于:https://w ...

  2. 《Unity 3.x游戏开发实例》一第2章 让我们从天空开始

    本节书摘来异步社区<Unity 3.x游戏开发实例>一书中的第2章,第2.1节,作者: [加]Ryan Henson Creighton 译者: 师蓉 责编: 陈冀康,更多章节内容可以访问 ...

  3. [转载]J2ME游戏开发实例讲解

    J2ME游戏开发实例讲解 一.序言 昨天在网上闲逛,发现一篇讲解用delphi实现华容道游戏的文章,颇受启发.于是,产生了将华容道游戏移植到手机中去的冲动.现在手机游戏琳琅满目,不一而足,华容道的实现 ...

  4. J2me游戏开发实例讲解(华容道)

    j2me游戏开发实例讲解 (加入日期:2003-10-10 点击数:1541) [对此文发表评论]?[编程爱好者论坛] [保存文章至硬盘] ?[打印文章] Borland开发讨论区 微软开发讨论区 C ...

  5. 《Unity 3.x游戏开发实例》——2.10节注意

    本节书摘来自异步社区<Unity 3.x游戏开发实例>一书中的第2章,第2.10节注意,作者 [加]Ryan Henson Creighton,更多章节内容可以访问云栖社区"异步 ...

  6. c++程序设计_基于proteus的51单片机开发实例30-模块化程序设计

    1. 基于proteus的51单片机开发实例30-模块化程序设计 1.1. 实验目的 模块化程序设计 不知不觉我们的51单片机开发实例已经进行到第三十篇了,是时候进行一个总结和反思了,总结什么?反思什 ...

  7. poll接口《来自Linux驱动程序开发实例》

    您所在的位置:读书频道 > 操作系统 > Linux > 1.2.7 poll接口 1.2.7 poll接口 2012-05-22 13:38 冯国进 机械工业出版社 我要评论(0) ...

  8. Linux USB 驱动开发实例(七)—— 基于USB 总线的无线网卡浅析

    回顾一下USB的相关知识 USB(Universal Serial Bus)总线又叫通用串行外部总线, 它是20世纪90年代发展起来的.USB接口现在得到了广泛的应用和普及,现在的PC机中都带有大量的 ...

  9. 笔记2:VC++ socket通信实例

    VC++ socket通信实例 网络中进程之间如何通信   首要解决的问题是如何唯一标识一个进程,在本地可以通过进程PID来唯一标识一个进程,但是在网络中这是行不通的.其实TCP/IP协议族已经帮我们 ...

最新文章

  1. Nature:首个肠道微生物对药物代谢影响的系统性研究
  2. 机器学习工程师正在失业,但学习依旧是唯一的出路
  3. 线程技术 ☞ Future模式
  4. sudo su su_Spring Security应用程序中的su和sudo
  5. php动态数组的用法
  6. python-爬虫学习(文字、图片、视频)
  7. minikube start 使用Hyper-V
  8. python 字符串函数_Python字符串函数
  9. python中列表用什么表示_python中的列表
  10. 兰州烧饼 NYOJ--779
  11. 使用DevExpress的PdfViewer实现PDF打开、预览、另存为、打印(附源码下载)
  12. 零基础入门学习汇编语言~基础知识~机器语言与汇编语言的产生及组成
  13. 华为x86服务器销售额,x86服务器销量排行
  14. 剑三 服务器状态查询,数据互通全面启动_剑侠情缘网络版叁_金山游戏官方网站_金山逍遥Xoyo.com...
  15. MATLAB获取Excel指定行列数据及删除指定行数据
  16. 首款物联网防火墙himqtt开源
  17. 【转】似大地水准面精化
  18. markdown转pdf
  19. PHP AJAX Promise
  20. Kalman滤波器从原理到实现

热门文章

  1. Linux shell: ls命令详解
  2. 线性规划与非线性规划的求解
  3. 若依前后端分离框架——初始化参数功能源码学习
  4. win10如何调整计算机时间同步,Win10系统如何设置时间同步间隔?修改时间同步频率的方法...
  5. RANSAC如何动态更新最大迭代次数
  6. unity怎么显示骨骼_Unity骨骼动画的总结
  7. hive后台启动_将Hive Thrift server 添加到服务后台运行 | 学步园
  8. PLSQL连接Oracle:ORA-12154: TNS: 无法解析指定的连接标识符
  9. 关于SEO与搜索引擎排名现状分析与SEO去向
  10. jQuery serialize()、serializeArray()方法实现表单序列化