• <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年6月>
            272829303112
            3456789
            10111213141516
            17181920212223
            24252627282930
            1234567


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

            常用鏈接

            留言簿(94)

            隨筆分類(649)

            隨筆檔案(505)

            相冊

            BCB

            Crytek

            • crymod
            • Crytek's Offical Modding Portal

            Game Industry

            OGRE

            other

            Programmers

            Qt

            WOW Stuff

            搜索

            •  

            積分與排名

            • 積分 - 911297
            • 排名 - 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 七星重劍
            @逍遙劍客
            有這個想法很久了。。。
            呵呵,實現方法很笨,持續重構...  回復  更多評論
              
            久久涩综合| 伊人久久综合精品无码AV专区| 噜噜噜色噜噜噜久久| 欧美午夜A∨大片久久| 国内精品久久久久影院薰衣草| 久久久久久久久66精品片| 久久夜色精品国产欧美乱| 国内精品久久久久伊人av| 青青草原综合久久| 久久夜色撩人精品国产小说| 久久久久亚洲av成人无码电影| 久久无码中文字幕东京热| 2020最新久久久视精品爱| 久久夜色精品国产亚洲| 国产精品久久99| 久久精品天天中文字幕人妻| 久久精品国产亚洲AV忘忧草18| 97精品久久天干天天天按摩| 久久久久一本毛久久久| 99麻豆久久久国产精品免费| 国产精品久久久久久久app| 精品多毛少妇人妻AV免费久久| 久久精品成人免费看| 久久天天躁狠狠躁夜夜96流白浆| 99久久伊人精品综合观看| 色综合色天天久久婷婷基地| 亚洲综合熟女久久久30p| 久久伊人色| 日日狠狠久久偷偷色综合0| 久久精品国产色蜜蜜麻豆| 久久夜色撩人精品国产| 国产精品成人无码久久久久久| 九九精品99久久久香蕉| 色综合久久无码五十路人妻| 国内精品伊人久久久久AV影院| 影音先锋女人AV鲁色资源网久久| 亚洲&#228;v永久无码精品天堂久久 | 久久久久噜噜噜亚洲熟女综合| 99久久久久| 久久久久亚洲AV成人网人人软件| 日本精品久久久久中文字幕8|