• <ins id="pjuwb"></ins>
    <blockquote id="pjuwb"><pre id="pjuwb"></pre></blockquote>
    <noscript id="pjuwb"></noscript>
          <sup id="pjuwb"><pre id="pjuwb"></pre></sup>
            <dd id="pjuwb"></dd>
            <abbr id="pjuwb"></abbr>
            隨筆 - 505  文章 - 1034  trackbacks - 0
            <2018年7月>
            24252627282930
            1234567
            891011121314
            15161718192021
            22232425262728
            2930311234


            子曾經曰過:編程無他,唯手熟爾!

            常用鏈接

            留言簿(94)

            隨筆分類(649)

            隨筆檔案(505)

            相冊

            BCB

            Crytek

            • crymod
            • Crytek's Offical Modding Portal

            Game Industry

            OGRE

            other

            Programmers

            Qt

            WOW Stuff

            搜索

            •  

            積分與排名

            • 積分 - 911346
            • 排名 - 14

            最新隨筆

            最新評論

            閱讀排行榜

            評論排行榜

            效果圖:

            解說:

            代碼:
            #include <d3dx9.h>
            #pragma warning( disable : 
            4996 ) // disable deprecated warning 
            #include <strsafe.h>
            #pragma warning( 
            default : 4996 ) 

            //-----------------------------------------------------------------------------
            // Global variables
            //-----------------------------------------------------------------------------
            LPDIRECT3D9             g_pD3D       = NULL; // Used to create the D3DDevice
            LPDIRECT3DDEVICE9       g_pd3dDevice = NULL; // Our rendering device
            LPDIRECT3DVERTEXBUFFER9 g_pVB        = NULL; // Buffer to hold vertices 頂點Buffer

            // A structure for our custom vertex type 自定義頂點類型
            struct CUSTOMVERTEX
            {
                D3DXVECTOR4 position; 
            // The transformed position for the vertex
                DWORD color;          // The vertex color
            };

            // Our custom FVF, which describes our custom vertex structure
            #define D3DFVF_CUSTOMVERTEX (D3DFVF_XYZRHW|D3DFVF_DIFFUSE)

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

                
            // Set up the structure used to create the D3DDevice
                D3DPRESENT_PARAMETERS d3dpp;
                ZeroMemory( 
            &d3dpp, sizeof(d3dpp) );
                d3dpp.Windowed 
            = TRUE;
                d3dpp.SwapEffect 
            = D3DSWAPEFFECT_DISCARD;
                d3dpp.BackBufferFormat 
            = D3DFMT_UNKNOWN;

                
            // Create the D3DDevice
                if( FAILED( g_pD3D->CreateDevice( D3DADAPTER_DEFAULT, D3DDEVTYPE_HAL, hWnd,
                    D3DCREATE_SOFTWARE_VERTEXPROCESSING,
                    
            &d3dpp, &g_pd3dDevice ) ) )
                {
                    
            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_pVB != NULL )        
                    g_pVB
            ->Release();

                
            if( g_pd3dDevice != NULL ) 
                    g_pd3dDevice
            ->Release();

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

            VOID DrawSegment(
            const CUSTOMVERTEX* pVerticesTemplate, size_t sizeTemplate, D3DXVECTOR4& vectorOffset)
            {
                
            if( g_pVB != NULL )        
                    g_pVB
            ->Release();

                CUSTOMVERTEX tmpVitices[
            6];
                memcpy(tmpVitices, pVerticesTemplate, sizeTemplate);
                
            for (int i = 0; i < 6++i)
                {
                    tmpVitices[i].position 
            += vectorOffset;
                }
                g_pd3dDevice
            ->CreateVertexBuffer( 6*sizeof(CUSTOMVERTEX),
                    
            0, D3DFVF_CUSTOMVERTEX,
                    D3DPOOL_DEFAULT, 
            &g_pVB, NULL );

                VOID
            * pVertices; // 輸出參數
                g_pVB->Lock( 0sizeof(tmpVitices), (void**)&pVertices, 0 );
                memcpy( pVertices, tmpVitices, 
            sizeof(tmpVitices) );
                g_pVB
            ->Unlock();
                g_pd3dDevice
            ->SetStreamSource( 0, g_pVB, 0sizeof(CUSTOMVERTEX) );
                g_pd3dDevice
            ->SetFVF( D3DFVF_CUSTOMVERTEX );
                g_pd3dDevice
            ->DrawPrimitive( D3DPT_TRIANGLESTRIP, 04 );
            }

            //-----------------------------------------------------------------------------
            // Name: Render()
            // Desc: Draws the scene
            //-----------------------------------------------------------------------------
            VOID Render()
            {
                
            // Clear the backbuffer to a blue color
                g_pd3dDevice->Clear( 0, NULL, D3DCLEAR_TARGET, D3DCOLOR_XRGB(0,0,255), 1.0f0 );

                
            // Begin the scene
                if( SUCCEEDED( g_pd3dDevice->BeginScene() ) )
                {
                    
            const static float c_fStartX = 100.0f;
                    
            const static float c_fStartY = 100.0f;

                    
            const static float c_fSharpH = 20.0f// 尖頭的高度(注意:尖頭是直角的)

                    
            const static float c_fMid = 150.0f// 中段的寬度

                    
            // 橫著的segment
                    static CUSTOMVERTEX verticesSegmentHori[] =
                    {
                        
            /*0*/{ D3DXVECTOR4( c_fStartX,                      c_fStartY+c_fSharpH,    0.5f1.0f), 0xffff0000, }, 
                        
            /*1*/{ D3DXVECTOR4( c_fStartX+c_fSharpH,              c_fStartY,              0.5f1.0f), 0xffff0000, },
                        
            /*2*/{ D3DXVECTOR4( c_fStartX+c_fSharpH,              c_fStartY+2*c_fSharpH,  0.5f1.0f), 0xffff0000, },
                        
            /*3*/{ D3DXVECTOR4( c_fStartX+c_fSharpH+c_fMid,      c_fStartY,              0.5f1.0f), 0xffff0000, },
                        
            /*4*/{ D3DXVECTOR4( c_fStartX+c_fSharpH+c_fMid,      c_fStartY+2*c_fSharpH,  0.5f1.0f), 0xffff0000, },
                        
            /*5*/{ D3DXVECTOR4( c_fStartX+c_fSharpH*2+c_fMid,   c_fStartY+c_fSharpH,    0.5f1.0f), 0xffff0000, },
                    };
                    
            // 豎著的segment
                    static CUSTOMVERTEX verticesSegmentVert[] =
                    {
                        
            /*0*/{ D3DXVECTOR4( c_fStartX+c_fSharpH,     c_fStartY,                    0.5f1.0f), 0xffff0000, }, 
                        
            /*1*/{ D3DXVECTOR4( c_fStartX+2*c_fSharpH,   c_fStartY+c_fSharpH,          0.5f1.0f), 0xffff0000, },
                        
            /*2*/{ D3DXVECTOR4( c_fStartX,               c_fStartY+c_fSharpH,          0.5f1.0f), 0xffff0000, },
                        
            /*3*/{ D3DXVECTOR4( c_fStartX+2*c_fSharpH,   c_fStartY+c_fSharpH+c_fMid,   0.5f1.0f), 0xffff0000, },
                        
            /*4*/{ D3DXVECTOR4( c_fStartX,               c_fStartY+c_fSharpH+c_fMid,   0.5f1.0f), 0xffff0000, },
                        
            /*5*/{ D3DXVECTOR4( c_fStartX+c_fSharpH,     c_fStartY+2*c_fSharpH+c_fMid, 0.5f1.0f), 0xffff0000, },
                    };

                    
            const static float c_fStartXOffset = 100.0f
                    
            const static float c_fOffsetSmall = 5.0f

                    
            // 畫個橫著的
                    DrawSegment(verticesSegmentHori, sizeof(verticesSegmentHori)
                        , D3DXVECTOR4(c_fStartXOffset, 
            0.0f0.0f0.0f));
                    
            // 再畫個橫著的
                    DrawSegment(verticesSegmentHori, sizeof(verticesSegmentHori)
                        , D3DXVECTOR4(c_fStartXOffset, c_fMid
            +2*c_fSharpH+2*c_fOffsetSmall, 0.0f0.0f));
                    
            // 又畫個橫著的
                    DrawSegment(verticesSegmentHori, sizeof(verticesSegmentHori)
                        , D3DXVECTOR4(c_fStartXOffset, c_fMid
            *2+4*c_fSharpH+4*c_fOffsetSmall, 0.0f0.0f));

                    
            // 左側豎著的
                    
            // 上
                    DrawSegment(verticesSegmentVert, sizeof(verticesSegmentVert)
                        , D3DXVECTOR4(c_fStartXOffset
            -c_fSharpH-c_fOffsetSmall, c_fSharpH+c_fOffsetSmall, 0.0f0.0f));

                    DrawSegment(verticesSegmentVert, 
            sizeof(verticesSegmentVert)
                        , D3DXVECTOR4(c_fStartXOffset
            -c_fSharpH-c_fOffsetSmall, c_fSharpH+c_fOffsetSmall+(2*c_fSharpH+c_fMid+2*c_fOffsetSmall), 0.0f0.0f));
                    
            // 右側豎著的
                    
            // 下
                    DrawSegment(verticesSegmentVert, sizeof(verticesSegmentVert)
                        , D3DXVECTOR4(c_fStartXOffset
            -c_fSharpH-c_fOffsetSmall+c_fMid+2*c_fSharpH+2*c_fOffsetSmall, c_fSharpH+c_fOffsetSmall, 0.0f0.0f));

                    DrawSegment(verticesSegmentVert, 
            sizeof(verticesSegmentVert)
                        , D3DXVECTOR4(c_fStartXOffset
            -c_fSharpH-c_fOffsetSmall+c_fMid+2*c_fSharpH+2*c_fOffsetSmall, c_fSharpH+c_fOffsetSmall+(2*c_fSharpH+c_fMid+2*c_fOffsetSmall), 0.0f0.0f));
                    g_pd3dDevice
            ->EndScene();
                }

                
            // Present the backbuffer contents to the display
                g_pd3dDevice->Present( NULL, NULL, NULL, NULL );
            }

            //-----------------------------------------------------------------------------
            // Name: MsgProc()
            // 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;
                }

                
            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, 0L0L,
                    GetModuleHandle(NULL), NULL, NULL, NULL, NULL,
                    
            "D3D Tutorial", NULL };
                RegisterClassEx( 
            &wc );

                
            // Create the application's window
                HWND hWnd = CreateWindow( "D3D Tutorial""DxDigitalClock",
                    WS_OVERLAPPEDWINDOW, 
            100100700700,
                    NULL, 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;
                    ZeroMemory( 
            &msg, sizeof(msg) );
                    
            while( msg.message!=WM_QUIT )
                    {
                        
            if( PeekMessage( &msg, NULL, 0U0U, PM_REMOVE ) )
                        {
                            TranslateMessage( 
            &msg );
                            DispatchMessage( 
            &msg );
                        }
                        
            else
                            Render();
                    }
                }
                UnregisterClass( 
            "D3D Tutorial", wc.hInstance );
                
            return 0;
            }






            posted on 2008-03-01 00:28 七星重劍 閱讀(674) 評論(2)  編輯 收藏 引用 所屬分類: PL--c/c++Game GraphicsIDE -- visual c++

            FeedBack:
            # re: 數字時鐘DigitalClock嘗試--續(1)完美的“8” 2008-03-01 02:20 逍遙劍客
            你真有毅力...  回復  更多評論
              
            # re: 數字時鐘DigitalClock嘗試--續(1)完美的“8” 2008-03-01 19:20 七星重劍
            @逍遙劍客
            有這個想法很久了。。。
            呵呵,實現方法很笨,持續重構...  回復  更多評論
              
            久久久久久久久久久免费精品| A级毛片无码久久精品免费| 久久久精品日本一区二区三区| 久久综合鬼色88久久精品综合自在自线噜噜 | 97精品依人久久久大香线蕉97| 人妻精品久久无码区| 品成人欧美大片久久国产欧美...| 一级a性色生活片久久无 | 国产一区二区精品久久凹凸| 久久久无码精品亚洲日韩京东传媒 | 精品久久久久香蕉网| 久久午夜综合久久| 久久99精品国产麻豆宅宅| 伊人久久大香线蕉无码麻豆| 久久综合综合久久狠狠狠97色88| 久久综合亚洲鲁鲁五月天| 国内精品久久久久久久影视麻豆| 久久精品水蜜桃av综合天堂 | 99热热久久这里只有精品68| 国产激情久久久久久熟女老人| 国产精品美女久久久久av爽| 国产精品久久久久无码av| 精品综合久久久久久97| 亚洲国产成人精品91久久久 | 久久中文字幕无码专区| 91精品国产综合久久四虎久久无码一级 | 亚洲欧美成人综合久久久| 久久这里只精品99re66| 久久99精品国产麻豆婷婷| 99久久成人18免费网站| 99久久99久久精品国产片果冻| 国产欧美一区二区久久| 成人妇女免费播放久久久| 久久国产色AV免费观看| 久久久久无码精品国产| 久久精品九九亚洲精品| av国内精品久久久久影院| 国产精品毛片久久久久久久| 久久久婷婷五月亚洲97号色| 久久99精品久久久久婷婷| 国产精品久久自在自线观看|