今天运气还好!
在网上碰到了一位编游戏的前辈,也是郑州市的,然后我请教了他很多问题,也终于知道了买游戏开发书籍的地方,原来是文化路上的金宇书店和文化路上农业大学对面书店及工大对面秋实书店都有卖的。
我想回来买本<<Windows游戏编程大师技>>看看!
今天能继续坚持把blog写完也算我的进步,以前从来都是缺乏耐心的。
我yaomingjie一定要坚持!!I leak encourage!!
因为三角形是3d图形的最小单位,所以如果会画三角形,以后在处理其他图形时就方便了。
看了一个下午,终于画出了一个正方形。
#include "d3d8.h"
LPDIRECT3D8 g_pD3D = NULL;
LPDIRECT3DDEVICE8 g_pD3Dev = NULL;
//定义顶点缓冲区
LPDIRECT3DVERTEXBUFFER8 g_pVertexBuffer;
//定于一个三角形的结构,包括三个点和颜色
struct CUSTOMVERTEX
{
FLOAT x,y,z,rhw;
DWORD color;
};
//DX原有的两个标识D3DFVF_XYZRHW和D3DFVF_DIFFUSE(已转换顶点和扩散颜色)
#define D3DFVF_CUSTOMVERTEX (D3DFVF_XYZRHW|D3DFVF_DIFFUSE)
//定义了一个宏函数方便的释放COM对象
#define SafeRelease(pObject) if (pObject != NULL) {pObject->Release(); pObject = NULL;}
HRESULT InitiD3D(HWND hWnd)
{
g_pD3D = Direct3DCreate8(D3D_SDK_VERSION);
if(g_pD3D == NULL)
{
return E_FAIL;
}
D3DDISPLAYMODE d3ddm;
if(FAILED(g_pD3D->GetAdapterDisplayMode(D3DADAPTER_DEFAULT, &d3ddm)))
{
return E_FAIL;
}
//创建一个结构保存对的device的设置
D3DPRESENT_PARAMETERS d3dpp;
ZeroMemory(&d3dpp, sizeof(d3dpp));
//初始化相关参数
d3dpp.Windowed = TRUE;
d3dpp.SwapEffect = D3DSWAPEFFECT_COPY_VSYNC;
d3dpp.BackBufferFormat = d3ddm.Format;
//创建一个3d设备
if(FAILED(g_pD3D->CreateDevice(D3DADAPTER_DEFAULT, D3DDEVTYPE_HAL, hWnd,
D3DCREATE_SOFTWARE_VERTEXPROCESSING, &d3dpp, &g_pD3Dev)))
{
return E_FAIL;
}
return S_OK;
}
//初始化三角形属性的函数(FVF)
HRESULT InitVertexBuffer()
{
VOID *pVertices;
//三角形各个顶点及其初始颜色,画出来的图形会根据初始颜色过渡性的填充三角形
CUSTOMVERTEX cvVertices[] =
{
{250.0f, 100.0f, 0.5f, 1.0f, D3DCOLOR_XRGB(255, 0, 0),}, //Vertex 1 - Red (250, 100)
{400.0f, 350.0f, 0.5f, 1.0f, D3DCOLOR_XRGB(0, 255, 0),}, //Vertex 2 - Green (400, 350)
{100.0f, 350.0f, 0.5f, 1.0f, D3DCOLOR_XRGB(0, 0, 255),},//Vertex 3 - Blue (100, 350)
};
//创建顶点缓冲,并获得指向顶点缓冲的指针g_pVertexBuffer,有了顶点缓冲可方便的对图形进行渲染,剪裁等处理
if (FAILED(g_pD3Dev->CreateVertexBuffer(3*sizeof(CUSTOMVERTEX),0,D3DFVF_CUSTOMVERTEX,
D3DPOOL_DEFAULT,&g_pVertexBuffer)))
{
return E_FAIL;
}
//获得并锁定缓冲区中的数据
if (FAILED(g_pVertexBuffer->Lock(0,sizeof(cvVertices),(BYTE**)&pVertices,0)))
{
return E_FAIL;
}
//把CUSTOMVERTEX中定义的三角形属性值拷到pVertices中..
memcpy(pVertices, cvVertices, sizeof(cvVertices));
g_pVertexBuffer->Unlock();
return S_OK;
}
void render()
{
if (g_pD3Dev == NULL)
{
return ;
}
g_pD3Dev->Clear(0,NULL,D3DCLEAR_TARGET,D3DCOLOR_XRGB(0,0,0),1.0f,0);
g_pD3Dev->BeginScene();
//用在InitVertexBuffer函数中捆绑了顶点缓冲到设备数据流中
g_pD3Dev->SetStreamSource(0,g_pVertexBuffer,sizeof(CUSTOMVERTEX));
//设置着色方法
g_pD3Dev->SetVertexShader(D3DFVF_CUSTOMVERTEX);
//参数含义第一个为画的类型,第二个是选择哪个点做三角形的定点,第三个是画几个三角形,Primitives为原始的意思
g_pD3Dev->DrawPrimitive(D3DPT_TRIANGLELIST , 0, 1);
g_pD3Dev->EndScene();
g_pD3Dev->Present(NULL,NULL,NULL,NULL);
}
void CleanUp()
{
SafeRelease(g_pD3Dev);
SafeRelease(g_pD3D);
SafeRelease(g_pVertexBuffer);
}
void GameLoop()
{
MSG msg;
BOOL fMessage;
PeekMessage(&msg,NULL,0U,0U,PM_NOREMOVE);//PM_NOREMOVE表示PeekMessage消息处理后不从队列里删去
while (msg.message != WM_QUIT)
{
fMessage = PeekMessage(&msg,NULL,0U,0U,PM_REMOVE);
if (fMessage)
{
TranslateMessage(&msg);
DispatchMessage(&msg);
}
else
{
render();
}
}
}
LRESULT WINAPI WinProc(HWND hWnd,UINT msg,WPARAM wParam,LPARAM lParam)
{
switch(msg)
{
case WM_DESTROY:
PostQuitMessage(0);
return 0;
break;
case WM_KEYUP:
switch(wParam)
{
case VK_ESCAPE:
DestroyWindow(hWnd);
return 0;
break;
}
break;
}
return DefWindowProc(hWnd,msg,wParam,lParam);
}
//Application entry point
INT WINAPI WinMain(HINSTANCE hInst, HINSTANCE, LPSTR, INT)
{
//Register the window class
WNDCLASSEX wc = {sizeof(WNDCLASSEX), CS_CLASSDC, WinProc, 0L, 0L,
GetModuleHandle(NULL), NULL, NULL, NULL, NULL,
"DX Project 2", NULL};
RegisterClassEx(&wc);
//Create the application's window
HWND hWnd = CreateWindow("DX Project 2", "Study DirectX",
WS_OVERLAPPEDWINDOW, 50, 50, 500, 500,
NULL, NULL, wc.hInstance, NULL);
//Initialize Direct3D
if(SUCCEEDED(InitiD3D(hWnd)))
{
//Show our window
ShowWindow(hWnd, SW_SHOWDEFAULT);
UpdateWindow(hWnd);
//Initialize Vertex Buffer
if(SUCCEEDED(InitVertexBuffer()))
{
//Start game running: Enter the game loop
GameLoop();
}
}
CleanUp();
UnregisterClass("DX Project 2", wc.hInstance);
return 0;
}
程序运行后是一个带有渐变色的三角形, ,还算好
明天准备好了花一个3D的图形。
好困阿,现在在公司搞程序的叔叔们头发都白了,他们告诫我
25岁以后就不要开发程序了,呵呵,我还有5年时间阿!
我会变得很强的!!
在网上碰到了一位编游戏的前辈,也是郑州市的,然后我请教了他很多问题,也终于知道了买游戏开发书籍的地方,原来是文化路上的金宇书店和文化路上农业大学对面书店及工大对面秋实书店都有卖的。
我想回来买本<<Windows游戏编程大师技>>看看!
今天能继续坚持把blog写完也算我的进步,以前从来都是缺乏耐心的。
我yaomingjie一定要坚持!!I leak encourage!!
因为三角形是3d图形的最小单位,所以如果会画三角形,以后在处理其他图形时就方便了。
看了一个下午,终于画出了一个正方形。
#include "d3d8.h"
LPDIRECT3D8 g_pD3D = NULL;
LPDIRECT3DDEVICE8 g_pD3Dev = NULL;
//定义顶点缓冲区
LPDIRECT3DVERTEXBUFFER8 g_pVertexBuffer;
//定于一个三角形的结构,包括三个点和颜色
struct CUSTOMVERTEX
{
FLOAT x,y,z,rhw;
DWORD color;
};
//DX原有的两个标识D3DFVF_XYZRHW和D3DFVF_DIFFUSE(已转换顶点和扩散颜色)
#define D3DFVF_CUSTOMVERTEX (D3DFVF_XYZRHW|D3DFVF_DIFFUSE)
//定义了一个宏函数方便的释放COM对象
#define SafeRelease(pObject) if (pObject != NULL) {pObject->Release(); pObject = NULL;}
HRESULT InitiD3D(HWND hWnd)
{
g_pD3D = Direct3DCreate8(D3D_SDK_VERSION);
if(g_pD3D == NULL)
{
return E_FAIL;
}
D3DDISPLAYMODE d3ddm;
if(FAILED(g_pD3D->GetAdapterDisplayMode(D3DADAPTER_DEFAULT, &d3ddm)))
{
return E_FAIL;
}
//创建一个结构保存对的device的设置
D3DPRESENT_PARAMETERS d3dpp;
ZeroMemory(&d3dpp, sizeof(d3dpp));
//初始化相关参数
d3dpp.Windowed = TRUE;
d3dpp.SwapEffect = D3DSWAPEFFECT_COPY_VSYNC;
d3dpp.BackBufferFormat = d3ddm.Format;
//创建一个3d设备
if(FAILED(g_pD3D->CreateDevice(D3DADAPTER_DEFAULT, D3DDEVTYPE_HAL, hWnd,
D3DCREATE_SOFTWARE_VERTEXPROCESSING, &d3dpp, &g_pD3Dev)))
{
return E_FAIL;
}
return S_OK;
}
//初始化三角形属性的函数(FVF)
HRESULT InitVertexBuffer()
{
VOID *pVertices;
//三角形各个顶点及其初始颜色,画出来的图形会根据初始颜色过渡性的填充三角形
CUSTOMVERTEX cvVertices[] =
{
{250.0f, 100.0f, 0.5f, 1.0f, D3DCOLOR_XRGB(255, 0, 0),}, //Vertex 1 - Red (250, 100)
{400.0f, 350.0f, 0.5f, 1.0f, D3DCOLOR_XRGB(0, 255, 0),}, //Vertex 2 - Green (400, 350)
{100.0f, 350.0f, 0.5f, 1.0f, D3DCOLOR_XRGB(0, 0, 255),},//Vertex 3 - Blue (100, 350)
};
//创建顶点缓冲,并获得指向顶点缓冲的指针g_pVertexBuffer,有了顶点缓冲可方便的对图形进行渲染,剪裁等处理
if (FAILED(g_pD3Dev->CreateVertexBuffer(3*sizeof(CUSTOMVERTEX),0,D3DFVF_CUSTOMVERTEX,
D3DPOOL_DEFAULT,&g_pVertexBuffer)))
{
return E_FAIL;
}
//获得并锁定缓冲区中的数据
if (FAILED(g_pVertexBuffer->Lock(0,sizeof(cvVertices),(BYTE**)&pVertices,0)))
{
return E_FAIL;
}
//把CUSTOMVERTEX中定义的三角形属性值拷到pVertices中..
memcpy(pVertices, cvVertices, sizeof(cvVertices));
g_pVertexBuffer->Unlock();
return S_OK;
}
void render()
{
if (g_pD3Dev == NULL)
{
return ;
}
g_pD3Dev->Clear(0,NULL,D3DCLEAR_TARGET,D3DCOLOR_XRGB(0,0,0),1.0f,0);
g_pD3Dev->BeginScene();
//用在InitVertexBuffer函数中捆绑了顶点缓冲到设备数据流中
g_pD3Dev->SetStreamSource(0,g_pVertexBuffer,sizeof(CUSTOMVERTEX));
//设置着色方法
g_pD3Dev->SetVertexShader(D3DFVF_CUSTOMVERTEX);
//参数含义第一个为画的类型,第二个是选择哪个点做三角形的定点,第三个是画几个三角形,Primitives为原始的意思
g_pD3Dev->DrawPrimitive(D3DPT_TRIANGLELIST , 0, 1);
g_pD3Dev->EndScene();
g_pD3Dev->Present(NULL,NULL,NULL,NULL);
}
void CleanUp()
{
SafeRelease(g_pD3Dev);
SafeRelease(g_pD3D);
SafeRelease(g_pVertexBuffer);
}
void GameLoop()
{
MSG msg;
BOOL fMessage;
PeekMessage(&msg,NULL,0U,0U,PM_NOREMOVE);//PM_NOREMOVE表示PeekMessage消息处理后不从队列里删去
while (msg.message != WM_QUIT)
{
fMessage = PeekMessage(&msg,NULL,0U,0U,PM_REMOVE);
if (fMessage)
{
TranslateMessage(&msg);
DispatchMessage(&msg);
}
else
{
render();
}
}
}
LRESULT WINAPI WinProc(HWND hWnd,UINT msg,WPARAM wParam,LPARAM lParam)
{
switch(msg)
{
case WM_DESTROY:
PostQuitMessage(0);
return 0;
break;
case WM_KEYUP:
switch(wParam)
{
case VK_ESCAPE:
DestroyWindow(hWnd);
return 0;
break;
}
break;
}
return DefWindowProc(hWnd,msg,wParam,lParam);
}
//Application entry point
INT WINAPI WinMain(HINSTANCE hInst, HINSTANCE, LPSTR, INT)
{
//Register the window class
WNDCLASSEX wc = {sizeof(WNDCLASSEX), CS_CLASSDC, WinProc, 0L, 0L,
GetModuleHandle(NULL), NULL, NULL, NULL, NULL,
"DX Project 2", NULL};
RegisterClassEx(&wc);
//Create the application's window
HWND hWnd = CreateWindow("DX Project 2", "Study DirectX",
WS_OVERLAPPEDWINDOW, 50, 50, 500, 500,
NULL, NULL, wc.hInstance, NULL);
//Initialize Direct3D
if(SUCCEEDED(InitiD3D(hWnd)))
{
//Show our window
ShowWindow(hWnd, SW_SHOWDEFAULT);
UpdateWindow(hWnd);
//Initialize Vertex Buffer
if(SUCCEEDED(InitVertexBuffer()))
{
//Start game running: Enter the game loop
GameLoop();
}
}
CleanUp();
UnregisterClass("DX Project 2", wc.hInstance);
return 0;
}
程序运行后是一个带有渐变色的三角形, ,还算好
明天准备好了花一个3D的图形。
好困阿,现在在公司搞程序的叔叔们头发都白了,他们告诫我
25岁以后就不要开发程序了,呵呵,我还有5年时间阿!
我会变得很强的!!