首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >Xbox360在WinXP D3D9上的D3DRS_VIEWPORTENABLE版本是什么?

Xbox360在WinXP D3D9上的D3DRS_VIEWPORTENABLE版本是什么?
EN

Stack Overflow用户
提问于 2011-01-03 17:33:01
回答 1查看 206关注 0票数 1

我正在为Xbox360和WinXP维护一个多平台代码库。我在XP端看到了一个问题,似乎与Xbox360版本上的D3DRS_VIEWPORTENABLE有关,但在WinXP D3D9上没有对应的版本。This article有一个有趣的想法,但构造单位矩阵的唯一方法是向D3DVIEWPORT9::X和D3DVIEWPORT9::Height提供负数,但它们是无符号数字。(我试着输入负数,但没有发生任何有趣的事情。)

那么,如何在WinXP/D3D9下模拟D3DRS_VIEWPORTENABLE的行为呢?

(为了清晰起见,我看到的结果是一个2d屏幕对齐的四边形在Xbox360上工作得很好,但在WinXP上是偏移/拉伸的。实际上,由于应用了视口变换,(0,0)在WinXP上从屏幕中央开始,而不是像在Xbox360上那样从左下角开始。)

更新:在我写这个问题的时候,我还没有Xbox360开发工具包,但后来我得到了一个。我注释掉了D3DRS_VIEWPORTENABLE状态的禁用,在Xbox360上产生了与在WinXP构建上完全相同的行为。因此,必须有一些DirectX魔术来弥补在WinXP上模拟D3DRS_VIEWPORTENABLE被关闭的差距。

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2011-01-14 02:09:08

与其考虑如何将底片放入视窗矩阵中,不如从投影矩阵中考虑它。

在投影矩阵之后直接应用视口矩阵。因此,如果您设想将视区设置为identity,并将其与wvp (world-view-projection)矩阵相乘。即

代码语言:javascript
复制
world * view * projection * viewport

现在可以将视口设置为所需的任何值。

当然,这实际上也不是解决问题的最好方法。一些驱动程序可能会根据视口中的条目进行优化(例如,它们实际上可能不会进行矩阵相乘)。我个人不会使用上面的系统,因为我可以预见它会带来太多的问题。

那么,这会把你带到哪里?

实际上,它仍然很简单。如果您将投影矩阵乘以与视口矩阵相反的矩阵,那么您会发现,当应用视口“矩阵”时,它们相互抵消,您将得到投影的直接输出。现在,视口已被有效地“禁用”。

票数 2
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/4583380

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档