我有下面的glm透视投影
world.cameraProjection = glm::perspective(glm::radians(45.0f), app.aspectRatio, 0.0f, 100.0f);
world.cameraProjection = glm::scale(world.cameraProjection, world.scale);
world.cameraView = glm::translate(world.cameraProjection, world.camera);
我想猜一个值,我将不得不使用它来绘制一条具有像素完美宽度的线。
我知道我的屏幕宽度,现在我尝试将代表1个像素的视口百分比转换为glm cameraView的距离。因此,即使缩放改变了,我绘制的线在屏幕上的显示大小也总是相同的。
glm中有没有函数可以做到这一点?
1条答案
按热度按时间mklgxw1f1#
使用透视投影时,表示一个像素的x和y距离取决于深度(z距离)。
归一化设备空间中的投影尺寸可以被变换为视图空间中的尺寸,其中:
你想要的是:
如果你知道一个物体的z距离,公式是:
其中,
fov_y
是辐射视野,height
是视野的高度,以像素为单位,z_eye
是从物体到摄像机的绝对距离。请考虑使用平行投影(Orthographic projection),其中投影的大小不取决于与相机的距离。