secondsen 发表于 2011-7-22 09:11:48

2D怎么让精灵在指定的矩形内刷新?

2D怎么让精灵在指定的矩形内刷新?

RT。。。

比如 创建了个 1024X768的窗口。。。我想只在 x = 512 y = 384 width = 512 height = 384 的矩形内刷新。。。其他地方不会有精灵的显示出来。。。精灵超出范围的部分不显示。。。应该怎么弄呢??

device::SetViewport可以吧?那如果我有10个精灵在上面的范围刷新,10个无限制,10个又在别的范围内刷新,其他的又和以上的不同。。。那是不是要创建很多个device才行?

shawind 发表于 2011-7-22 09:29:12

为所有被显示资源建立一个列表,每次在显示之前,先处理列表,再显示。这样就没问题了。
比如你说的这种,可以先把 x = 512 y = 384 width = 512 height = 384 的矩形外的精灵从列表中排除出去,然后再显示整个列表,这样只能是矩形内的被显示。

当然对于2D游戏而言,列表这样数据结构还是太简单了,如果用二、四叉树,可能会更好一点,可以实现更多的效果,更好的性能。

weiwuyuan 发表于 2012-9-7 11:52:14

这是一个裁减问题,如果是dx9的话,像这样调用:
RECT rcScissorRect = { 20, 20, 50, 50 };
m_pD3DDevice->SetScissorRect(&rcScissorRect);// 使得下面的渲染仅对该裁减区域有效,区域外的内容将不被渲染,

用完别忘了取消裁减区域,直接:m_pD3DDevice->SetScissorRect(NULL);就可以
也可以传整个窗口的RECT

另外别忘了在初始化的时候开启裁减功能:
m_pD3DDevice->SetRenderState(D3DRS_SCISSORTESTENABLE, TRUE);

secondsen 发表于 2012-9-7 14:55:34

谢谢LS,不过这都是一年前的帖子了,我现在改学opengl去了,嗯嗯,不过学会了这个opengl也能用的上哈,一通百通

weiwuyuan 发表于 2012-9-7 15:45:20

嘿嘿,纯顶了
页: [1]
查看完整版本: 2D怎么让精灵在指定的矩形内刷新?