gpt4 book ai didi

opengl - 为什么视口(viewport)的宽度/高度在 glViewportIndexed 中从 int 变为 float

转载 作者:行者123 更新时间:2023-12-05 01:21:06 26 4
gpt4 key购买 nike

glViewport:宽度/高度是整数(像素)。

但是 glViewportIndexed 具有这些 float 值。让它们 float 有什么好处。我的理解是基于像素始终是整数这一事实。

最佳答案

它可能看起来像 glViewport*() 调用指定像素矩形。但是如果你查看 OpenGL 渲染管线的细节,事实并非如此。它们指定用于视口(viewport)转换 的参数。这是将规范化设备坐标 (NDC) 映射到窗口坐标的转换。

如果 xywh 是您指定的视口(viewport)尺寸,xNdcyNdc 你的 NDC 坐标,视口(viewport)变换可以这样写:

xWin = x + 0.5 * (xNdc + 1.0) * w;
yWin = y + 0.5 * (yNdc + 1.0) * h;

在此计算中,xNdcyNdc 当然是浮点值,在它们通常的 (-1.0, 1.0) 范围内。我看不出有什么好的理由可以将 xywh 限制为整数值这个计算。此转换在光栅化之前应用,因此无需将任何内容四舍五入为像素单位。

视口(viewport)尺寸不需要整数值甚至可能非常有用。假设你有一个大小为 1000x1000 的窗口,你想在窗口中渲染 9 个大小相等的 subview 。 API 没有理由阻止您做最自然的事情:将每个 subview 的大小设置为 333.3333x333.3333,并将这些大小用于 glViewport() 的参数。

如果您查看 glScissorIndexed() 进行比较,您会注意到它仍然采用整数坐标。这是完全有道理的,因为 gScissor() 实际上确实指定了窗口中的像素区域,这与 glViewport() 不同。

关于opengl - 为什么视口(viewport)的宽度/高度在 glViewportIndexed 中从 int 变为 float,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/24199841/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com