游戏开发论坛

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

菜鸟DIRECTX第一天

[复制链接]

1

主题

3

帖子

0

积分

新手上路

Rank: 1

积分
0
发表于 2005-3-6 01:35:00 | 显示全部楼层 |阅读模式
首先,对那些对知识共享没兴趣的老鸟表示不满(也只能不满而已)。
其次,对自己没好好学英文表示不满,同时,对金山词霸表示感谢(虽然不怎么好用)。
再次,我很累,但很兴奋。熬夜学习象做爱一样刺激我的神经。
最后,明天,我会继续体验熬夜给我带来的快感。
以下,是今天晚上的成果,很多地方弄不清,希望有高手指点,感激不尽!


SDK自带的例题1蓝色窗口,在金山词霸和GOOGLE两位老师指点下写的注释。
//-----------------------------------------------------------------------------
// File: CreateDevice.cpp
//
// Desc: This is the first tutorial for using Direct3D. In this tutorial, all
//       we are doing is creating a Direct3D device and using it to clear the
//       window.
//
// Copyright (c) Microsoft Corporation. All rights reserved.
//-----------------------------------------------------------------------------
#include <d3d9.h>
#include <strsafe.h>//?晕,不懂
                             //安全的C语言字符串处理函数库   



//-----------------------------------------------------------------------------
// Global variables
//-----------------------------------------------------------------------------
//接口指针
LPDIRECT3D9             g_pD3D       = NULL; // Used to create the D3DDevice
//设备指针
LPDIRECT3DDEVICE9       g_pd3dDevice = NULL; // Our rendering device




//-----------------------------------------------------------------------------
// Name: InitD3D()
// Desc: Initializes Direct3D
//-----------------------------------------------------------------------------
HRESULT InitD3D( HWND hWnd )
{
    // Create the D3D object, which is needed to create the D3DDevice.
    if( NULL == ( g_pD3D = Direct3DCreate9( D3D_SDK_VERSION ) ) )
        return E_FAIL;

    // Set up the structure used to create the D3DDevice. Most parameters are
    // zeroed out. We set Windowed to TRUE, since we want to do D3D in a
    // window, and then set the SwapEffect to "discard", which is the most
    // efficient method of presenting the back buffer to the display.  And
    // we request a back buffer format that matches the current desktop display
    // format.
    D3DPRESENT_PARAMETERS d3dpp; //创建适合Device的结构体
    ZeroMemory( &d3dpp, sizeof(d3dpp) );//将结构体清零
    d3dpp.Windowed = TRUE;//创建窗口模式
    d3dpp.SwapEffect = D3DSWAPEFFECT_DISCARD;//?晕,交换实现
    d3dpp.BackBufferFormat = D3DFMT_UNKNOWN;//后台缓冲的格式保持与当前基础画面模式一致

    // Create the Direct3D device. Here we are using the default adapter (most
    // systems only have one, unless they have multiple graphics hardware cards
    // installed) and requesting the HAL (which is saying we want the hardware
    // device rather than a software one). Software vertex processing is
    // specified since we know it will work on all cards. On cards that support
    // hardware vertex processing, though, we would see a big performance gain
    // by specifying hardware vertex processing.
    if( FAILED( g_pD3D->CreateDevice( D3DADAPTER_DEFAULT, D3DDEVTYPE_HAL, hWnd,
                                      D3DCREATE_SOFTWARE_VERTEXPROCESSING,
                                      &d3dpp, &g_pd3dDevice ) ) )
    /************************CreatDevice()函数传递的参数********************
        Adaptr:  要创建的Device的顺序编号
        DeviceType  决定输出Device的种类。HAL是支持硬件加速的Device。REF为软件。
        hfocuusWindow  Device要输出的Window的句柄。
        BehaviorFlags   ?控制所创建设备行为的集合
        PpreseationParameters  前面声明的结构体的指针
        PpReturnedDeviceinterface   得到设备指针
        ***********************************************************************/
        {
        return E_FAIL;
    }

    // Device state would normally be set here

    return S_OK;
}




