游戏开发论坛

 找回密码
 立即注册
搜索
查看: 5281|回复: 11

无论你是谁相信都会有帮助的:)!directx9 eg1

[复制链接]

17

主题

20

帖子

26

积分

注册会员

Rank: 2

积分
26
发表于 2006-3-16 17:22:00 | 显示全部楼层 |阅读模式
小弟是一个标准菜鸟,志向是编写游戏,(我可是以它作为毕生志愿的)可惜最近小弟我找工作总是郁郁那个那个……(真想有游戏公司要我啊!),啧,啧~~~~算了不提那些事了。现在我再这里把我的学习笔记共享出来,希望能对祖国的游戏开发事业做一点贡献。由于我不太善于表达,所以也不是什么教程的东西,只是一些代码。因为我相信代码之前,了无秘密。
感谢大家支持我!(特别感谢我的GF:Sophia)  呵呵。

(欢迎大家和我进行学习交流)
名字:Lid
学校:安徽某大学
QQ:626687931
E-mail:sirong0325@hotmail.com

#include <d3d9.h>

LPDIRECT3D9    g_pD3D = NULL;                                 // Direct3D对象指针
LPDIRECT3DDEVICE9  g_pd3dDevice = NULL;         // Direct3D设备指针

HRESULT InitD3D( HWND hWnd )
{//创建DIRECT3D对象指针
    if( NULL == ( g_pD3D = Direct3DCreate9( D3D_SDK_VERSION ) ) )
        return E_FAIL;
// 查询当前的显示模式信息
        D3DDISPLAYMODE d3ddm;//d3ddm储存当前显示模式信息
    if( FAILED( g_pD3D->GetAdapterDisplayMode( D3DADAPTER_DEFAULT, &d3ddm ) ) )
        return E_FAIL;
        //设置传递给LPDIRECT3D9::CreateDevice的参数
    D3DPRESENT_PARAMETERS d3dpp;
    ZeroMemory( &d3dpp, sizeof(d3dpp) );
    d3dpp.Windowed = TRUE;//设置图形以窗口方式显示
    d3dpp.SwapEffect = D3DSWAPEFFECT_DISCARD;//后台的缓存复制到前台缓存后,清除后台缓存内容
    d3dpp.BackBufferFormat = d3ddm.Format;//使后台缓存的格式与当前的图形显示卡的显示像素格式相等
        if( FAILED( g_pD3D->CreateDevice( D3DADAPTER_DEFAULT, D3DDEVTYPE_HAL,
                                hWnd,D3DCREATE_SOFTWARE_VERTEXPROCESSING,
                &d3dpp, &g_pd3dDevice ) ) )//创建DIRECT3D设备指针
    {
        return E_FAIL;
    }
    return S_OK;
}

//-----------------------------------------------------------------------------
// Name: Cleanup()
// Desc: 释放系统资源
//-----------------------------------------------------------------------------
VOID Cleanup()
{
    if( g_pd3dDevice != NULL)
        g_pd3dDevice->Release();

    if( g_pD3D != NULL)
        g_pD3D->Release();//不要我解释了吧
}

//-----------------------------------------------------------------------------
// Name: Render()
// Desc: 图形显示
//-----------------------------------------------------------------------------
VOID Render()
{
    if( NULL == g_pd3dDevice )
        return;
    // 将后缓冲区置为蓝色
        g_pd3dDevice->Clear( 0, NULL, D3DCLEAR_TARGET,
                                                        D3DCOLOR_XRGB(0,0,255), 1.0f, 0 );
    g_pd3dDevice->BeginScene();
    // 这里加入图形绘制程序
    g_pd3dDevice->EndScene();
    g_pd3dDevice-&gtresent( NULL, NULL, NULL, NULL );//将后台的缓冲区的数据复制到前台缓冲区
}

//-----------------------------------------------------------------------------
// Desc: 窗口过程函数
//-----------------------------------------------------------------------------
LRESULT WINAPI MsgProc(HWND hWnd, UINT msg, WPARAM wParam, LPARAM lParam )
{   switch( msg )
    {
        case WM_DESTROY:
            PostQuitMessage( 0 );//释放系统资源
            return 0;
        case WM_PAINT:
            Render();//图形绘制
            ValidateRect( hWnd, NULL );//确认窗口客户区已更新
            return 0;
    }
    return DefWindowProc( hWnd, msg, wParam, lParam );
}

