为了正常的体验网站,请在浏览器设置里面开启Javascript功能!

3D中2D(用C++中原来所设顶点色)

2017-10-30 11页 doc 33KB 11阅读

用户头像

is_321575

暂无简介

举报
3D中2D(用C++中原来所设顶点色)3D中2D(用C++中原来所设顶点色) 3D中2D(用C++中原来所设顶点色) 3D中2D(用C++中原来所设顶点色) hlsl.fx //(2_1)3D中2D(用原来色) // ------------------------------------------------------------- //顶点输出信息 // ------------------------------------------------------------- struct VS_OUTPUT { float4 Pos: ...
3D中2D(用C++中原来所设顶点色)
3D中2D(用C++中原来所设顶点色) 3D中2D(用C++中原来所设顶点色) 3D中2D(用C++中原来所设顶点色) hlsl.fx //(2_1)3D中2D(用原来色) // ------------------------------------------------------------- //顶点输出信息 // ------------------------------------------------------------- struct VS_OUTPUT { float4 Pos: POSITION; float4 Dif: COLOR0; }; // ------------------------------------------------------------- // 顶点渲染指令段 // ------------------------------------------------------------- VS_OUTPUT VS( float4 Pos: POSITION , float4 Color: COLOR0) { VS_OUTPUT Out = (VS_OUTPUT) 0; Out.Pos = Pos; Out.Dif = Color; return Out; } // ------------------------------------------------------------- // 像素渲染指令段 // ------------------------------------------------------------- float4 PS(VS_OUTPUT In) : COLOR { return In.Dif; } // ------------------------------------------------------------- // 效果指令段 // ------------------------------------------------------------- technique TShader { pass P0 { VertexShader = compile vs_1_1 VS(); PixelShader = compile ps_1_1 PS(); } } C++代码: //----------------------------------------------------------------------------- // (2_1)3D中2D(用原来色) //----------------------------------------------------------------------------- #include #include #include //----------------------------------------------------------------------------- // 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 LPD3DXEFFECT g_pEffect = NULL; // 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 if( FAILED(D3DXCreateEffectFromFile( g_pd3dDevice, "hlsl.fx", NULL, NULL, D3DXSHADER_DEBUG, NULL, &g_pEffect, NULL ) ) ) { return E_FAIL; } if( g_pEffect != NULL ) g_pEffect->OnResetDevice(); 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.0f, 0.5f, 1.0f, 0xffff0000, }, // x, y, z, rhw, color { 250.0f, 250.0f, 0.5f, 1.0f, 0xff00ff00, }, { 50.0f, 250.0f, 0.5f, 1.0f, 0xff00ffff, }, }; // Create the 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. 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( 0, sizeof(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_pEffect != NULL ) g_pEffect->Release(); 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.0f, 0 ); // Begin the scene if( SUCCEEDED( g_pd3dDevice->BeginScene() ) ) { if( g_pEffect != NULL ) { D3DXHANDLE hTechnique = g_pEffect->GetTechniqueByName( "TShader" ); UINT nPasses; UINT iPass; g_pEffect->SetTechnique( hTechnique ); g_pEffect->Begin( &nPasses, 0 ); for(iPass = 0; iPass < nPasses; iPass ++ ) { g_pEffect->BeginPass( iPass ); } g_pd3dDevice->SetStreamSource( 0, g_pVB, 0, sizeof(CUSTOMVERTEX) ); g_pd3dDevice->SetFVF( D3DFVF_CUSTOMVERTEX ); g_pd3dDevice->DrawPrimitive( D3DPT_TRIANGLELIST, 0, 1 ); g_pEffect->EndPass(); g_pEffect->End(); } 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, 0L, 0L, GetModuleHandle(NULL), NULL, NULL, NULL, NULL, "D3D Tutorial", NULL }; RegisterClassEx( &wc ); // Create the application's window HWND hWnd = CreateWindow( "D3D Tutorial", "HLSL2_1", WS_OVERLAPPEDWINDOW, 100, 100, 300, 300, GetDesktopWindow(), 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, 0U, 0U, PM_REMOVE ) ) { TranslateMessage( &msg ); DispatchMessage( &msg ); } else { Render(); } } } } UnregisterClass( "D3D Tutorial", wc.hInstance ); return 0; }
/
本文档为【3D中2D&#40;用C++中原来所设顶点色&#41;】,请使用软件OFFICE或WPS软件打开。作品中的文字与图均可以修改和编辑, 图片更改请在作品中右键图片并更换,文字修改请直接点击文字进行修改,也可以新增和删除文档中的内容。
[版权声明] 本站所有资料为用户分享产生,若发现您的权利被侵害,请联系客服邮件isharekefu@iask.cn,我们尽快处理。 本作品所展示的图片、画像、字体、音乐的版权可能需版权方额外授权,请谨慎使用。 网站提供的党政主题相关内容(国旗、国徽、党徽..)目的在于配合国家政策宣传,仅限个人学习分享使用,禁止用于任何广告和商用目的。

历史搜索

    清空历史搜索