DirectX 9.0 3D 游戏开发编程基础之三

      本节主要演示了利用D3D绘制一个茶壶,也即绘制系统自带的Mesh的方法。
/*
 *在D3D窗口中绘制茶壶
 *whufly
 *2011年6月15日
 *
 *
 */


#include
#include
#include

IDirect3D9 *g_pD3D = NULL;
IDirect3DDevice9  *g_pDevice = NULL;

ID3DXMesh *g_pMesh = NULL;

HRESULT InitD3D(HWND hwnd)
{
    g_pD3D = Direct3DCreate9(D3D_SDK_VERSION);
    if (g_pD3D == NULL)
        return E_FAIL;

    D3DPRESENT_PARAMETERS d3dpp;
    ZeroMemory(&d3dpp,sizeof(d3dpp));
    //d3dpp.Windowed = true;
    //d3dpp.SwapEffect = D3DSWAPEFFECT_DISCARD;
    //d3dpp.BackBufferFormat = D3DFMT_UNKNOWN;
    d3dpp.BackBufferWidth = 500;
    d3dpp.BackBufferHeight = 400;
    d3dpp.BackBufferFormat = D3DFMT_A8R8G8B8; //像素格式
    d3dpp.BackBufferCount = 1;
    d3dpp.MultiSampleType = D3DMULTISAMPLE_NONE;
    d3dpp.MultiSampleQuality = 0;
    d3dpp.SwapEffect = D3DSWAPEFFECT_DISCARD;
    d3dpp.hDeviceWindow = hwnd;
    d3dpp.Windowed = true ; // fullscreen
    d3dpp.EnableAutoDepthStencil = true;
    d3dpp.AutoDepthStencilFormat = D3DFMT_D24S8; // depth format
    d3dpp.Flags = 0;
    d3dpp.FullScreen_RefreshRateInHz = D3DPRESENT_RATE_DEFAULT;
    d3dpp.PresentationInterval = D3DPRESENT_INTERVAL_IMMEDIATE;


    if (FAILED(g_pD3D->CreateDevice(D3DADAPTER_DEFAULT,D3DDEVTYPE_HAL,hwnd,
        D3DCREATE_SOFTWARE_VERTEXPROCESSING,&d3dpp,&g_pDevice)))
    {
        return E_FAIL;
    }

    D3DXCreateTeapot(g_pDevice,&g_pMesh,NULL);
    D3DXVECTOR3 position(0.0f, 0.0f, -3.0f);
    D3DXVECTOR3 target(0.0f, 0.0f, 0.0f);
    D3DXVECTOR3 up(0.0f, 1.0f, 0.0f);
    D3DXMATRIX V;
    D3DXMatrixLookAtLH(&V, &position, &target, &up);
    g_pDevice->SetTransform(D3DTS_VIEW, &V);

    //
    // Set projection matrix.
    //

    D3DXMATRIX proj;
    D3DXMatrixPerspectiveFovLH(
        &proj,
        D3DX_PI * 0.5f, // 90 - degree
        (float)1366 / (float)768,
        1.0f,
        1000.0f);
    g_pDevice->SetTransform(D3DTS_PROJECTION, &proj);

    //
    // Switch to wireframe. mode.
    //

    g_pDevice->SetRenderState(D3DRS_FILLMODE, D3DFILL_WIREFRAME);
    g_pDevice->SetRenderState(D3DRS_LIGHTING,FALSE);

    return S_OK;
}

void Cleanup()
{
    if(g_pMesh != NULL)
        g_pMesh->Release();
   
    if (g_pDevice != NULL)
        g_pDevice->Release();

    if (g_pD3D)
        g_pD3D->Release();
}

void Render()
{
    if (g_pDevice != NULL)
    {


        g_pDevice->Clear(0,NULL,D3DCLEAR_TARGET | D3DCLEAR_ZBUFFER,0/*D3DCOLOR_ARGB(0,255,0,0)*/,1.0f,0);
       
        if (SUCCEEDED(g_pDevice->BeginScene()))
        {
            g_pMesh->DrawSubset(0);
            g_pDevice->EndScene();
        }

        g_pDevice->Present(NULL,NULL,NULL,NULL);
    }
}

LRESULT WINAPI WinProc(HWND hwnd,UINT msg,WPARAM wParam,LPARAM lParam)
{
    switch (msg)
    {
        case WM_DESTROY:
            PostQuitMessage(0);
            break;
        case WM_PAINT:
            //*、、*/Render();
            break;
        default:
            break;
    }

    return DefWindowProc(hwnd,msg,wParam,lParam);
}


INT WINAPI WinMain(__in HINSTANCE hInstance, __in_opt HINSTANCE hPrevInstance, __in_opt LPSTR lpCmdLine, __in int nShowCmd )
{
    WNDCLASS wndclass;
    wndclass.cbClsExtra = 0;
    wndclass.cbWndExtra = 0;
    wndclass.hbrBackground = (HBRUSH)GetStockObject(WHITE_BRUSH);
    wndclass.hCursor = 0;
    wndclass.hIcon = 0;
    wndclass.lpfnWndProc = WinProc;
    wndclass.hInstance = hInstance;
    wndclass.lpszClassName = "D3DClass";
    wndclass.lpszMenuName = 0;
    wndclass.style. = CS_HREDRAW | CS_VREDRAW;

    if (!RegisterClass(&wndclass))
       return FALSE;

    HWND hwnd = CreateWindow("D3DClass","D3DWindow",WS_OVERLAPPEDWINDOW,0,0,500,400,NULL,NULL,hInstance,NULL);
    if (hwnd == NULL)
       return FALSE;

   
    if (SUCCEEDED(InitD3D(hwnd)))
    {
        ShowWindow(hwnd,SW_SHOW);
        UpdateWindow(hwnd);

        MSG msg;
        ZeroMemory(&msg,sizeof(msg));

        while (msg.message != WM_QUIT)
        {
            if (PeekMessage(&msg,NULL,0,0,PM_REMOVE))
            {
                TranslateMessage(&msg);
                DispatchMessage(&msg);
            }
            else
            {
                Render();
            }
        }
    }

    UnregisterClass("D3DClass",hInstance);
    Cleanup();
    return 0;
}
       注意将以下语句加上g_pDevice->SetRenderState(D3DRS_LIGHTING,FALSE);否则窗口什么也看不见。





     

