游戏开发论坛

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

请教问题DX中的LPDIRECT3DVERTEXBUFFER8

[复制链接]

1

主题

7

帖子

9

积分

新手上路

Rank: 1

积分
9
发表于 2006-1-18 16:11:00 | 显示全部楼层 |阅读模式
小弟最近在思考如何在3D中使用鼠标点击移动的事情~~
看了看DX8中Pick的例子,发现很相似,这样遍历的算法对我来说很实用,但是却遇到了一些麻烦
就是关于LPDIRECT3DVERTEXBUFFER8这个结构的,以下是代码片断(出错的)
struct VERTEX { D3DXVECTOR3 p, n; FLOAT tu; FLOAT tv; };
VERTEX *v;
LPDIRECT3DVERTEXBUFFER8 VB;
VB->Lock( 0, 0, (BYTE**)&v, 0 );//如果有这句,程序运行就会出现错,编译的时候提示没有问题.
但是我编译了Pick这个例子,却发现其能够正常运行
请各位指教,不管我是哪个程序中使用LPDIRECT3DVERTEXBUFFER8的Lock函数,
程序运行时都会出错!
我用的是DX8.0,谢谢.

15

主题

90

帖子

90

积分

注册会员

Rank: 2

积分
90
发表于 2006-1-18 18:43:00 | 显示全部楼层

Re:请教问题DX中的LPDIRECT3DVERTEXBUFFER8

程序运行时都会出错    根据我的“经验”是指针问题……(猜的  猜的~)

0

主题

237

帖子

237

积分

中级会员

Rank: 3Rank: 3

积分
237
发表于 2006-1-18 19:18:00 | 显示全部楼层

Re:请教问题DX中的LPDIRECT3DVERTEXBUFFER8

你的 "LPDIRECT3DVERTEXBUFFER8 VB;" 跟本?未建立..... 就想Lock ??

1

主题

7

帖子

9

积分

新手上路

Rank: 1

积分
9
 楼主| 发表于 2006-1-18 20:37:00 | 显示全部楼层

Re:请教问题DX中的LPDIRECT3DVERTEXBUFFER8

我想也是的,不过我翻查Pick例子里面发现它的LPDIRECT3DVERTEXBUFFER8 结构也并未
建立的啊,只是简单的在构造函数中将其设计为NULL.然后在Pick函数中就开始使用.
请问是否要像IDirect3DVertexBuffer8一样先建立再使用呢?

1

主题

7

帖子

9

积分

新手上路

Rank: 1

积分
9
 楼主| 发表于 2006-1-18 20:49:00 | 显示全部楼层

Re:请教问题DX中的LPDIRECT3DVERTEXBUFFER8

不知道哪位有这方面的经验,我想其中肯定有什么毛病,因为如果像这样来使用就不会出现问题,程序会运行得很正常.先定义一个LPDIRECT3DVERTEXBUFFER8的变量,然后并不需要对其作任何建立工作,而是从一个ID3DXMesh对象中获得其VertexBuffer,然后再使用Lock函数,会工作得很好,代码片断如下:
LPDIRECT3DVERTEXBUFFER8 pVB;
m_pObject->GetLocalMesh()->GetVertexBuffer( &pVB );
struct VERTEX { D3DXVECTOR3 p, n; FLOAT tu; FLOAT tv; };
VERTEX*    pVertices;;               
pVB->Lock( 0,0,(BYTE**)&pVertices, 0 );
//这里是一些复制内存的代码
pVB->Unlock();
pVB->Release();
以上代码中使用了LPDIRECT3DVERTEXBUFFER8这个结构,但是程序运行时却不会出现任何错误,但是pVB结构中的数据却不是空的了,不知道哪位高人知道如何来使用LPDIRECT3DVERTEXBUFFER8,我会继续尝试,对此论坛关注中.

7

主题

67

帖子

69

积分

注册会员

Rank: 2

积分
69
发表于 2006-1-18 22:31:00 | 显示全部楼层

Re:请教问题DX中的LPDIRECT3DVERTEXBUFFER8

顶点缓冲区是需要从D3D设备来创建的!!
这样:
LPDIRECT3DVERTEXBUFFER8 m_lpVertexBuffer;
m_lpD3DDevice->CreateVertexBuffer(4 * sizeof(TGGE_VERTEX), 0, D3DFVF_GGEVERTEX, D3DPOOL_MANAGED, &m_lpVertexBuffer, NULL);

建议你先去找些基本的D3D资料看看。从如何创建D3D设备开始。

7

主题

67

帖子

69

积分

注册会员

Rank: 2

积分
69
发表于 2006-1-18 22:33:00 | 显示全部楼层

Re:请教问题DX中的LPDIRECT3DVERTEXBUFFER8

还有,开始的时候尽量不要去使用D3DX的函数库,它们只能使你不知道底层是如何工作的。

就象winAPI和MFC的关系一样。
做游戏只有对底层的细节熟悉,才能得到技术上的进步。

1

主题

7

帖子

9

积分

新手上路

Rank: 1

积分
9
 楼主| 发表于 2006-1-18 22:39:00 | 显示全部楼层

Re:请教问题DX中的LPDIRECT3DVERTEXBUFFER8

OK,我自己回来顶一顶楼上的贴子,果然,它的使用和IDirect3DVertexBuffer8是一样的~
必须先建立再使用!因为我是Pick那个例子中找到了如下的代码:
if( FAILED( m_pd3dDevice->CreateVertexBuffer( dwNumVertices*sizeof(D3DVERTEX),
                                                  D3DUSAGE_WRITEONLY, D3DFVF_VERTEX,
                                                  D3DPOOL_MANAGED, &m_pVB ) ) )
就是这样创建的,我发现有时候越急越找不到想要的东西~!
谢谢GhostCheng.你的建意是个好主意~~呵~~!有问题的话我会再来这里,感觉好舒服~!

13

主题

245

帖子

245

积分

中级会员

Rank: 3Rank: 3

积分
245
发表于 2006-1-20 16:05:00 | 显示全部楼层

Re:请教问题DX中的LPDIRECT3DVERTEXBUFFER8

看了看这个帖子,我无语了,建议自己去看看MS的DX SDK,你的问题就是里面的Tutorial 5。。。摆脱,这里发帖子问技术细节的人,自己先好好看看MS的文档先(DX8和DX9有所不同,但是,最基本的东西是一样了,所以,尽管有人在学DX8,但是,仍旧建议去学DX9 SDK)

3

主题

72

帖子

72

积分

注册会员

Rank: 2

积分
72
发表于 2006-1-20 21:57:00 | 显示全部楼层

Re:请教问题DX中的LPDIRECT3DVERTEXBUFFER8

嗯,应该学9了。
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

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

GMT+8, 2026-1-23 06:51

Powered by Discuz! X3.4

Copyright © 2001-2021, Tencent Cloud.

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