OBS-D3D11
+ -

RSSetViewports设置视窗磊小

2024-11-19 1 0

Direct3D中 的一个重点同时也是难点在于创建和设置视口。

视口定义了我们渲染到屏幕上的面积。在单人或者非分割画面的多人游戏中一般都为全屏,所以我们设置视口的宽度和高度即为交换链的宽度和高度。对于分屏游戏,我们可以创建两个视口,一个视口定义在屏幕上方,另一个定义在屏幕下方。为了渲染分屏视口,我们可以分别以两位不同玩家的角度来渲染。

视点的创建由填充D3D11_VIEWPORT函数和设置调用上下文的RSSetViewports函数将其设置到渲染上下文中来完成。RSSetViewports函数需要我们设置的视口数量和视口对象的列举。全屏视口的创建和设置的相关代码在代码段五中有列举,其中X和Y标明左侧和顶部屏幕的位置,最小和最大深度是0到1之间的值,表明了视口深度的最小和最大值。

    D3D11_VIEWPORT vp;
    memset(&vp, 0, sizeof(vp));
    vp.MaxDepth = 1.0f;
    vp.TopLeftX = (float)x;//视窗距窗口的X距离
    vp.TopLeftY = (float)y;    // 视窗距窗口的Y距离
    vp.Width = (float)width;//视窗宽
    vp.Height = (float)height;//视窗高
    device->context->RSSetViewports(1, &vp);

Width和Height是光栅化后图像投影后在窗口的大小(不一致自动缩放)
TopLeftX和TopLeftY投射到窗口后中心点在窗口中的位置

RSSetViewports定义如下:

void RSSetViewports(
  [in]           UINT                 NumViewports,
  [in, optional] const D3D11_VIEWPORT *pViewports
);

0 篇笔记 写笔记

RSSetViewports设置视窗磊小
Direct3D中 的一个重点同时也是难点在于创建和设置视口。视口定义了我们渲染到屏幕上的面积。在单人或者非分割画面的多人游戏中一般都为全屏,所以我们设置视口的宽度和高度即为交换链的宽度和高度。对于分屏游戏,我们可以创建两个视口,一个视口定义在屏幕上方,另一个定义在屏幕下方。为了渲染分屏视口,我们......
作者信息
我爱内核
Windows驱动开发,网站开发
好好学习,天天向上。
取消
感谢您的支持,我会继续努力的!
扫码支持
扫码打赏,你说多少就多少

打开支付宝扫一扫,即可进行扫码打赏哦

您的支持,是我们前进的动力!