|
|
新手来的~按书上的教程做的,可有个错误解决不了~望那位帮小的一下~!
想渲染一个三角形~!运行后说:error C2065: 'g_Vertices' : undeclared identifier!
谢谢了~!!虽然有书教~可编程这东西还不是一般的难啊~~! !以下是我的代码!
#include<d3d8.h>
#define MY_WINCLASS_NAME "Direct3D"
LPDIRECT3D8 g_pD3D=NULL;
LPDIRECT3DDEVICE8 g_pd3dDevice=NULL;
LPDIRECT3DVERTEXBUFFER8 g_pVB=NULL;
////------------初始化D3D设备--------------
HRESULT InitD3D(HWND hWnd)
{
if(NULL==(g_pD3D=Direct3DCreate8(D3D_SDK_VERSION)))
return E_FAIL;
//取得目前桌面的显示模式
D3DDISPLAYMODE d3ddm;
if(FAILED(g_pD3D->GetAdapterDisplayMode(D3DADAPTER_DEFAULT,&d3ddm)))
return E_FAIL;
D3DPRESENT_PARAMETERS d3dpp;
ZeroMemory(&d3dpp,sizeof(d3dpp));
d3dpp.Windowed=TRUE;
d3dpp.Windowed=FALSE; //是否为窗口模式
d3dpp.SwapEffect=D3DSWAPEFFECT_DISCARD;
d3dpp.BackBufferFormat=d3ddm.Format;
d3dpp.BackBufferCount=1;
d3dpp.BackBufferWidth =d3ddm.Width;
d3dpp.BackBufferHeight =d3ddm.Height;
d3dpp.hDeviceWindow=hWnd; //设置设备展示表面的输出窗口
if(FAILED(g_pD3D->CreateDevice(D3DADAPTER_DEFAULT,
D3DDEVTYPE_HAL,hWnd,
D3DCREATE_SOFTWARE_VERTEXPROCESSING,
&d3dpp,&g_pd3dDevice)))
{
return E_FAIL;
}
return S_OK;
}
////-----------------清除D3D对象----------------
VOID Cleanup()
{
if(g_pd3dDevice!=NULL)
g_pd3dDevice->Release();
if(g_pD3D!=NULL)
g_pD3D->Release();
return;
}
////--------------windows消息处理------------------
LRESULT WINAPI MsgProc(HWND hWnd,UINT msg,WPARAM wParam,LPARAM lParam)
{
switch(msg)
{
case WM_DESTROY:
PostQuitMessage(0);
return 0;
case WM_PAINT:
g_pd3dDevice->Clear(0,NULL,D3DCLEAR_TARGET,D3DCOLOR_XRGB(255,255,255),1.0f,0);
g_pd3dDevice-> resent(NULL,NULL,NULL,NULL);
ValidateRect(hWnd,NULL);
return 0;
}
return DefWindowProc(hWnd,msg,wParam,lParam);
}
/////---------------建立D3D绘图环境-----------
int APIENTRY WinMain(HINSTANCE hInstance,
HINSTANCE hPrevInstance,
LPSTR lpCmdLine,int nCmdShow)
{
WNDCLASSEX wc={sizeof(WNDCLASSEX),CS_CLASSDC,MsgProc,0L,0L,
GetModuleHandle(NULL),NULL,NULL,NULL,NULL,MY_WINCLASS_NAME,NULL};
RegisterClassEx(&wc);
HWND hWnd=CreateWindow(MY_WINCLASS_NAME,"星 BOX",
WS_OVERLAPPEDWINDOW,100,100,400,300,
GetDesktopWindow(),NULL,wc.hInstance,NULL);
//初始化Direct3D
if(SUCCEEDED(InitD3D(hWnd)))
{
//显示窗口
ShowWindow(hWnd,SW_SHOWDEFAULT);
UpdateWindow(hWnd);
//接受windows消息
MSG msg;
while(GetMessage(&msg,NULL,0,0))
{
TranslateMessage(&msg);
DispatchMessage(&msg);
}
}
//清除DirectX对象
Cleanup();
UnregisterClass(MY_WINCLASS_NAME, wc.hInstance);
return 0;
}
struct CUSTOMVERTEX
{
FLOAT x,y,z,rhw; //顶点位置
DWORD color; //顶点颜色值
};
#define D3DFVF_CUSTOMVERTEX (D3DFVF_XYZ|D3DFVF_DIFFUSE)//@@@@@@@@@@@
HRESULT InitialiseVertexBuffer()
{
//设置三个顶点的数据
CUSTOMVERTEX g_Vertices[]=
{
{-1.0f,-1.0f,0.0f,1.0f,0xffff0000,},
{1.0f,-1.0f,0.0f,1.0f,0xff0000ff,},
{0.0f,1.0f,0.0f,1.0f,0xffffffff,},
};
//建立顶点缓冲区
if(FAILED(g_pd3dDevice->CreateVertexBuffer(3*sizeof(CUSTOMVERTEX),
0,D3DFVF_CUSTOMVERTEX,
D3DPOOL_DEFAULT,&g_pVB)))
{
return E_FAIL;
}
VOID*pVertices;
//锁住顶点缓冲区
if(FAILED(g_pVB->Lock(0,sizeof(g_Vertices),(BYTE**)&pVertices,0)))
return E_FAIL;
//将顶点数据填入顶点缓冲区
memcpy(pVertices,g_Vertices,sizeof(g_Vertices));
g_pVB->Unlock();
return S_OK;
}
void RenderScene()
{
//将后缓冲区清除设为黑色
g_pd3dDevice->Clear(0,NULL,D3DCLEAR_TARGET,
D3DCOLOR_XRGB(0,0,255),1.0f,0);
//开始绘制场景
g_pd3dDevice->BeginScene();
//设置D3DDEVICE8的着色方式
g_pd3dDevice->SetVertexShader(D3DFVF_CUSTOMVERTEX);
g_pd3dDevice->DrawPrimitiveUP(D3DPT_TRIANGLELIST,1,g_Vertices,sizeof(CUSTOMVERTEX));
//结束绘制场景
g_pd3dDevice->EndScene();
//进行换页
g_pd3dDevice->Present(NULL,NULL,NULL,NULL);
return;
} |
|