游戏开发论坛

 找回密码
 立即注册
搜索
查看: 14624|回复: 30

如何用一个LPDIRECT3DVERTEXBUFFER9来实现多个图形的绘制?

[复制链接]

24

主题

77

帖子

97

积分

注册会员

Rank: 2

积分
97
发表于 2006-8-8 11:44:00 | 显示全部楼层 |阅读模式
一个简单的问题:

现在我想用循环来渲染 n 个对象,假设每个对象都是一个三角形

三角形的数据保存在一个数组中

我现在创建一个 LPDIRECT3DVERTEXBUFFER9,含有 3 个顶点

在循环中使用下面的方法来进行绘制,使用独立的 Render 函数,下面是函数的内容。。

if( FAILED( pVB->Lock( 0, sizeof(3 * sizeof(CUSTOMVERTEX)), (VOID**)&pVertices, 0 ) ) )
        return E_FAIL;
memcpy( pVertices, testVer, sizeof(testVer) );
pVB->Unlock();

m_pd3dDevice->SetStreamSource( 0, pVB, 0, sizeof(CUSTOMVERTEX) );
m_pd3dDevice->SetFVF( D3DFVF_CUSTOMVERTEX );
m_pd3dDevice->DrawPrimitive( D3DPT_TRIANGLESTRIP , 0, 1 );

问题是:这时候只能有一个三角形被绘制,其他 n-1 个三角形虽然在循环过程中被执行到了,但是最后却不会被绘制出来

我想请问用什么方法才能使用一个 LPDIRECT3DVERTEXBUFFER9 来实现多个同样顶点数量的图形的绘制呢?

不要告诉我把所有的对象一次都装入一个大的 LPDIRECT3DVERTEXBUFFER9 中,上面的三角形仅仅是例子,实际对象复杂,只能逐个执行绘制

呵呵,很奇怪,我在以前使用 DX 过程中也使用过类似的方法,用一个 LPDIRECT3DVERTEXBUFFER9 来绘制多个对象,没有问题,可是我怎么也

找不出现在为什么会失败。。。高手指点一下,谢!

18

主题

971

帖子

982

积分

高级会员

Rank: 4

积分
982
发表于 2006-8-8 11:55:00 | 显示全部楼层

Re:如何用一个LPDIRECT3DVERTEXBUFFER9来实现多个图形的绘制?

楼主.....问问题要谦虚点啊。。看看..没人回吧。。
哈哈哈哈

24

主题

77

帖子

97

积分

注册会员

Rank: 2

积分
97
 楼主| 发表于 2006-8-8 12:21:00 | 显示全部楼层

Re:如何用一个LPDIRECT3DVERTEXBUFFER9来实现多个图形的绘制?

呵呵,如果觉得我问的不够谦虚,我道歉

高手给指点一下吧,很简单的问题 ^_^

18

主题

971

帖子

982

积分

高级会员

Rank: 4

积分
982
发表于 2006-8-8 16:08:00 | 显示全部楼层

Re:如何用一个LPDIRECT3DVERTEXBUFFER9来实现多个图形的绘制?

我不是高手..
你的代码应该没贴全吧,如果贴全了的话,是不是只有

m_pd3dDevice->SetStreamSource( 0, pVB, 0, sizeof(CUSTOMVERTEX) );
m_pd3dDevice->SetFVF( D3DFVF_CUSTOMVERTEX );
m_pd3dDevice->DrawPrimitive( D3DPT_TRIANGLESTRIP , 0, 1 );

这段是for循环里面?如果只有这段代码,怎么画也只会看到一个三角形,因为所有的东西都重叠在一起了。
如果上述代码里面有平移操作,就检查一下自己的lookat设置,看镜头拉远点看看。
一般这种类型的物体丢失,应该是变换设置有问题。

24

主题

77

帖子

97

积分

注册会员

Rank: 2

积分
97
 楼主| 发表于 2006-8-8 16:41:00 | 显示全部楼层

Re:如何用一个LPDIRECT3DVERTEXBUFFER9来实现多个图形的绘制?

循环过程中是更新了 pVB 中的数据的
而且感觉不是镜头的问题,因为我用不同的方法进行了比较 ^_^

36

主题

1047

帖子

1147

积分

金牌会员

Rank: 6Rank: 6

积分
1147
发表于 2006-8-8 17:45:00 | 显示全部楼层

Re:如何用一个LPDIRECT3DVERTEXBUFFER9来实现多个图形的绘制?

你这样做效率极低。其实你不屑的方法恰恰是解决这个问题的最好方法。

24

主题

77

帖子

97

积分

注册会员

Rank: 2

积分
97
 楼主| 发表于 2006-8-8 19:07:00 | 显示全部楼层

Re:如何用一个LPDIRECT3DVERTEXBUFFER9来实现多个图形的绘制?

呵呵,效率的问题考虑过了
我现在就是想知道我说的这种方式为什么会失败

btw:我那么写并不是不屑,而是避免问题i向这个方向发展。。

18

主题

971

帖子

982

积分

高级会员

Rank: 4

积分
982
发表于 2006-8-8 20:41:00 | 显示全部楼层

Re:如何用一个LPDIRECT3DVERTEXBUFFER9来实现多个图形的绘制?

把代码贴全吧。这样做不会失败,只不过效率很低。

5

主题

686

帖子

697

积分

高级会员

Rank: 4

积分
697
QQ
发表于 2006-8-8 21:21:00 | 显示全部楼层

Re:如何用一个LPDIRECT3DVERTEXBUFFER9来实现多个图形的绘制?

如果有N个物体,你试试只绘制其中的某个,比如从0到N-1,看看分别能不能正常显示,如果能,说明你的摄像机、物体相互位置关系或者渲染状态(Transform、DepthStencil、Alpha等)设置有误
如果单个的都无法显示,检查写入的坐标是否正确

8

主题

716

帖子

716

积分

高级会员

Rank: 4

积分
716
发表于 2006-8-9 10:18:00 | 显示全部楼层

Re:如何用一个LPDIRECT3DVERTEXBUFFER9来实现多个图形的绘制?

属于Instancing问题
去看SDK
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

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

GMT+8, 2026-1-25 03:42

Powered by Discuz! X3.4

Copyright © 2001-2021, Tencent Cloud.

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