//-----------------------------------------------------------------------------
// Name: WinMain()
// Desc: 应用程序入口
//-----------------------------------------------------------------------------
INT WINAPI WinMain( HINSTANCE hInst, HINSTANCE, LPSTR, INT )
{
    // 注册窗口类
    WNDCLASS wndclass = { 0, MsgProc, 0L, 0L, hInst,
                    NULL, NULL, NULL, NULL,"Lid" };
    RegisterClass( &wndclass );
    // 创建应用程序的窗体
    HWND hWnd = CreateWindow( "Lid", "Lid1: CreateDevice",
                              WS_OVERLAPPEDWINDOW, 100, 100, 300, 300,
                              GetDesktopWindow(), NULL, wndclass.hInstance, NULL );
    // 初始化Direct3D
    if( SUCCEEDED( InitD3D( hWnd ) ) )
    {
        // 显示更新窗体
        ShowWindow( hWnd, SW_SHOWDEFAULT );
        UpdateWindow( hWnd );

        MSG msg;
        while( GetMessage( &msg, NULL, 0, 0 ) )
        {//有了消息
            TranslateMessage( &msg );//进行消息转换
            DispatchMessage( &msg );//将消息传递给窗口过程函数
        }
    }

    // 释放系统资源,退出
    Cleanup();
    UnregisterClass( "Lid", wndclass.hInstance );
    return 0;
}

18

主题

573

帖子

573

积分

高级会员

Rank: 4

积分
573
发表于 2006-3-17 19:08:00 | 显示全部楼层

Re:无论你是谁相信都会有帮助的:)!directx9 eg1

第一、我毕业时候的想法和你差不多,都是希望能对祖国的游戏开发事业做一点@#¥%……的话,但是后来我还是找了一份算是安稳的工作,利用业余时间研究程序。记得哲学老师说过,人的第一欲望就是生的欲望,也就是吃饱肚子才能做其他的事。有理想是好事,但要有后盾,谁也不想饿着肚子开发程序吧!
第二、虽然从头学习编写游戏没有坏处,但重复的开发轮子没有什么意义,可以使用微软DXSDK中提供的Framewwork,能让你更专著于游戏本身而不是一些其他的细节。

17

主题

20

帖子

26

积分

注册会员

Rank: 2

积分
26
 楼主| 发表于 2006-3-18 09:46:00 | 显示全部楼层

Re:无论你是谁相信都会有帮助的:)!directx9 eg1

谢谢你对我的建议,游戏是一条很长的路。无论我有多么困难,我还是要一直走下去。
因为我喜欢游戏!

2

主题

29

帖子

35

积分

注册会员

Rank: 2

积分
35
发表于 2006-3-18 11:40:00 | 显示全部楼层

Re:无论你是谁相信都会有帮助的:)!directx9 eg1

呵呵,看看3D图形学吧,比DX实在多了~

0

主题

2

帖子

12

积分

新手上路

Rank: 1

积分
12
发表于 2006-3-29 18:30:00 | 显示全部楼层

Re:无论你是谁相信都会有帮助的:)!directx9 eg1

什么玩意啊?《D3D图形程序设计》(陈卡)的第一章源代码,一个字都没有改动,望大虾们多看看书

72

主题

447

帖子

454

积分

中级会员

Rank: 3Rank: 3

积分
454
QQ
发表于 2006-3-30 14:27:00 | 显示全部楼层

Re:无论你是谁相信都会有帮助的:)!directx9 eg1

考!!这也行!


-----------------------------------
游戏人的个人站点
http://www.dingge.com

0

主题

9

帖子

11

积分

新手上路

Rank: 1

积分
11
发表于 2006-4-7 09:54:00 | 显示全部楼层

Re:无论你是谁相信都会有帮助的:)!directx9 eg1

鼓励鼓励, 毕竟我也是从这样的例子做起来的

0

主题

1

帖子

0

积分

新手上路

Rank: 1

积分
0
发表于 2006-4-13 12:17:00 | 显示全部楼层

Re:无论你是谁相信都会有帮助的:)!directx9 eg1

这个例子怎么在我这里运行不了啊?连接时出现了一个错误:"LIBCD.lib(crt0.obj) : error LNK2001: unresolved external symbol _main""Debug/D3D1.exe : fatal error LNK1120: 1 unresolved externals" 哪位高手指点一下吧!小弟在此先谢了啊!

86

主题

2251

帖子

2386

积分

金牌会员

Rank: 6Rank: 6

积分
2386
QQ
发表于 2006-4-13 14:40:00 | 显示全部楼层

Re:无论你是谁相信都会有帮助的:)!directx9 eg1

楼上,你用的是WIN32控制台工程吧?

0

主题

4

帖子

0

积分

新手上路

Rank: 1

积分
0
发表于 2006-4-20 22:09:00 | 显示全部楼层

Re:无论你是谁相信都会有帮助的:)!directx9 eg1

吃饭,游戏,生活……
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

作品发布|文章投稿|广告合作|关于本站|游戏开发论坛 ( 闽ICP备17032699号-3 )

GMT+8, 2026-1-24 08:31

Powered by Discuz! X3.4

Copyright © 2001-2021, Tencent Cloud.

快速回复 返回顶部 返回列表