游戏开发论坛

 找回密码
 立即注册
搜索
查看: 6246|回复: 10

再接__我的不能显示..............和书上的一样啊_

[复制链接]

4

主题

15

帖子

15

积分

新手上路

Rank: 1

积分
15
发表于 2003-9-4 22:48:00 | 显示全部楼层 |阅读模式
我高兴的太早了,画出来的窗口是我的建立window时用的白画刷,白色的,可在初始化的时候应该是蓝色的.要说是我的显卡不支持那为什么书上的代码可以编译啊,我的代码是全复制过去的啊.我的显卡是GF2,最新的驱动,98和2000sp2双系统.要看代码在下面:

#include <d3d9.h>
#pragma comment(lib,"d3d9.lib")
#pragma comment(lib,"d3dx9.lib")

LPDIRECT3D9 g_pD3D=NULL;
LPDIRECT3DDEVICE9 g_pd3dDevice=NULL;
LPDIRECT3DVERTEXBUFFER9 g_pVB=NULL;

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

#define D3DFVF_CUSTOMVERTEX (D3DFVF_XYZRHW|D3DFVF_DIFFUSE)

HRESULT InitD3D( HWND hWnd );
HRESULT InitVB();
VOID Cleanup();
VOID Render();
VOID GameLoop();
LRESULT WINAPI MsgProc( HWND hwnd, UINT msg, WPARAM wParam,
LPARAM lParam );

HRESULT InitD3D( HWND hWnd )
{

if( ( g_pD3D=Direct3DCreate9( D3D_SDK_VERSION ) )==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_DISCARD;
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 InitVB()
{
CUSTOMVERTEX g_Vertices[]={ {150.0f,50.0f,0.5f,1.0f,0xffff0000,},
{250.0f,250.0f,0.5f,1.0f,0xff00ff00,},
{50.0f,250.0f,0.5f,0xff00ffff,},};

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

VOID *pVertices;

if( FAILED(g_pVB->Lock( 0, sizeof(g_Vertices), (void**)&pVertices,
0)) )
return E_FAIL;
memcpy( pVertices, g_Vertices, sizeof(g_Vertices) );
g_pVB->Unlock();

return S_OK;
}

VOID Cleanup()
{

if( g_pd3dDevice!=NULL )
g_pd3dDevice->Release();

if( g_pD3D!=NULL )
g_pD3D->Release();

}

VOID Render()
{

if( NULL==g_pd3dDevice )
return;
//D3DRECT rect={ 100, 100, 300, 300 };

g_pd3dDevice->Clear( 0, NULL, D3DCLEAR_TARGET,
D3DCOLOR_XRGB( 0,0,255 ),1.0f,0 );
g_pd3dDevice->BeginScene();
g_pd3dDevice->SetStreamSource( 0, g_pVB, 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 );

}

LRESULT WINAPI MsgProc( HWND hWnd, UINT msg, WPARAM wParam,
LPARAM lParam )
{

switch( msg )
{
case WM_PAINT:
Render();
ValidateRect( hWnd, NULL );
return 0;
case WM_CREATE:
break;

case WM_DESTROY:
Cleanup();
PostQuitMessage( 0 );
return 0;
}

return DefWindowProc( hWnd, msg, wParam, lParam );

}

void GameLoop()
{
//Enter the game loop
MSG msg;
BOOL fMessage;

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

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

if(fMessage)
{
//Process message
TranslateMessage(&msg);
DispatchMessage(&msg);
}
else
{
//No message to process, so render the current scene
Render();
}

}
}


INT WINAPI WinMain( HINSTANCE hInst, HINSTANCE, LPSTR c_s,
INT c_show )
{
MSG msg;

WNDCLASS wndclass={ CS_HREDRAW, MsgProc, 0, 0, hInst, NULL,
NULL, (HBRUSH) GetStockObject( 0 ),
NULL, "Direct" };

RegisterClass( &wndclass );

HWND hWnd=CreateWindow( "Direct", "direct001",
WS_OVERLAPPEDWINDOW | WS_VISIBLE,
100, 100, 300,300, NULL, NULL,
wndclass.hInstance, NULL );

if( SUCCEEDED( InitD3D( hWnd ) ) )
{

ShowWindow( hWnd, SW_SHOWDEFAULT );
UpdateWindow( hWnd );
}

GameLoop();


UnregisterClass( "Direct", wndclass.hInstance );
Cleanup();

return 0;

}

还有记得原来用OPGL要显示一个黑色的窗口,可是只是屏幕四周是黑的.中间却是桌面上的东西.唉,不明白啊??????

90

主题

797

帖子

833

积分

高级会员

论坛版主

Rank: 4

积分
833
QQ
发表于 2003-9-4 23:14:00 | 显示全部楼层

Re:再接__我的不能显示..............和书上的一样啊_

可能书上的代码有误
如果书上的代码你能顺利执行,那么,把你自己写的代码,一条一条的复制回书上的代码,看来你只能用这种方法了

4

主题

15

帖子

15

积分

新手上路

Rank: 1

积分
15
 楼主| 发表于 2003-9-5 00:12:00 | 显示全部楼层

Re:再接__我的不能显示..............和书上的一样啊_

唉!!!

4

主题

15

帖子

15

积分

新手上路

Rank: 1

积分
15
 楼主| 发表于 2003-9-5 01:09:00 | 显示全部楼层

Re:再接__我的不能显示..............和书上的一样啊_

在win98下代码可以通过,为什么在2000下不能通过呢????

27

主题

169

帖子

169

积分

注册会员

Rank: 2

积分
169
发表于 2003-9-5 06:50:00 | 显示全部楼层

Re:再接__我的不能显示..............和书上的一样啊_

我运行了你的代码,是蓝色的窗口啊?你有什么问题?

27

主题

169

帖子

169

积分

注册会员

Rank: 2

积分
169
发表于 2003-9-5 06:56:00 | 显示全部楼层

Re:再接__我的不能显示..............和书上的一样啊_

我还在W2K下编译的,你用的是不是VC++6.0

4

主题

15

帖子

15

积分

新手上路

Rank: 1

积分
15
 楼主| 发表于 2003-9-5 09:10:00 | 显示全部楼层

Re:再接__我的不能显示..............和书上的一样啊_

是啊,不过我一装上vc6以后,电脑就常出毛病,总说什么什么地方为只读,打不开什么什么文件,需要关闭或调试.

27

主题

169

帖子

169

积分

注册会员

Rank: 2

积分
169
发表于 2003-9-5 12:19:00 | 显示全部楼层

Re:再接__我的不能显示..............和书上的一样啊_

那重装

4

主题

15

帖子

15

积分

新手上路

Rank: 1

积分
15
 楼主| 发表于 2003-9-6 07:58:00 | 显示全部楼层

Re:再接__我的不能显示..............和书上的一样啊_

重装没用的每次都一样,不过有网友说是内存泄露,说2000比98对内乱存的要求严格.老兄有什么看法?

27

主题

169

帖子

169

积分

注册会员

Rank: 2

积分
169
发表于 2003-9-6 18:18:00 | 显示全部楼层

Re: 再接__我的不能显示..............和书上的一样啊_

呵呵,那俺就不知道了,你去问问W2K开发小组吧
你的VC会不会有问题或系统,重买一个或打个补丁
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

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

GMT+8, 2025-2-21 18:27

Powered by Discuz! X3.4

Copyright © 2001-2021, Tencent Cloud.

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