zoukankan      html  css  js  c++  java
  • D3D 点列练习

    画四个点在窗体。

    #pragma once
    
    #pragma comment(lib,"d3d9.lib")
    #pragma comment(lib,"d3dx9.lib")
    
    #include<d3d9.h>
    #include<d3dx9.h>
    
    //TODO: -1 custom vertex
    struct CUSTOMVERTEX
    {
    	float x;
    	float y;
    	float z;
    	float rhw;
    };
    
    #define D3DFVF_CUSTOMVERTEX D3DFVF_XYZRHW
    
    HRESULT InitD3D(HWND hWnd);
    void CleanUp();
    void Render();
    LRESULT CALLBACK MsgProc(HWND hWnd,UINT msg,WPARAM wParam,LPARAM lParam);
    HRESULT InitD3DVertexBuffer();
    
    //TODO: 0 declare d3d variables.
    LPDIRECT3D9 g_pd3d = NULL;
    LPDIRECT3DDEVICE9 g_pd3dDevice9 = NULL;
    LPDIRECT3DVERTEXBUFFER9 g_pd3dVB = NULL;
    
    //application entry point.
    INT WINAPI wWinMain(
    	HINSTANCE,
    	HINSTANCE,
    	LPWSTR,
    	INT)
    {
    	//initialize wnd class.
    	WNDCLASSEX wcex;
    	ZeroMemory(&wcex,sizeof(wcex));
    	wcex.cbSize=sizeof(wcex);
    	wcex.hInstance=GetModuleHandle(NULL);
    	wcex.lpfnWndProc=MsgProc;
    	wcex.lpszClassName=L"Self001";
    	wcex.style=CS_CLASSDC;
    
    	//register wnd class.
    	RegisterClassEx(&wcex);
    
    	//create window.
    	HWND hWnd=CreateWindowEx(
    		WS_EX_OVERLAPPEDWINDOW,
    		L"Self001",
    		L"Self001 Window",
    		WS_OVERLAPPEDWINDOW,
    		100,
    		100,
    		300,
    		300,
    		NULL,
    		NULL,
    		wcex.hInstance,
    		NULL);
    
    	//init d3d
    	if(SUCCEEDED(InitD3D(hWnd)))
    	{
    		//show window.
    		ShowWindow(hWnd,SW_SHOWDEFAULT);
    		UpdateWindow(hWnd);
    
    		//message loop.
    		MSG msg;
    		ZeroMemory(&msg,sizeof(msg));
    		while(msg.message != WM_QUIT)
    		{
    			if(PeekMessage(&msg,hWnd,0,0,PM_REMOVE))
    			{
    				TranslateMessage(&msg);
    				DispatchMessage(&msg);
    			}
    			else
    			{
    				Render();
    			}
    		}
    	}
    
    	//unregister wnd class.
    	UnregisterClass(L"Self001",wcex.hInstance);
    
    	return 0;
    }
    
    //init d3d.
    HRESULT InitD3D(HWND hWnd)
    {
    	//create d3d.
    	g_pd3d=Direct3DCreate9(D3D_SDK_VERSION);
    	if(g_pd3d == NULL)
    	{
    		return E_FAIL;
    	}
    
    	//initialize d3d present parameters.
    	D3DPRESENT_PARAMETERS d3dpp;
    	ZeroMemory(&d3dpp,sizeof(d3dpp));
    	d3dpp.Windowed=TRUE;
    	d3dpp.SwapEffect=D3DSWAPEFFECT_DISCARD;
    	d3dpp.BackBufferFormat=D3DFMT_UNKNOWN;
    
    	//create d3d device.
    	if(FAILED(g_pd3d->CreateDevice(
    		D3DADAPTER_DEFAULT,
    		D3DDEVTYPE_HAL,
    		hWnd,
    		D3DCREATE_SOFTWARE_VERTEXPROCESSING,
    		&d3dpp,
    		&g_pd3dDevice9)))
    	{
    		return E_FAIL;
    	}
    
    	//init vertex buffer.
    	if(FAILED(InitD3DVertexBuffer()))
    	{
    		return E_FAIL;
    	}
    
    	return S_OK;
    }
    
    //clean up d3d.
    void CleanUp()
    {
    	//TODO: 3 clean up d3d.
    	if(g_pd3dVB != NULL)
    	{
    		g_pd3dVB->Release();
    	}
    
    	//release device.
    	if(g_pd3dDevice9 != NULL)
    	{
    		g_pd3dDevice9->Release();
    	}
    
    	//release d3d.
    	if(g_pd3d != NULL)
    	{
    		g_pd3d->Release();
    	}
    }
    
    //render the scene.
    void Render()
    {
    	//clear target.
    	g_pd3dDevice9->Clear(
    		0,
    		NULL,
    		D3DCLEAR_TARGET,
    		D3DCOLOR_XRGB(0,0,0),
    		1.0f,
    		0);
    
    	//draw primitive.
    	if(SUCCEEDED(g_pd3dDevice9->BeginScene()))
    	{
    		//TODO: 2 render d3d.
    		g_pd3dDevice9->SetStreamSource(0,g_pd3dVB,0,sizeof(CUSTOMVERTEX));
    		g_pd3dDevice9->SetFVF(D3DFVF_CUSTOMVERTEX);
    		g_pd3dDevice9->DrawPrimitive(D3DPT_POINTLIST,0,4);
    
    		g_pd3dDevice9->EndScene();
    	}
    
    	//present sence.
    	g_pd3dDevice9->Present(NULL,NULL,NULL,NULL);
    }
    
    //window message handler.
    LRESULT CALLBACK MsgProc(HWND hWnd,UINT msg,WPARAM wParam,LPARAM lParam)
    {
    	switch(msg)
    	{
    	case WM_DESTROY:
    		CleanUp();
    		return 0L;
    	}
    
    	return DefWindowProc(hWnd,msg,wParam,lParam);
    }
    
    //init d3d vertex buffer.
    HRESULT InitD3DVertexBuffer()
    {
    	//TODO: 1 init vertex buffer data.
    	//create vertex data.
    	CUSTOMVERTEX vertices[4]=
    	{
    		{50.0f,50.0f,1.0f,1.0f},
    		{250.0f,50.0f,1.0f,1.0f},
    		{250.0f,250.0f,1.0f,1.0f},
    		{50.0f,250.0f,1.0f,1.0f}
    	};
    
    	//create vertex buffer.
    	if(FAILED(g_pd3dDevice9->CreateVertexBuffer(
    		sizeof(vertices),
    		0,
    		D3DFVF_CUSTOMVERTEX,
    		D3DPOOL_DEFAULT,
    		&g_pd3dVB,
    		NULL)))
    	{
    		return E_FAIL;
    	}
    
    	//fill vertex buffer.
    	void* pVertices=NULL;
    	if(FAILED(g_pd3dVB->Lock(0,sizeof(vertices),&pVertices,0)))
    	{
    		return E_FAIL;
    	}
    
    	memcpy(pVertices,vertices,sizeof(vertices));
    
    	g_pd3dVB->Unlock();
    
    	return S_OK;
    }
    

    1. 编程的路上练习还是偏多的,这里练习D3D 点列,六中图元中的第一个。

    2.我知道不是非常明显,只是四点像素点又能怎么明显呢。

  • 相关阅读:
    Hdu 5396 Expression (区间Dp)
    Lightoj 1174
    codeforces 570 D. Tree Requests (dfs)
    codeforces 570 E. Pig and Palindromes (DP)
    Hdu 5385 The path
    Hdu 5384 Danganronpa (AC自动机模板)
    Hdu 5372 Segment Game (树状数组)
    Hdu 5379 Mahjong tree (dfs + 组合数)
    Hdu 5371 Hotaru's problem (manacher+枚举)
    Face The Right Way---hdu3276(开关问题)
  • 原文地址:https://www.cnblogs.com/zhchoutai/p/7216944.html
Copyright © 2011-2022 走看看