游戏开发论坛

 找回密码
 立即注册
搜索
查看: 2386|回复: 9

为什么显示不了,帮忙看一下。谢谢

[复制链接]

54

主题

116

帖子

122

积分

注册会员

Rank: 2

积分
122
发表于 2007-3-18 09:37:00 | 显示全部楼层 |阅读模式
#include<windows.h>
#include<d3d9.h>
#include<d3dx9.h>
IDirect3D9 * d3d=NULL;
IDirect3DDevice9 *pDevice3D=NULL;

IDirect3DVertexBuffer9* p_vb=NULL;



struct CUSTOMVERTEX{
    FLOAT x,y,z;
        DWORD color;
};

#define D3DFVF_CUSTOMVERTEX (D3DFVF_XYZ |D3DFVF_DIFFUSE)

LRESULT CALLBACK WindowProc(
  HWND hwnd,      // handle to window
  UINT uMsg,      // message identifier
  WPARAM wParam,  // first message parameter
  LPARAM lParam   // second message parameter
);

HRESULT InitD3D(HWND);
HRESULT InitDraw( );

void render(void);
void cleanUp(void);

int WINAPI WinMain(
  HINSTANCE hInstance,  // handle to current instance
  HINSTANCE hPrevInstance,  // handle to previous instance
  LPSTR lpCmdLine,      // pointer to command line
  int nCmdShow          // show state of window
)

{
        WNDCLASS winclass;
        winclass.cbClsExtra=0;
        winclass.cbWndExtra=0;
        winclass.hbrBackground=(HBRUSH)GetStockObject(GRAY_BRUSH);
        winclass.hCursor=LoadCursor(NULL,IDC_ARROW);
        winclass.hIcon=LoadIcon(NULL,IDI_APPLICATION);
        winclass.hInstance=hInstance;
        winclass.lpfnWndProc=WindowProc;
        winclass.lpszClassName="winclass";
        winclass.lpszMenuName=NULL;
        winclass.style=CS_HREDRAW|CS_VREDRAW;

        RegisterClass(&winclass);

    HWND hwnd;
        hwnd=CreateWindow("winclass","the window",
                              WS_OVERLAPPEDWINDOW,
                                          CW_USEDEFAULT,
                                          CW_USEDEFAULT,
                      CW_USEDEFAULT,
                                          CW_USEDEFAULT,
                                          NULL,NULL,hInstance,NULL);
        if(FAILED(InitD3D(hwnd)))
        {
                MessageBox(0,"initD3D failed",0,0);
          return false;
        }

    if(FAILED(InitDraw()))
        {
                MessageBox(0,"initDraw failed",0,0);
          return false;
        }
            
         ShowWindow(hwnd,SW_SHOWNORMAL);
        UpdateWindow(hwnd);

        MSG message;


        while(message.message!=WM_QUIT)
       
        {
                if(        PeekMessage(&message,NULL,0,0,PM_REMOVE))
                {
                TranslateMessage(&message);
                DispatchMessage(&message);

                }
                else
                {
                        render();
                }
        }
  cleanUp();
        return message.wParam;
}
       

LRESULT CALLBACK WindowProc(
  HWND hwnd,      // handle to window
  UINT uMsg,      // message identifier
  WPARAM wParam,  // first message parameter
  LPARAM lParam   // second message parameter
)
{

        switch(uMsg)
    {
        case WM_DESTROY:
            PostQuitMessage(0);
            return 0;
                break;

    }

    return DefWindowProc(hwnd, uMsg, wParam, lParam);
}

void render(void)
{
        if(NULL==pDevice3D)
        {
                return ;
        }



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

      if(SUCCEEDED(pDevice3D->BeginScene()))//开始绘制
        {

                //RENDER CODE
        pDevice3D->SetStreamSource(0,p_vb,0,sizeof(CUSTOMVERTEX));//参数不明白

                pDevice3D->SetFVF(D3DFVF_CUSTOMVERTEX);//THE SAME


                pDevice3D->DrawPrimitive(D3DPT_TRIANGLELIST ,0,1);
        

        pDevice3D->EndScene();
        }

    pDevice3D-&gtresent(NULL,NULL,NULL,NULL);//显示到屏幕


}

