游戏开发论坛

 找回密码
 立即注册
搜索
查看: 3297|回复: 2

高手帮个忙,这是我第一次写的DX,只出窗口,没画图形

[复制链接]

3

主题

8

帖子

8

积分

新手上路

Rank: 1

积分
8
发表于 2007-11-30 13:11:00 | 显示全部楼层 |阅读模式
以下是我写的,不知道出什么情况了

#include<windows.h>
#include<d3d9.h>
#include <d3dx9.h>

#pragma comment(lib, "d3d9.lib" )
#pragma comment( lib, "d3dx9.lib")


LPDIRECT3D9 g_pD3D = NULL;//D3D指针
LPDIRECT3DDEVICE9 g_pD3DDevice = NULL;//D3D设备指针
LPDIRECT3DVERTEXBUFFER9 g_pVertexBuffer=NULL;//顶点缓冲
//自定义顶点格式
struct CUSTOMVERTEX
{
        FLOAT x,y,z,rhw;//三维坐标
        DWORD colour;//顶点颜色
};
#define D3DFVF_CUSTOMVERTEX D3DFVF_XYZRHW|D3DFVF_DIFFUSE
#define SafeRelease(pObject)if(pObject!=NULL){pObject->Release();pObject=NULL;}
HRESULT InitialiseD3D(HWND hWnd)
{
        //初始化D3D接口
        g_pD3D=Direct3DCreate9(D3D_SDK_VERSION);
        if(g_pD3D==NULL)
        {
                MessageBox(NULL,"asdd","error",MB_OK);
        }
        //获取显卡显示模式
        D3DDISPLAYMODE d3ddm;
        if(FAILED(g_pD3D->GetAdapterDisplayMode(D3DADAPTER_DEFAULT,&d3ddm)))
        {
                MessageBox(NULL,"asdd","error",MB_OK);
        }
        //创建显示结构
        D3DPRESENT_PARAMETERS d3dpp;
        ZeroMemory(&d3dpp,sizeof(d3dpp));
        //填充结构
        d3dpp.Windowed=TRUE;//窗口模式
        d3dpp.SwapEffect=D3DSWAPEFFECT_DISCARD;//翻转模式
        d3dpp.BackBufferFormat=d3ddm.Format;//后缓冲格式
        //创建3D设备指针
        if(FAILED(g_pD3D->CreateDevice(D3DADAPTER_DEFAULT,D3DDEVTYPE_HAL,hWnd,D3DCREATE_SOFTWARE_VERTEXPROCESSING,
                                                                        &d3dpp,&g_pD3DDevice)))
        {
                MessageBox(NULL,"asdd","error",MB_OK);
        }

        return S_OK;
}
HRESULT InitialiseVertexBuffer()
{
        VOID *pVertices;
        //设置顶点颜色,颜色信息
        CUSTOMVERTEX cvVertices[]={
                {250.0f,100.0f,0.5f,1.0f,D3DCOLOR_XRGB(255,0,0),},
                {400.0f,350.0f,0.5f,1.0f,D3DCOLOR_XRGB(0,255,0),},
                {100.f,300.0f,0.5f,1.0f,D3DCOLOR_XRGB(0,0,255),},
        };
        //创建顶点缓冲
        if(FAILED(g_pD3DDevice->CreateVertexBuffer(3*sizeof(CUSTOMVERTEX),0,D3DFVF_CUSTOMVERTEX,
                          D3DPOOL_DEFAULT,&g_pVertexBuffer,NULL)))
        {
                MessageBox(NULL,"asdd","error",MB_OK);
        }
        //锁定顶点缓冲
        if(FAILED(g_pVertexBuffer->Lock(0,sizeof(cvVertices),(void**)&pVertices,0)))
        {
                MessageBox(NULL,"asdd","error",MB_OK);
        }
        //拷贝顶点信息
        memcpy(pVertices,cvVertices,sizeof(cvVertices));
        //解锁
        g_pVertexBuffer->Unlock();
        return S_OK;
}

void Render()
{
        if(g_pD3DDevice== NULL)
        {
                MessageBox(NULL,"asdd","error",MB_OK);
        }
        //清空3D设备
        g_pD3DDevice->Clear(0,NULL,D3DCLEAR_TARGET,D3DCOLOR_XRGB(255,255,255),1.0f,0);
        //开始绘制
        g_pD3DDevice->BeginScene();
        //绘制三角形
        g_pD3DDevice->SetStreamSource(0,g_pVertexBuffer,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_pVertexBuffer);
        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();
                }
        }
}

// WINDOW消息处理

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);
}
//应用程序入口
int WINAPI WinMain(HINSTANCE hInstance,HINSTANCE hPrevInstance,
                                   LPSTR lpCmdLine,int nCmdShow)
{
        WNDCLASS wc;
        wc.cbClsExtra= 0;
        wc.cbWndExtra=0;
        wc.hbrBackground=(HBRUSH)(COLOR_WINDOW+1);
        wc.hCursor=NULL;
        wc.hIcon=NULL;
        wc.hInstance=hInstance;
        wc.lpfnWndProc=WinProc;
        wc.lpszClassName="window";
        wc.lpszMenuName=NULL;
        wc.style=CS_VREDRAW | CS_HREDRAW;
        RegisterClass(&wc);
        HWND hWnd=CreateWindow("window","haha",WS_OVERLAPPEDWINDOW,100,100,800,600,NULL,
                NULL,hInstance,NULL);
        RegisterClass(&wc);
       
       
        if(!hWnd)
        {
                MessageBox(NULL,"asd","Error",MB_OK);
        }

        //初始D3D
        if(SUCCEEDED(InitialiseD3D(hWnd)))
        {
                //显示窗口
                ShowWindow(hWnd,SW_SHOWDEFAULT);
                UpdateWindow(hWnd);
                //初始化顶点缓冲
                if(SUCCEEDED(InitialiseVertexBuffer()))
                {
                        //进如循环
                        GameLoop();
                }
        }
        CleanUp();
        UnregisterClass("base",wc.hInstance);
        return 0;
}

2

主题

429

帖子

435

积分

中级会员

Rank: 3Rank: 3

积分
435
发表于 2007-11-30 20:38:00 | 显示全部楼层

Re:高手帮个忙,这是我第一次写的DX,只出窗口,没画图形

PeekMessage(&msg,NULL,0,0,PM_NOREMOVE);
改成
PeekMessage(&msg,NULL,0,0,PM_REMOVE);

3

主题

8

帖子

8

积分

新手上路

Rank: 1

积分
8
 楼主| 发表于 2007-12-1 18:14:00 | 显示全部楼层

Re:高手帮个忙,这是我第一次写的DX,只出窗口,没画图形

谢谢高手哈,谢谢
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

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

GMT+8, 2025-12-14 17:42

Powered by Discuz! X3.4

Copyright © 2001-2021, Tencent Cloud.

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