游戏开发论坛

 找回密码
 立即注册
搜索
查看: 1606|回复: 1

d3d画线为什么不能显示?在线等

[复制链接]

2

主题

2

帖子

8

积分

新手上路

Rank: 1

积分
8
发表于 2009-9-22 21:35:00 | 显示全部楼层 |阅读模式
这是部分代码
// D3DInit.cpp: implementation of the CD3DInit class.
//
//////////////////////////////////////////////////////////////////////

#include "D3DInit.h"

IDirect3DVertexBuffer9* g_VertexBuffer  = 0;    //定义为全局的
//LPDIRECT3DVERTEXBUFFER9 g_VertexBuffer = NULL;
////////////定义一个顶点的结构体

struct Vertex
{
float x,y,z;
unsigned long color;
};
#define D3DFVF_VERTAX (D3DFVF_XYZ | D3DFVF_DIFFUSE)                                              //将顶点结构体的成员变量赋值


//////////////////////////////////////////////////////////////////////
// Construction/Destruction
//////////////////////////////////////////////////////////////////////

CD3DInit::CD3DInit()
{
g_pD3D = NULL;
g_pd3dDevice = NULL;
}

CD3DInit::~CD3DInit()
{
g_pD3D->Release();
g_pD3D = NULL;

g_pd3dDevice->Release();
g_pd3dDevice = NULL;
}


//--D3D的初始化
HRESULT CD3DInit::InitD3D(HWND hWnd)
{

//--创建D3D对象
if(NULL == (g_pD3D = Direct3DCreate9(D3D_SDK_VERSION)))
return E_FAIL;    //--(E_FAIL)创建失败
D3DDISPLAYMODE d3ddm;  //--定义一个保存当前适配器属性的结构
//--获得当前适配器的显示模式
if(FAILED(g_pD3D->GetAdapterDisplayMode(D3DADAPTER_DEFAULT, &d3ddm)))
{
return E_FAIL;  //--如果失败则返回(FAILED:失败)
}
//--设置传递给LPDIRECT3D9::CreateDevice的参数
D3DPRESENT_PARAMETERS d3dpp;
ZeroMemory(&d3dpp, sizeof(d3dpp));              //--把结构体清空
d3dpp.Windowed        = false;                  //--指明不是窗口模式,而是全局独占模式
d3dpp.SwapEffect      = D3DSWAPEFFECT_DISCARD;  //--设定换页效果为丢弃后台缓存
d3dpp.BackBufferFormat = d3ddm.Format;          //--色彩深度为桌面的色彩深度
d3dpp.BackBufferWidth  = d3ddm.Width;            //--后缓冲宽度
d3dpp.BackBufferHeight = d3ddm.Height;          //--后缓冲高度
d3dpp.FullScreen_RefreshRateInHz = D3DPRESENT_RATE_DEFAULT; //--屏幕刷新率
d3dpp.PresentationInterval      = D3DPRESENT_INTERVAL_ONE; //--翻转模式


if(FAILED( g_pD3D->CreateDevice(D3DADAPTER_DEFAULT,          //--使用当前显卡作注设备
                            D3DDEVTYPE_HAL,            //--硬件抽象层设备
hWnd,        
D3DCREATE_SOFTWARE_VERTEXPROCESSING, //--用软件的方法处理
//--顶点数据参数若为D3DCREATE_HARDWARE_VERTEXPROCESSING则
//--使用硬件
&d3dpp,
&g_pd3dDevice)))
{
return E_FAIL;
}
Vertex objDATA[] = {
{420.0f,150.0f,0.5f,D3DCOLOR_XRGB(255,255,255)},
{420.0f,350.0f,0.5f,D3DCOLOR_XRGB(255,255,255)},
{220.0f,150.0f,0.5f,D3DCOLOR_XRGB(255,255,255)},
{220.0f,350.0f,0.5f,D3DCOLOR_XRGB(255,255,255)},

};

g_pd3dDevice->CreateVertexBuffer(sizeof(objDATA),0,D3DFVF_VERTAX,D3DPOOL_DEFAULT,&g_VertexBuffer,NULL);
void * ptr;
g_VertexBuffer->Lock(0,sizeof(objDATA),(void **)&ptr,0);
memcpy(ptr,objDATA,sizeof(objDATA));
g_VertexBuffer->Unlock();


return S_OK;
}
//--D3D的渲染部分
void CD3DInit::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_VertexBuffer,0,sizeof(Vertex));
g_pd3dDevice->SetFVF(D3DFVF_VERTAX);
g_pd3dDevice->DrawPrimitive(D3DPT_LINELIST,0,2);

//--中间将来是整个图形的绘制部分

g_pd3dDevice->EndScene();  //--结束图形的渲染
g_pd3dDevice-&gtresent(NULL, NULL, NULL, NULL);//--翻页
}

BOOL CD3DInit::GameInit(HWND hWnd)
{
if(SUCCEEDED(this->InitD3D(hWnd)))
{
return true;
}
else
{
return false;
}
return true;
}


11

主题

650

帖子

651

积分

高级会员

Rank: 4

积分
651
发表于 2009-9-22 21:50:00 | 显示全部楼层

Re:d3d画线为什么不能显示?在线等

关灯没
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

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

GMT+8, 2025-8-6 07:22

Powered by Discuz! X3.4

Copyright © 2001-2021, Tencent Cloud.

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