void cleanUp(void)
{

        if(p_vb!=NULL)
                p_vb->Release();
        if(pDevice3D!=NULL)
                pDevice3D->Release();
        if( d3d!=NULL)
                 d3d->Release();
}
HRESULT InitD3D(HWND hwnd)
{
    d3d=Direct3DCreate9(D3D_SDK_VERSION);
   if(NULL== d3d)
   {

           return false;
   }

   D3DPRESENT_PARAMETERS d3dpp;
      
   ZeroMemory( &d3dpp, sizeof(d3dpp) );

   d3dpp.BackBufferHeight=600;
   d3dpp.BackBufferWidth=800;
    d3dpp.BackBufferFormat=D3DFMT_A8R8G8B8;//?
   d3dpp.BackBufferCount=1;
   d3dpp.MultiSampleType=D3DMULTISAMPLE_NONE;//?
   d3dpp.MultiSampleQuality=0;//?
   d3dpp.SwapEffect=D3DSWAPEFFECT_DISCARD;//?
   d3dpp.hDeviceWindow=hwnd;
   d3dpp.Windowed=true;
   d3dpp.AutoDepthStencilFormat=D3DFMT_D24S8;//?
   d3dpp.Flags=0;
   d3dpp.FullScreen_RefreshRateInHz=D3DPRESENT_RATE_DEFAULT;
   d3dpp.PresentationInterval=D3DPRESENT_INTERVAL_IMMEDIATE;
  
      d3dpp.BackBufferFormat = D3DFMT_UNKNOWN;


   if(FAILED( d3d->CreateDevice(D3DADAPTER_DEFAULT,
                                D3DDEVTYPE_HAL,hwnd,
                                D3DCREATE_SOFTWARE_VERTEXPROCESSING,
                                &d3dpp,&pDevice3D
                                )))
   {
          
           MessageBox(hwnd,"eorr2","messagebox",MB_OK);

           return E_FAIL;
   }

  
   return S_OK;
}

HRESULT InitDraw( )
{

CUSTOMVERTEX Vertices[3]=
{
         {-1.0f,  -1.0f, 0.0f,D3DCOLOR_XRGB(255,0,0)},
         {1.0f, -1.0f, 0.0f,D3DCOLOR_XRGB(0,255,0)},
         {0.0f, 1.0f, 0.0f,D3DCOLOR_XRGB(0,255,255)}
};

//建立顶点缓冲区
  
if(FAILED(pDevice3D->CreateVertexBuffer(3*sizeof( CUSTOMVERTEX),
                                         0,D3DFVF_CUSTOMVERTEX,                                                                          D3DPOOL_DEFAULT,&p_vb,NULL)))
{
         return E_FAIL;
}

//锁定定点缓冲区

VOID* pVertices;

if(FAILED(p_vb->Lock(0,sizeof(Vertices),(void**)&pVertices,0)))//?
{
         return E_FAIL;
}
//将顶点资料填入顶点缓冲区里
memcpy(pVertices,Vertices,sizeof(Vertices));//?the last parameter

p_vb->Unlock();

return S_OK;
}


谢谢了

7

主题

20

帖子

20

积分

注册会员

Rank: 2

积分
20
发表于 2007-3-18 11:07:00 | 显示全部楼层

Re:为什么显示不了,帮忙看一下。谢谢

你的程序能显示窗体吗?
如果能显示窗体把顶点坐标的Z值改为一个合适的正数看看,你的三角形在视景体之外被裁减了

31

主题

249

帖子

259

积分

中级会员

Rank: 3Rank: 3

积分
259
发表于 2007-3-18 13:43:00 | 显示全部楼层

Re:为什么显示不了,帮忙看一下。谢谢