来自 “ ITPUB博客 ” ,链接:http://blog.itpub.net/24818796/viewspace-701186/,如需转载,请注明出处,否则将追究法律责任。

转载于:http://blog.itpub.net/24818796/viewspace-701186/

数据结构与算法_C++[MP4] 猎豹网校VC++ MFC 经典教程 基础篇[MP4] 猎豹网校Java 零基础入门[MP4] 猎豹网校 游戏编程快速入门[MP4] 猎豹网校 网店赢家淘宝网新手开店[MP4] 猎豹网校 透测测试 系统安全测试[MP4] 猎豹网校 淘宝卖家网店美工[MP4] 猎豹网校 搜索引擎搜索技巧[MP4] 猎豹网校 数据结构与算法_Java语言[MP4] 猎豹网校 数据结构与算法_C语言[MP4] 猎豹网校 软件测试快速入门[MP4] 猎豹网校 猎豹网校数据结构与算法_C#语言[MP4] 猎豹网校 快学快用 Excel 应用大全 中级教程[MP4] 猎豹网校 快学快用 Excel 应用大全 高级教程[MP4] 猎豹网校 快学快用 Excel 应用大全 初级教程[MP4] 猎豹网校 快速掌握_会声会影_标准[MP4] 猎豹网校 快速掌握 QTP 测试工具[MP4] 猎豹网校 快速掌握 Python 学习手册[MP4] 猎豹网校 快速掌握 Python 系统管理[MP4] 猎豹网校 快速掌握 Python 基础教程[MP4] 猎豹网校 快速掌握 Python Django 1.5 网页开发[MP4] 猎豹网校 快速掌握 MATLAB 经典教程[MP4] 猎豹网校 快速掌握 LoadRunner 测试工具[MP4] 猎豹网校 快速掌握 C# 学习指南[MP4] 猎豹网校 快速掌握 Access VBA[MP4] 猎豹网校 快速学会_Windows 命令行批处理脚本[MP4] 猎豹网校 快速学会_Shell 脚本经典教程[MP4] 猎豹网校 快速学会 VB.NET 经典教程[MP4] 猎豹网校 快速学会 TclTk 开发指南[MP4] 猎豹网校 快速学会 Perl 实用教程[MP4] 猎豹网校 快速学会 Perl 入门经典[MP4] 猎豹网校 快速通过_计算机二级_公共基础知识[MP4] 猎豹网校 快速通过_计算机二级_VFP[MP4] 猎豹网校 快速通过_计算机二级_VB[MP4] 猎豹网校 快速通过_计算机二级_Java[MP4] 猎豹网校 快速通过_计算机二级_C语言[MP4] 猎豹网校 快速通过_计算机二级_C++[MP4] 猎豹网校 黑客攻防 网站攻防修炼[MP4] 猎豹网校 黑客攻防 木马揭秘[MP4] 猎豹网校 黑客攻防 蜜罐[MP4] 猎豹网校 高级软件测试分析师[MP4] 猎豹网校 大家可以学的C语言[MP4] 猎豹网校 Windows程序设计 初级课程(二)[MP4] 攻防[MP4] 北风网 C++反汇编基础:Win32平台(逆向实例、动态调试实例)[MP4] 安卓 Android 游戏编程入门(上)[MP4] Word排版高级技巧[MP4] Word 零基础入门[MP4] Windows程序设计 初级课程(一)[MP4] Windows Api学习指南[MP4] VisualSVN Subversion[MP4] Visual C# 入门经典[MP4] VC++ MFC快速提高[MP4] VC++ MFC快速入门[MP4] VC++ MFC快速进阶[MP4] Unity 3D 游戏开发经典教程[MP4] Unity 3D 游戏高级教程[MP4] SQL Server 数据库[MP4] Silverlight 经典教程[MP4] Qt 中级课程 (上)[MP4] Python系统管理[MP4] PS抠图秘技[MP4] ppyygg PowerPoint(PPT) 达人进阶[MP4] PHP基础教程[MP4] PHP和MySQL Web开发 高级教程[MP4] PHP和MySQL Web开发 初级教程[MP4] PHP 程序设计[MP4] PHP Zend 开发实战[MP4] PHP Ajax 经典教程[MP4] Oracle 数据库[MP4] MySQL 数据库[MP4] Lua 经典教程[MP4] Linux 轻松入门[MP4] Linux C 基础教程[MP4] JSP 实用教程[MP4] jQuery 快速入门[MP4] Java设计模式[MP4] JavaScript 经典教程[MP4] Java 编程思想 中级教程[MP4] Java 编程思想 高级教程[MP4] Java 编程思想 初级教程[MP4] HTML网页设计[MP4] Flash CS5 经典教程[MP4] Flash ActionScript 经典教程MP4] Flash ActionScript 基础教程MP4] Excel 零基础
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值