DirectX9 实现一个渐变三角形
来源:互联网 发布:淘宝卖家开不了花呗 编辑:程序博客网 时间:2024/05/22 14:59
#include <Windows.h>
#include <d3d9.h>
LPDIRECT3D9 g_pD3D = NULL; // Direct3D对象指针
LPDIRECT3DDEVICE9 g_pd3dDevice = NULL; // Direct3D设备指针
LPDIRECT3DVERTEXBUFFER9 g_pVB = NULL; // 顶点缓冲区指针
typedef struct CustomVertex
{
FLOAT x,y,z,rhw;
DWORD color;
}CustomVertex;
HRESULT OnInitVectorList()
{
void* pVertices = NULL;
CustomVertex vertextList[] = {
{ 150.0f, 50.0f, 0.5f, 1.0f, 0xffff0000, }, //红色
{ 250.0f, 250.0f, 0.5f, 1.0f, 0xff00ff00, },//蓝色
{ 50.0f , 250.0f, 0.5f, 1.0f, 0xff00ffff, },//绿色
};
// 创建顶点缓冲区
if (FAILED(g_pd3dDevice->CreateVertexBuffer(3*sizeof(CustomVertex)
, 0
, D3DFVF_XYZRHW|D3DFVF_DIFFUSE
, D3DPOOL_DEFAULT
, &g_pVB
, NULL)))
{
return E_FAIL;
}
// 锁定缓冲区,写入数据
if (FAILED(g_pVB->Lock(0, sizeof(vertextList), &pVertices, 0)))
{
return E_FAIL;
}
memcpy(pVertices, vertextList, sizeof(vertextList));
g_pVB->Unlock();
return S_OK;
}
HRESULT InitD3D( HWND hWnd)
{
g_pD3D = Direct3DCreate9( D3D_SDK_VERSION );
if ( NULL == g_pD3D)
{
return E_FAIL;
}
// 查询显示模式
D3DDISPLAYMODE d3ddm;
if (FAILED(g_pD3D->GetAdapterDisplayMode(D3DADAPTER_DEFAULT, &d3ddm)))
{
return E_FAIL;
}
//设置传递给LPDIRECT3D9::CreateDevice的参数
D3DPRESENT_PARAMETERS d3dpp;
ZeroMemory(&d3dpp, sizeof(d3dpp));
d3dpp.Windowed = TRUE;
d3dpp.SwapEffect = D3DSWAPEFFECT_DISCARD;
d3dpp.BackBufferFormat = d3ddm.Format;
if (FAILED(g_pD3D->CreateDevice(D3DADAPTER_DEFAULT, D3DDEVTYPE_HAL, hWnd, D3DCREATE_SOFTWARE_VERTEXPROCESSING, &d3dpp, &g_pd3dDevice)))
{
return E_FAIL;
}
return OnInitVectorList();
return S_OK;
}
void CleanD3D()
{
if (NULL != g_pd3dDevice)
{
g_pd3dDevice->Release();
}
if (NULL != g_pD3D)
{
g_pD3D->Release();
}
}
//-----------------------------------------------------------------------------
// Name: OnRendering()
// Desc: progrma main loop, Draws the scene
//-----------------------------------------------------------------------------
VOID OnRenderingSingleTriangle()
{
g_pd3dDevice->SetStreamSource(0, g_pVB, 0, sizeof(CustomVertex));
g_pd3dDevice->SetFVF(D3DFVF_XYZRHW | D3DFVF_DIFFUSE);
g_pd3dDevice->DrawPrimitive(D3DPT_TRIANGLELIST, 0, 1);
}
//-----------------------------------------------------------------------------
// Name: Render()
// Desc: progrma main loop, Draws the scene
//-----------------------------------------------------------------------------
VOID Render()
{
if( NULL == g_pd3dDevice )
return;
// 将后缓冲区置为蓝色
g_pd3dDevice->Clear( 0, NULL, D3DCLEAR_TARGET,
D3DCOLOR_XRGB(0,0,255), 1.0f, 0 );
g_pd3dDevice->BeginScene();
// 这里加入图形绘制程序
OnRenderingSingleTriangle();
g_pd3dDevice->EndScene();
g_pd3dDevice->Present( NULL, NULL, NULL, NULL );
}
LRESULT WINAPI MsgProc(HWND hWnd, UINT msg, WPARAM wParam, LPARAM lParam )
{
switch( msg )
{
case WM_DESTROY:
PostQuitMessage( 0 );
return 0;
case WM_PAINT:
Render();
ValidateRect( hWnd, NULL );
return 0;
}
return DefWindowProc( hWnd, msg, wParam, lParam );
}
int WINAPI WinMain( __in HINSTANCE hInstance, __in_opt HINSTANCE hPrevInstance, __in_opt LPSTR lpCmdLine, __in int nShowCmd )
{
WNDCLASS wndclass = {0, MsgProc, 0, 0, hInstance, NULL, NULL, NULL, NULL, "Dx9Test"};
RegisterClass(&wndclass);
HWND hWnd = CreateWindow(wndclass.lpszClassName
,"Dx9Test:MainTitle"
,WS_OVERLAPPEDWINDOW
,CW_USEDEFAULT
,CW_USEDEFAULT
,800
,640
,GetDesktopWindow()
,NULL
,wndclass.hInstance,
NULL
);
if (SUCCEEDED( InitD3D(hWnd)))
{
ShowWindow(hWnd, SW_SHOWDEFAULT);
UpdateWindow(hWnd);
MSG msg;
while( GetMessage(&msg, NULL, 0, 0))
{
TranslateMessage(&msg);
DispatchMessage(&msg);
}
}
CleanD3D();
UnregisterClass(wndclass.lpszClassName, wndclass.hInstance);
return 0;
}
#include <d3d9.h>
LPDIRECT3D9 g_pD3D = NULL; // Direct3D对象指针
LPDIRECT3DDEVICE9 g_pd3dDevice = NULL; // Direct3D设备指针
LPDIRECT3DVERTEXBUFFER9 g_pVB = NULL; // 顶点缓冲区指针
typedef struct CustomVertex
{
FLOAT x,y,z,rhw;
DWORD color;
}CustomVertex;
HRESULT OnInitVectorList()
{
void* pVertices = NULL;
CustomVertex vertextList[] = {
{ 150.0f, 50.0f, 0.5f, 1.0f, 0xffff0000, }, //红色
{ 250.0f, 250.0f, 0.5f, 1.0f, 0xff00ff00, },//蓝色
{ 50.0f , 250.0f, 0.5f, 1.0f, 0xff00ffff, },//绿色
};
// 创建顶点缓冲区
if (FAILED(g_pd3dDevice->CreateVertexBuffer(3*sizeof(CustomVertex)
, 0
, D3DFVF_XYZRHW|D3DFVF_DIFFUSE
, D3DPOOL_DEFAULT
, &g_pVB
, NULL)))
{
return E_FAIL;
}
// 锁定缓冲区,写入数据
if (FAILED(g_pVB->Lock(0, sizeof(vertextList), &pVertices, 0)))
{
return E_FAIL;
}
memcpy(pVertices, vertextList, sizeof(vertextList));
g_pVB->Unlock();
return S_OK;
}
HRESULT InitD3D( HWND hWnd)
{
g_pD3D = Direct3DCreate9( D3D_SDK_VERSION );
if ( NULL == g_pD3D)
{
return E_FAIL;
}
// 查询显示模式
D3DDISPLAYMODE d3ddm;
if (FAILED(g_pD3D->GetAdapterDisplayMode(D3DADAPTER_DEFAULT, &d3ddm)))
{
return E_FAIL;
}
//设置传递给LPDIRECT3D9::CreateDevice的参数
D3DPRESENT_PARAMETERS d3dpp;
ZeroMemory(&d3dpp, sizeof(d3dpp));
d3dpp.Windowed = TRUE;
d3dpp.SwapEffect = D3DSWAPEFFECT_DISCARD;
d3dpp.BackBufferFormat = d3ddm.Format;
if (FAILED(g_pD3D->CreateDevice(D3DADAPTER_DEFAULT, D3DDEVTYPE_HAL, hWnd, D3DCREATE_SOFTWARE_VERTEXPROCESSING, &d3dpp, &g_pd3dDevice)))
{
return E_FAIL;
}
return OnInitVectorList();
return S_OK;
}
void CleanD3D()
{
if (NULL != g_pd3dDevice)
{
g_pd3dDevice->Release();
}
if (NULL != g_pD3D)
{
g_pD3D->Release();
}
}
//-----------------------------------------------------------------------------
// Name: OnRendering()
// Desc: progrma main loop, Draws the scene
//-----------------------------------------------------------------------------
VOID OnRenderingSingleTriangle()
{
g_pd3dDevice->SetStreamSource(0, g_pVB, 0, sizeof(CustomVertex));
g_pd3dDevice->SetFVF(D3DFVF_XYZRHW | D3DFVF_DIFFUSE);
g_pd3dDevice->DrawPrimitive(D3DPT_TRIANGLELIST, 0, 1);
}
//-----------------------------------------------------------------------------
// Name: Render()
// Desc: progrma main loop, Draws the scene
//-----------------------------------------------------------------------------
VOID Render()
{
if( NULL == g_pd3dDevice )
return;
// 将后缓冲区置为蓝色
g_pd3dDevice->Clear( 0, NULL, D3DCLEAR_TARGET,
D3DCOLOR_XRGB(0,0,255), 1.0f, 0 );
g_pd3dDevice->BeginScene();
// 这里加入图形绘制程序
OnRenderingSingleTriangle();
g_pd3dDevice->EndScene();
g_pd3dDevice->Present( NULL, NULL, NULL, NULL );
}
LRESULT WINAPI MsgProc(HWND hWnd, UINT msg, WPARAM wParam, LPARAM lParam )
{
switch( msg )
{
case WM_DESTROY:
PostQuitMessage( 0 );
return 0;
case WM_PAINT:
Render();
ValidateRect( hWnd, NULL );
return 0;
}
return DefWindowProc( hWnd, msg, wParam, lParam );
}
int WINAPI WinMain( __in HINSTANCE hInstance, __in_opt HINSTANCE hPrevInstance, __in_opt LPSTR lpCmdLine, __in int nShowCmd )
{
WNDCLASS wndclass = {0, MsgProc, 0, 0, hInstance, NULL, NULL, NULL, NULL, "Dx9Test"};
RegisterClass(&wndclass);
HWND hWnd = CreateWindow(wndclass.lpszClassName
,"Dx9Test:MainTitle"
,WS_OVERLAPPEDWINDOW
,CW_USEDEFAULT
,CW_USEDEFAULT
,800
,640
,GetDesktopWindow()
,NULL
,wndclass.hInstance,
NULL
);
if (SUCCEEDED( InitD3D(hWnd)))
{
ShowWindow(hWnd, SW_SHOWDEFAULT);
UpdateWindow(hWnd);
MSG msg;
while( GetMessage(&msg, NULL, 0, 0))
{
TranslateMessage(&msg);
DispatchMessage(&msg);
}
}
CleanD3D();
UnregisterClass(wndclass.lpszClassName, wndclass.hInstance);
return 0;
}
- DirectX9 实现一个渐变三角形
- DirectX9 三角形单元
- DirectX9 示例:绘制三角形
- 绘制颜色渐变三角形
- DIRECTX9实现卡马克卷轴
- android画渐变色三角形
- d3d实现一个旋转的三角形
- java Swing画弧线三角形矩形渐变旋转实现实例教程演示demo付源代码
- iOS学习笔记----实现一个带有渐变的UIView
- iOS实现一个颜色渐变的弧形进度条
- iOS实现一个颜色渐变的弧形进度条
- iOS实现一个颜色渐变的弧形进度条
- iOS实现一个颜色渐变的弧形进度条
- iOS实现一个颜色渐变的弧形进度条
- iOS实现一个颜色渐变的弧形进度条
- iOS实现一个颜色渐变的弧形进度条
- iOS实现一个颜色渐变的弧形进度条
- iOS实现一个颜色渐变的弧形进度条
- 调整viewstate位置
- 怎样花两年时间去面试一个人-----刘未鹏
- 产品管理工作的文档管理
- Objective C 中NSNumber的引用计数
- ConcurrentLinkedQueue原理(上)
- DirectX9 实现一个渐变三角形
- 通过Enumeration和Iterator遍历Hashtable的效率分析
- ASCII码对应表chr(9)、chr(10)、chr(13)、chr(32)、chr(34)、chr(39)、chr(..
- Javascript decodeURIComponent Function
- Exchanger: 两个线程 间 交换 数据
- jdbc
- 解决Ubuntu删除/升级Python无法进入桌面以及控制台乱码问题
- 移动手机消息推送机制
- Sqlite3支持的数据类型 日期函数 Sqlite3 函数