d3dpp.BackBufferHeight=600;
d3dpp.BackBufferWidth=800;
d3dpp.BackBufferFormat=D3DFMT_A8R8G8B8;//?
d3dpp.BackBufferCount=1;
   d3dpp.MultiSampleType=D3DMULTISAMPLE_NONE;//?
   d3dpp.MultiSampleQuality=0;//?
   d3dpp.SwapEffect=D3DSWAPEFFECT_DISCARD;//?
   d3dpp.hDeviceWindow=hwnd;
   d3dpp.Windowed=true;
   d3dpp.AutoDepthStencilFormat=D3DFMT_D24S8;//?
   d3dpp.Flags=0;
   d3dpp.FullScreen_RefreshRateInHz=D3DPRESENT_RATE_DEFAULT;
   d3dpp.PresentationInterval=D3DPRESENT_INTERVAL_IMMEDIATE;
  
      d3dpp.BackBufferFormat = D3DFMT_UNKNOWN;


改一下改成

        D3DDISPLAYMODE d3ddm;
        if(FAILED(hr = pD3D->GetAdapterDisplayMode(D3DADAPTER_DEFAULT , &d3ddm)))
        {
                CleanUp();
                return hr;
        }

        D3DPRESENT_PARAMETERS para;
        ZeroMemory(&para, sizeof(para));

        para.Windowed = bWindowed;
        para.SwapEffect= D3DSWAPEFFECT_DISCARD;
        para.BackBufferFormat = d3ddm.Format;

试试看,还有就是照二楼说的
        {150.0f , 50.0f , 0.5f , 1.0f , 0xff0000ff ,},
        {250.0f , 250.0f , 0.5f , 1.0f , 0xff00ff00 ,},
        {50.0f , 250.0f , 0.5f , 1.0f , 0xffff0000 ,},
一定行,我刚刚试过
我也是新手,不懂那些参数,看DOC吧

54

主题

116

帖子

122

积分

注册会员

Rank: 2

积分
122
 楼主| 发表于 2007-3-18 15:35:00 | 显示全部楼层

Re:为什么显示不了,帮忙看一下。谢谢

还是蓝屏 啊

31

主题

249

帖子

259

积分

中级会员

Rank: 3Rank: 3

积分
259
发表于 2007-3-18 16:01:00 | 显示全部楼层

Re:为什么显示不了,帮忙看一下。谢谢

大家新手相互帮助啊。
(此蓝屏非彼蓝屏)

54

主题

116

帖子

122

积分

注册会员

Rank: 2

积分
122
 楼主| 发表于 2007-3-18 17:15:00 | 显示全部楼层

Re:为什么显示不了,帮忙看一下。谢谢

我说的意思是,没有显示图像。只是背景颜色的窗口。

31

主题

249

帖子

259

积分

中级会员

Rank: 3Rank: 3

积分
259
发表于 2007-3-18 17:33:00 | 显示全部楼层

Re:为什么显示不了,帮忙看一下。谢谢

在CreateDevice之后加入

  pDevice3D->SetRenderState(D3DRS_CULLMODE , D3DCULL_NONE);

,具体原因自己分析。新手就喜欢犯这毛病

31

主题

249

帖子

259

积分

中级会员

Rank: 3Rank: 3

积分
259
发表于 2007-3-18 17:35:00 | 显示全部楼层

Re:为什么显示不了,帮忙看一下。谢谢

记得把灯关了,节约用电,不然渲染出来的都是黑的三角形

54

主题

116

帖子

122

积分

注册会员

Rank: 2

积分
122
 楼主| 发表于 2007-3-18 18:26:00 | 显示全部楼层

Re:为什么显示不了,帮忙看一下。谢谢

显示出来了!!!
谢谢,真是太感谢了。这个问题困扰我三天,我做什么都没心情。这下好了,可以继续学习。

谢谢

31

主题

249

帖子

259

积分

中级会员

Rank: 3Rank: 3

积分
259
发表于 2007-3-19 12:57:00 | 显示全部楼层

Re:为什么显示不了,帮忙看一下。谢谢

……不用谢,我也是新手,正好学到这哩
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

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

GMT+8, 2026-1-26 17:59

Powered by Discuz! X3.4

Copyright © 2001-2021, Tencent Cloud.

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