游戏开发论坛

 找回密码
 立即注册
搜索
查看: 1907|回复: 5

请教一个hlsl的问题

[复制链接]

119

主题

1367

帖子

1393

积分

金牌会员

Rank: 6Rank: 6

积分
1393
发表于 2007-8-8 19:08:00 | 显示全部楼层 |阅读模式
假设要渲染的对象是相同类型的对象

mFX->Begin(&numPasses, 0);
mFX->BeginPass(0);

draw(对象1)
draw(对象2)
...
draw(对象n)

mFX->EndPass();
mFX->End();


mFX->Begin(&numPasses, 0);
mFX->BeginPass(0);
draw(对象1);
mFX->EndPass();
mFX->End();

mFX->Begin(&numPasses, 0);
mFX->BeginPass(0);
draw(对象2);
mFX->EndPass();
mFX->End();
...

mFX->Begin(&numPasses, 0);
mFX->BeginPass(0);
draw(对象n);
mFX->EndPass();
mFX->End();


后者程序封装简单,容易写,程序结构清晰,前者封装起来比较混乱,程序结构不清晰。
这两种方式效率差别大不大?我没具体测试过,如果效率差别很大,之能选择前者了。
是否必须选择前者?





13

主题

74

帖子

74

积分

注册会员

Rank: 2

积分
74
发表于 2007-8-8 20:53:00 | 显示全部楼层

Re:请教一个hlsl的问题


选择前者会有很多的限制。首先每个object的渲染状态是不一样的,比如material,render state,所以至少在每次Draw之前要做一次CommitChanges。

如果要从效率考虑,则建议直接使用vs/ps,用effect多了一层间接层总有一些开销的。

5

主题

755

帖子

757

积分

高级会员

Rank: 4

积分
757
发表于 2007-8-9 09:43:00 | 显示全部楼层

Re:请教一个hlsl的问题

不喜欢效果框架.直接ps最好

1

主题

149

帖子

149

积分

注册会员

Rank: 2

积分
149
QQ
发表于 2007-8-9 10:32:00 | 显示全部楼层

Re:请教一个hlsl的问题

1.如果使用后者,那当你的物体多了之后,
mFX->Begin(&numPasses, 0);
mFX->BeginPass(0);
之类的操作执行得太频繁了,也会影响效率.

2.如果使用前这,那每次更改渲染状态都要CommitChanges();,太频繁了也会影响效率.这时,一般的解决办法是对渲染状态进行分类,根据渲染状态,把物体分成几批渲染,有相同渲染状态的物体一起渲染;
如:

mFX->Begin(&numPasses, 0);
mFX->BeginPass(0);

//set something
CommitChange();
subScene1->Render()

//set something
CommitChange();
subScene2->Render()

......

mFX->EndPass();
mFX->End();

14

主题

345

帖子

376

积分

中级会员

Rank: 3Rank: 3

积分
376
QQ
发表于 2007-8-9 11:32:00 | 显示全部楼层

Re:请教一个hlsl的问题

可不可以写个manager统一组织渲染?
mFX->Begin(&numPasses, 0);
mFX->BeginPass(0);

manager.Render();

mFX->EndPass();
mFX->End();

119

主题

1367

帖子

1393

积分

金牌会员

Rank: 6Rank: 6

积分
1393
 楼主| 发表于 2007-8-9 13:28:00 | 显示全部楼层

Re:请教一个hlsl的问题

4楼的方案应该是比较好的
两种方式都有缺陷,的确是应该分个类。

5楼的manager思路很不错,可似乎不太容易搞
因为每个对象有自己的状态要更新
要做个统一的manager似乎有点困难
我会尝试去做做看
毕竟程序要做大,最讲究的就是封装。
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

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

GMT+8, 2026-1-25 13:04

Powered by Discuz! X3.4

Copyright © 2001-2021, Tencent Cloud.

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