• <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

            最新隨筆

            最新評論

            閱讀排行榜

            評論排行榜

            術語:
            FVF (flexible vertex format)   靈活的頂點格式



            //-----------------------------------------------------------------------------
            // File: Vertices.cpp
            //
            // Desc: In this tutorial, we are rendering some vertices. This introduces the
            //       concept of the vertex buffer, a Direct3D object used to store
            //       vertices. Vertices can be defined any way we want by defining a
            //       custom structure and a custom FVF (flexible vertex format). In this
            //       tutorial, we are using vertices that are transformed (meaning they
            //       are already in 2D window coordinates) and lit (meaning we are not
            //       using Direct3D lighting, but are supplying our own colors).
            //
            // Copyright (c) Microsoft Corporation. All rights reserved.
            //-----------------------------------------------------------------------------
            #include <d3d9.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
            {
                FLOAT x, y, z, rhw; 
            // 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: InitVB()
            // Desc: Creates a vertex buffer and fills it with our vertices. The vertex
            //       buffer is basically just a chuck of memory that holds vertices. After
            //       creating it, we must Lock()/Unlock() it to fill it. For indices, D3D
            //       also uses index buffers. The special thing about vertex and index
            //       buffers is that they can be created in device memory, allowing some
            //       cards to process them in hardware, resulting in a dramatic
            //       performance gain.
            //-----------------------------------------------------------------------------
            HRESULT InitVB()
            {
                
            // Initialize three vertices for rendering a triangle 初始化要渲染的三角形的三個頂點
                CUSTOMVERTEX vertices[] =
                {
                    { 
            150.0f,  50.0f0.5f1.0f0xffff0000, }, // x, y, z, rhw, color
                    { 250.0f250.0f0.5f1.0f0xff00ff00, },
                    {  
            50.0f250.0f0.5f1.0f0xff00ffff, },
                };

                
            // Create the vertex buffer. 創建vertex buffer
                
            // Here we are allocating enough memory
                
            // (from the default pool) to hold all our 3 custom vertices. We also
                
            // specify the FVF, so the vertex buffer knows what data it contains.
                if( FAILED( g_pd3dDevice->CreateVertexBuffer( 3*sizeof(CUSTOMVERTEX),
                                                              
            0, D3DFVF_CUSTOMVERTEX,
                                                              D3DPOOL_DEFAULT, 
            &g_pVB, NULL ) ) )
                {
                    
            return E_FAIL;
                }

                
            // Now we fill the vertex buffer. 填充vertex buffer
                
            // To do this, we need to Lock() the VB to
                
            // gain access to the vertices. This mechanism is required becuase vertex
                
            // buffers may be in device memory.
                VOID* pVertices; // 輸出參數
                if( FAILED( g_pVB->Lock( 0sizeof(vertices), (void**)&pVertices, 0 ) ) )
                    
            return E_FAIL;
                memcpy( pVertices, vertices, 
            sizeof(vertices) );
                g_pVB
            ->Unlock();

                
            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();
            }




            //-----------------------------------------------------------------------------
            // 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() ) )
                {
                    
            // Draw the triangles in the vertex buffer. 畫vertex buffer中的三角形
                    
            // This is broken into a few steps. 

                    
            // We are passing the vertices down a "stream", so first we need
                    
            // to specify the source of that stream, which is our vertex buffer. 
                    
            // 我們正傳遞頂點到一個“流”里,這個流的源頭是vertex buffer
                    g_pd3dDevice->SetStreamSource( 0, g_pVB, 0sizeof(CUSTOMVERTEX) );

                    
            // Then we need to let D3D know what vertex shader to use.
                    
            // 讓D3D知道我們用什么vertex shader
                    
            // Full, custom vertex shaders are an advanced topic,
                    
            // but in most cases the vertex shader is just the FVF,
                    
            // so that D3D knows what type of vertices we are dealing with. 
                    g_pd3dDevice->SetFVF( D3DFVF_CUSTOMVERTEX );

                    
            // Finally, we call DrawPrimitive() which does the actual rendering
                    
            // of our geometry (in this case, just one triangle).
                    g_pd3dDevice->DrawPrimitive( D3DPT_TRIANGLELIST, 01 );

                    
            // End the scene
                    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""D3D Tutorial 02: Vertices",
                                          WS_OVERLAPPEDWINDOW, 
            100100300300,
                                          NULL, NULL, wc.hInstance, NULL );

                
            // Initialize Direct3D
                if( SUCCEEDED( InitD3D( hWnd ) ) )
                {
                    
            // Create the vertex buffer
                    if( SUCCEEDED( InitVB() ) )
                    {
                        
            // 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 2007-02-15 22:16 七星重劍 閱讀(970) 評論(0)  編輯 收藏 引用 所屬分類: Game Graphics
            久久久久久免费一区二区三区| 国产毛片欧美毛片久久久 | 久久精品国产亚洲av日韩| 久久久久久久国产免费看| 国产高潮国产高潮久久久91| 久久久久久a亚洲欧洲aⅴ | 大蕉久久伊人中文字幕| 久久r热这里有精品视频| av国内精品久久久久影院| 久久婷婷五月综合97色| 国内精品久久久久影院一蜜桃| 久久精品国产亚洲AV大全| 久久国产精品99久久久久久老狼 | 欧美国产成人久久精品| 亚洲性久久久影院| 中文字幕无码久久人妻| 中文字幕久久波多野结衣av| 伊人久久大香线蕉亚洲| 国产成人久久精品区一区二区| 大香网伊人久久综合网2020| 日韩亚洲国产综合久久久| 久久九九久精品国产免费直播| 久久免费的精品国产V∧| 91久久精品国产91性色也| 亚洲美日韩Av中文字幕无码久久久妻妇| 色天使久久综合网天天| 色综合久久无码中文字幕| 久久99精品国产99久久| 一本大道久久东京热无码AV | 91精品观看91久久久久久| 久久综合狠狠综合久久97色| 99久久国产综合精品女同图片| 精品综合久久久久久888蜜芽| 国产成人久久777777| 亚洲色大成网站WWW久久九九| 91久久精品91久久性色| 一级做a爰片久久毛片看看| 国产精品99久久99久久久| 日本久久中文字幕| 久久久久久狠狠丁香| 欧美噜噜久久久XXX|