游戏开发论坛

 找回密码
 立即注册
搜索
查看: 5543|回复: 11

脏矩形中的 “裁剪” 该如何处理???

[复制链接]

59

主题

404

帖子

404

积分

中级会员

Rank: 3Rank: 3

积分
404
发表于 2009-3-8 20:56:00 | 显示全部楼层 |阅读模式
看到本站有篇“脏矩形”的帖子,上面说要裁剪
(原文:http://dev.gameres.com/Program/Visual/2D/DirtyRect.mht)

可我真不知道D3D怎么“裁剪”。
貌似要用D3DRS_CLIPPING,具体怎么做不清楚。。。

59

主题

404

帖子

404

积分

中级会员

Rank: 3Rank: 3

积分
404
 楼主| 发表于 2009-3-19 20:40:00 | 显示全部楼层

Re:脏矩形中的 “裁剪” 该如何处理???

自己顶一个

0

主题

56

帖子

62

积分

注册会员

Rank: 2

积分
62
发表于 2009-3-19 21:07:00 | 显示全部楼层

Re:脏矩形中的 “裁剪” 该如何处理???

在D3D中,只要打开D3DRS_CLIPPING,那么那些处于View Frustum外的部分就会被自动裁减掉了,可以提高performance。那篇文章里的技术是针对2D的,其实就是每帧确定一个脏区域,只对那个区域的画面进行绘制。在D3D里,如果你需要用这项技术可能就要不停地变换viewport的位置和大小了,好像没见过有谁这样做过。

59

主题

984

帖子

1200

积分

金牌会员

Rank: 6Rank: 6

积分
1200
发表于 2009-3-19 23:07:00 | 显示全部楼层

Re:脏矩形中的 “裁剪” 该如何处理???

IDirect3DDevice9::SetScissorRect

0

主题

56

帖子

62

积分

注册会员

Rank: 2

积分
62
发表于 2009-3-19 23:13:00 | 显示全部楼层

Re: Re:脏矩形中的 “裁剪” 该如何处理???

clayman: Re:脏矩形中的 “裁剪” 该如何处理???

IDirect3DDevice9::SetScissorRect

哦,原来还有这个

21

主题

112

帖子

118

积分

注册会员

Rank: 2

积分
118
发表于 2009-3-20 08:30:00 | 显示全部楼层

Re:脏矩形中的 “裁剪” 该如何处理???

其实,我和楼主有一样的疑问。。。。

我刚去查了一下 SetScissorRect 这个函数允许指定一个矩形来作为当前的渲染区域。。。。
那么在写代码的时候恐怕要这样:

SetScissorRect(rctSprite1);
Render(Sprite1);
SetScissorRect(rctSprite2);
Render(Sprite2);
.......

这样就不使用 Clear() 方法了???
请问各位高手,使用 SetScissorRect 在 DX9 中实现“脏矩形”有现实意义吗???

0

主题

56

帖子

62

积分

注册会员

Rank: 2

积分
62
发表于 2009-3-20 09:29:00 | 显示全部楼层

Re:脏矩形中的 “裁剪” 该如何处理???

还是需要Clear的。你在Clear时也要传入相应的矩形。如果你不做Clear。首先上一帧绘制的像素如果没有被下一帧绘制的像素覆盖,那么会残留在屏幕上。其次,如果你用到DepthStencil buffer,那么不Clear绘制时会出问题的。

59

主题

404

帖子

404

积分

中级会员

Rank: 3Rank: 3

积分
404
 楼主| 发表于 2009-3-23 17:14:00 | 显示全部楼层

Re:脏矩形中的 “裁剪” 该如何处理???

非常感谢各位的回复。

我觉得脏矩形正是要把上一帧的 没有变化的像素 残留在屏幕上,只画 变化了的像素。

这样才能提高效率啊。

概括的说就是“只画变化的,保留不变的”

这个我是用在2D技术上。请问这样是否真的不用Clear了?

0

主题

56

帖子

62

积分

注册会员

Rank: 2

积分
62
发表于 2009-3-24 09:51:00 | 显示全部楼层

Re:脏矩形中的 “裁剪” 该如何处理???

我的意思是说你需要Clear你脏矩形内的像素,将脏矩形的Rect传给Clear函数。干净的区域你可以留在屏幕上,但脏的地方还是需要Clean的。
如果你能保证你每次绘制出来的像素能够覆盖整个脏矩形(比如你有个覆盖全屏的大背景图),那么就可以不用Clear了。

59

主题

404

帖子

404

积分

中级会员

Rank: 3Rank: 3

积分
404
 楼主| 发表于 2009-3-24 11:39:00 | 显示全部楼层

Re:脏矩形中的 “裁剪” 该如何处理???


如此说来脏矩形技术的核心就是SetScissorRect和Clear函数了,然后自己通过算法求“脏”了的地方(一组矩形区域的并集)
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

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

GMT+8, 2026-1-20 01:35

Powered by Discuz! X3.4

Copyright © 2001-2021, Tencent Cloud.

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