【发布时间】:2021-11-01 22:31:48
【问题描述】:
有没有办法将 NDC 转换为窗口,但单独指定剪切区域,使其与实际窗口大小相匹配?
背景:我有一堆将 2D 地图渲染到窗口的 openGL 代码。这是很多复杂的代码,因为我同时使用 GPU 和 CPU 在地图上进行绘制,所以在两个地方保持一致的坐标系很重要。为了简单起见,我使用 glViewport(0,0,mapSizeX, mapSizeY),现在地图坐标与帧缓冲区中的像素坐标很好地对应,这正是我所需要的。我可以使用 GLSL 绘制一些地图,调用 glReadPixels 并使用 CPU 在其上绘制,然后使用 glDrawPixels 将其发送回帧缓冲区,所有这些都使用相同的坐标系。最后我使用 GLSL 在上面画了一些最后的东西(我不想放大)。一切正常,除了...
窗口与地图大小不同,glViewport 不只是设置转换。它还设置了剪辑。所以现在当我去画最后几个项目时,窗口比地图大,我在屏幕顶部附近画的东西会被剪掉。有解决办法吗?
【问题讨论】:
-
"我将标准化设备坐标设置为地图大小" - 不是。标准化设备空间是一个唯一的立方体,左、下、近 (-1, -1, -1) 和右、上、远 (1, 1, 1)。您无法设置或更改它。剪辑在剪辑空间 (
gl_Position) 中完成:-w -
我澄清了我对 glViewport 的使用,以防我不清楚。你是说没有办法做我需要的事情吗?