//-----------------------------------------------------------------------------
// Name: Cleanup()
// Desc: Releases all previously initialized objects清除初始化对象
//-----------------------------------------------------------------------------
VOID Cleanup()//后创建的先清除,感觉跟析构函数差不多的说
{
    if( g_pd3dDevice != NULL)
        g_pd3dDevice->Release();

    if( g_pD3D != NULL)
        g_pD3D->Release();
}




//-----------------------------------------------------------------------------
// Name: Render()
// Desc: Draws the scene
//-----------------------------------------------------------------------------
VOID Render()
{
    if( NULL == g_pd3dDevice )
        return;

    // Clear the backbuffer to a blue color用蓝色清除后台缓冲
    g_pd3dDevice->Clear( 0, NULL, D3DCLEAR_TARGET, D3DCOLOR_XRGB(0,0,255), 1.0f, 0 );
   
    // Begin the scene开始绘制
    if( SUCCEEDED( g_pd3dDevice->BeginScene() ) )
    {
        // Rendering of scene objects can happen here在这里放置Rendering命令
   
        // End the scene绘制结束
        g_pd3dDevice->EndScene();
    }

    // Present the backbuffer contents to the display能看到后台缓冲的画面
    g_pd3dDevice-&gtresent( NULL, NULL, NULL, NULL );
}




