游戏开发论坛

 找回密码
 立即注册
搜索
查看: 1044|回复: 0

VS2005编译问题,请高手帮帮!!

[复制链接]

2

主题

2

帖子

0

积分

新手上路

Rank: 1

积分
0
发表于 2009-3-20 18:08:00 | 显示全部楼层 |阅读模式
这条代码是显示一个三角形的代码,可以编译,但运行时卡住了,请高手们帮帮!!
这段代码是从<游戏开发技术VC.net>抄下来的,配置根据书上要求做的,但出问题啦???
现在还在自学中,请那位无私奉献高手帮帮,O(∩_∩)O谢谢
#include<d3d9.h>

LPDIRECT3D9 g_pD3d=NULL;
LPDIRECT3DDEVICE9 g_pd3dDevice=NULL;
LPDIRECT3DVERTEXBUFFER9 g_pd3dDevicebuffer=NULL;

struct CUSTOMVERTEX
{
        FLOAT x,y,z,rhm;
        DWORD colour;
};

#define D3DFVF_CUSTOMVERTEX (D3DFVF_XYZRHW|D3DFVF_DIFFUSE)
#define SafeRelease(pObject)  if(pObject!=NULL) {pObject->Release();  pObject=NULL;}

HRESULT InitialiseD3D(HWND hWnd)
{
        g_pD3d=Direct3DCreate9(D3D_SDK_VERSION);
        if (g_pD3d==NULL)
        {
                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.SwapEffect=D3DSWAPEFFECT_COPY;
        d3dpp.BackBufferFormat=d3ddm.Format;

        if (FAILED(g_pD3d->CreateDevice(D3DADAPTER_DEFAULT,D3DDEVTYPE_HAL,hWnd,D3DCREATE_SOFTWARE_VERTEXPROCESSING,&d3dpp,&g_pd3dDevice)))
        {
                return E_FAIL;
        }

        return S_OK;
}

HRESULT Intitaverbufer()
{
        VOID *pvertices;
        CUSTOMVERTEX CVER[]={
                {250.0f,350.0f,0.5f,1.0f,D3DCOLOR_XRGB(255,0,0),},
                {400.0f,350.0f,0.5f,1.0f,D3DCOLOR_XRGB(0,255,0),},
                {100.0f,350.0f,0.5f,1.0f,D3DCOLOR_XRGB(0,0,255),},
        };


        if (FAILED(g_pd3dDevice->CreateVertexBuffer(3*sizeof(CUSTOMVERTEX),0,D3DFVF_CUSTOMVERTEX,D3DPOOL_DEFAULT,&g_pd3dDevicebuffer,NULL)))
        {
                return E_FAIL;
        }

        if (FAILED(g_pd3dDevicebuffer->Lock(0,sizeof(CVER),(void * *)&pvertices,0)))
        {
                return E_FAIL;
        }

        memcpy(pvertices,CVER,sizeof(CVER));

        g_pd3dDevicebuffer->Unlock();

        return S_OK;
}

void Render()
{
        if(NULL==g_pd3dDevice)
                return;

        g_pd3dDevice->Clear(0,NULL,D3DCLEAR_TARGET,D3DCOLOR_XRGB(0,0,0),1.0f,0);


        g_pd3dDevice->BeginScene();

        g_pd3dDevice->SetStreamSource(0,g_pd3dDevicebuffer,0,sizeof(CUSTOMVERTEX));
        g_pd3dDevice->SetFVF(D3DFVF_CUSTOMVERTEX);
        g_pd3dDevice->DrawPrimitive(D3DPT_TRIANGLELIST,0,1);


        g_pd3dDevice->EndScene();
        g_pd3dDevice-&gtresent(NULL,NULL,NULL,NULL);

}
void Cleanup()
{
        SafeRelease(g_pd3dDevicebuffer);
        SafeRelease(g_pd3dDevice);
        SafeRelease(g_pD3d);

}
void GameLoop()
{
        MSG msg;
        BOOL fMessage;

        PeekMessage(&msg,NULL,0U,0U,PM_NOREMOVE);

        while (msg.message!=WM_QUIT)
        {
                fMessage=PeekMessage(&msg,NULL,0U,0U,PM_NOREMOVE);

                if (fMessage)
                {
                        TranslateMessage(&msg);
                        DispatchMessage(&msg);
                }
                else
                {
                        Render();
                }
        }
}


LRESULT WINAPI MsgPro(HWND hWnd,UINT msg,WPARAM wParam,LPARAM lParam)
{
        switch(msg)
        {
        case WM_DESTROY:
                   PostQuitMessage(0);
                   return 0;
                break;
        case WM_PAINT:
                switch(wParam)
                {
                case VK_ESCAPE:
                          DestroyWindow(hWnd);
                          return 0;
                        break;
                }
                break;
        }
        return DefWindowProc(hWnd,msg,wParam,lParam);
}

INT WINAPI WinMain(HINSTANCE hinstance,HINSTANCE ,LPSTR ,INT)
{
        WNDCLASSEX wc={sizeof(WNDCLASSEX),CS_CLASSDC,MsgPro,0L,0L,GetModuleHandle(NULL),NULL,NULL,NULL,NULL,"dx Project 2",NULL};

        RegisterClassEx(&wc);

        HWND hWnd=CreateWindow("dx Project 2","第一个3D项目",WS_OVERLAPPEDWINDOW,50,50,500,500,GetDesktopWindow(),NULL,wc.hInstance,NULL);


        if (SUCCEEDED(InitialiseD3D(hWnd)))
        {
                ShowWindow(hWnd,SW_SHOWDEFAULT);
                UpdateWindow(hWnd);


                if (SUCCEEDED(Intitaverbufer()))
                {
                        GameLoop();
                }


        }
        Cleanup();

        UnregisterClass("dx Project 2",wc.hInstance);
        return 0;
} [em4] [em4] [em4] [em4] [em4]
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

作品发布|文章投稿|广告合作|关于本站|游戏开发论坛 ( 闽ICP备17032699号-3 )

GMT+8, 2026-1-20 01:52

Powered by Discuz! X3.4

Copyright © 2001-2021, Tencent Cloud.

快速回复 返回顶部 返回列表