//-----------------------------------------------------------------------------
// Name: MsgProc()回调函数,消息句柄。没找到帮助,看返回值应该是传递都WinMain()
//中的消息循环中去了。
// Desc: The window's message handler  
//-----------------------------------------------------------------------------
LRESULT WINAPI MsgProc( HWND hWnd, UINT msg, WPARAM wParam, LPARAM lParam )
{
    switch( msg )
    {
        case WM_DESTROY:
            Cleanup();
            PostQuitMessage( 0 );
            return 0;

        case WM_PAINT:
            Render();
            ValidateRect( hWnd, NULL );
            return 0;
    }

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




//-----------------------------------------------------------------------------
// Name: WinMain()
// Desc: The application's entry point
//-----------------------------------------------------------------------------
INT WINAPI WinMain( HINSTANCE hInst, HINSTANCE, LPSTR, INT )
{
    // Register the window class
        //定义窗口类
    WNDCLASSEX wc = { sizeof(WNDCLASSEX), CS_CLASSDC, MsgProc, 0L, 0L,
                      GetModuleHandle(NULL), NULL, NULL, NULL, NULL,
                      "窗口类名", NULL };
        //注册窗口类
    RegisterClassEx( &wc );

    // Create the application's window
        //创建窗口
    HWND hWnd = CreateWindow( "窗口类名", "窗口的名字(标题栏)",
                              WS_OVERLAPPEDWINDOW,//窗口风格
                                                          100, 100,//  ?  x,y(帮助上这么写的,没看明白。不过
                                                                   //经修改测试后看,应该与窗口的位置有关)
                                                          300, 300,//窗口的宽,高
                              GetDesktopWindow(), NULL, wc.hInstance, NULL );

    // Initialize Direct3D
    if( SUCCEEDED( InitD3D( hWnd ) ) )
    {
        // Show the window
        ShowWindow( hWnd, SW_SHOWDEFAULT );//显示窗口
        UpdateWindow( hWnd );//强制显示

        // Enter the message loop
        MSG msg; //消息循环
        while( GetMessage( &msg, NULL, 0, 0 ) )
        {
            TranslateMessage( &msg );//解释消息
            DispatchMessage( &msg );//传递消息
        }
    }

    UnregisterClass( "D3D Tutorial", wc.hInstance );//注销窗口类
    return 0;
}

2

主题

27

帖子

32

积分

注册会员

Rank: 2

积分
32
发表于 2005-3-6 03:48:00 | 显示全部楼层

Re:菜鸟DIRECTX第一天

     相比之下,老鸟们对菜鸟们更是不满(也只能不满而已)。菜鸟总是仰天长叹“怎么天上不掉馅饼”而不自己动手尝试着去学习自己做个馅饼,即使菜鸟所期盼的馅饼从天上真的掉下来,他们仍然抱怨馅饼没有正好掉进他们的嘴里。即使馅饼正好掉进菜鸟的嘴里,他们依旧会四处找人帮忙咀嚼和吞咽。

     尽管有些出色的菜鸟值得帮助,但lj菜鸟总是占绝大多数,他们在网上嗷嗷乱叫,要帮助要代码要有注释的代码要中文的dd要xx核心要xx精要,就差要求替他们完成替他们工作最好替他们出售然后再帮他们数好钱存银行,流连于学习和工作以外的一切,总想快速的简单的直接的容易的获得他想要的,就是不肯付出努力和恒心。

      在今天这个网络时代,通过网络你可以找到你想要找的一切学习资料,这些资料丰富到几乎无群无尽,当然了大部分是令很多菜鸟们厌恶的E文。以前曾经有一个说法,说未来的文盲不是指不认识字的人,而是指不懂E文和计算机的人,另一个说法是指不懂得如何学习的人。

      你是菜鸟的唯一原因是你还不够努力,你努力的还不够。而不是你得到的帮助不够。任何老鸟的成长过程都是靠自己日复一日年复一年的不断努力后,才逐渐到达一定的程度,这个过程至少都在3年以上(不是指在现在大学校园里的那种3年学习生活)。

86

主题

2251

帖子

2386

积分

金牌会员

Rank: 6Rank: 6

积分
2386
QQ
发表于 2005-3-6 09:13:00 | 显示全部楼层

Re:菜鸟DIRECTX第一天

做好自己~

1

主题

3

帖子

0

积分

新手上路

Rank: 1

积分
0
 楼主| 发表于 2005-3-6 11:35:00 | 显示全部楼层

Re:菜鸟DIRECTX第一天

你是菜鸟的唯一原因是你还不够努力,你努力的还不够。而不是你得到的帮助不够。
//这句话还是支持的。
任何老鸟的成长过程都是靠自己日复一日年复一年的不断努力后,才逐渐到达一定的程度,这个过程至少都在3年以上(不是指在现在大学校园里的那种3年学习生活)。
//但是,有的时候老鸟简单的两句话至少可能让我们少用几个小时的时间去从网络上那些垃圾信息中找出我们需要的。这样的话,你所说的三年时间能完成的事我想一年也就够了。当然,我不是说老鸟有什么义务或责任帮菜鸟。我只是不理解,在你们有空的时候,举手之劳的事,何乐而不为?
关于你上面说的,我也经常去论坛找对我有用的东西,也看到不少老鸟们对菜鸟提出低级问题的不满的言辞,这我能理解。而我之所以不满,是因为更多的老鸟之所以不愿意帮我们,不是因为没有时间,也不是因为题问题的人罗嗦,只因为,你是菜鸟!
好了,不罗嗦了,该干什么干什么去了。

20

主题

398

帖子

398

积分

中级会员

Rank: 3Rank: 3

积分
398
发表于 2005-3-6 11:56:00 | 显示全部楼层

Re:菜鸟DIRECTX第一天

      我觉得对于诚心想学习的人,不管他问的问题多么低级,都要耐心的帮他解决,因为入门总是一件最难的事情!
      不过我还是喜欢自己解决问题,因为可以从中学到很多的知识。有些时候,通过学习和研究,当前想解决的问题没有解决,却解决了以前的问题,或者学到了其他相关的知识!所以不是急需解决的问题,最好不要什么都问,这样不会有很大提高的!

31

主题

630

帖子

635

积分

高级会员

Rank: 4

积分
635
发表于 2005-3-6 13:19:00 | 显示全部楼层

Re:菜鸟DIRECTX第一天

有些资源不敢乱共享的。其实共享的资源已经很多了,包括Q3等。并且有许多东西,就是共享你也用不上。我觉得还是应该充分利用现有资源。
互相帮助是应该的,但是必须看到编程是个苦差事,得学会自己解决问题。就说楼主零落吧,才熬一次夜就发贴子告诉大家,其实你还不是为了自己。如果大家都像你这个劲,哪里还会有什么奉献精神。
其实不一定公开了源代码才是奉献,我们不能为了自己而编程序,这个世界是需要软件的,我们应该为这个世界而编程。
又跑题了。我虽然不是高手但是我觉得回答问题不应当涉及具体的细节,否则想我这样的猜鸟没有锻炼机会,永远成不了高手。

31

主题

630

帖子

635

积分

高级会员

Rank: 4

积分
635
发表于 2005-3-6 13:27:00 | 显示全部楼层

Re:菜鸟DIRECTX第一天

并且这个论坛上细节的内容太多,很少有讨论架构和需求的贴子,烦透了!

2

主题

27

帖子

32

积分

注册会员

Rank: 2

积分
32
发表于 2005-3-6 14:14:00 | 显示全部楼层

Re:菜鸟DIRECTX第一天

=====老鸟简单的两句话至少可能让我们少用几个小时的时间去从网络上那些垃圾信息中找出我们需要的。

话是这么说,可是问题没这么简单。老鸟通常都很忙很累的,至少我没见过悠闲的老鸟。就算是简单的事也不都是举手之劳就能解决的,很多问题老鸟只是知道怎么解决怎么去解决而已,不可能把问题的答案就放在桌面随时准备抛给菜鸟。很多时候苦口婆心指点别人前进的方向,对方却不为所动。当然了这也不能全怪人家,他本来就分不清是非对错。有时候不同的人提供不同的看法和意见,很容易吵起来,很反感。菜鸟的不会问问题,问的多是不着边际或不切实际的,无法回答或不值得回答。

从垃圾信息中寻找并辨别出我们需要的,这本就是很重要的一个基本技能,最好把它练到Max。在寻找信息的过程本身就是锻炼和学习,了解不正确和学会什么是正确同样都是必要的。就象fujingqiu说的“回答问题不应当涉及具体的细节,否则菜鸟没有锻炼机会,永远成不了高手”,我想只要是认真负责的老鸟都会是这个看法和做法的。

Blog是个好东西,现在有很多中外老鸟们把自己的心得写在上面,我觉得它应该是续email,bbs,icq之后又一种重要的网络交流方式,它象是一个永久性的包厢茶坐,是个人的专有私人空间,不象bbs那样杂乱,有机会多去找找看看。

BTW:给你个指点,http://koders.com/,专门搜索源代码的引擎,本来应该是菜鸟的最爱,可惜是E文的东西居多。如何,是不是郁闷啊?哈哈哈...... ^_____^

1

主题

3

帖子

0

积分

新手上路

Rank: 1

积分
0
 楼主| 发表于 2005-3-6 16:34:00 | 显示全部楼层

Re:菜鸟DIRECTX第一天

RE:fujingqiu
就说楼主零落吧,才熬一次夜就发贴子告诉大家,其实你还不是为了自己
这话没什么可说的,无论是为了生存还是为了梦想,确实都是为了自己。
如果大家都像你这个劲,哪里还会有什么奉献精神
这句话楞没看懂,我什么劲导致大家都没有奉献精神了?
RE:95279527
多谢指教。

32

主题

1583

帖子

1589

积分

金牌会员

Rank: 6Rank: 6

积分
1589
发表于 2005-3-6 19:09:00 | 显示全部楼层

Re:菜鸟DIRECTX第一天

问问题不是错。
细节部分也是菜鸟很需要的,往往老鸟点一句话,可以省掉菜鸟们很长时间搞出来的东西。
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

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

GMT+8, 2025-12-24 17:09

Powered by Discuz! X3.4

Copyright © 2001-2021, Tencent Cloud.

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