在 OpenGL 程序中,我有一个 Camera 对象,它将投影矩阵设置为以 Sprite 为中心。它工作得很好,直到我进入全屏模式,我注意到我关注的对象偏离了中心。在调整了我的分辨率后,我发现 4:3 分辨率没有这个问题(我最初的分辨率是 1680x1050),然后我发现了以下内容。
1280x1024:对象居中。
1280x960:对象居中。
1280x720:对象未居中,整个视口(viewport)似乎已向左移动。也就是说,当我向左移动鼠标时,它似乎移出了屏幕几英寸,并且屏幕右侧有一个黑色区域,其中没有绘制任何内容,并且我的鼠标也不会移入。
有人遇到过这样的问题吗?如果这很重要的话,我会使用 Ubuntu。
最佳答案
您在设置投影矩阵时是否考虑了纵横比?
This tutorial如果没有的话,可能会是一本有用的读物。
如果有代码示例有帮助的话,这是我自己的版本(用Python编写,但翻译成Java应该很简单); initPerspectiveMatrix 采用纵横比,即高度/宽度。
def calcFrustumScale(fov):
return (1.0 / np.tan(np.deg2rad(fov) / 2.0))
def initPerspectiveMatrix(aspectRatio = 1.0):
scale = calcFrustumScale(60)
ARscale = scale*aspectRatio
near = 0.5
far = 1000.0
perspMx = np.array([[ARscale, 0.0 , 0.0 , 0.0 ],
[ 0.0 , scale, 0.0 , 0.0 ],
[ 0.0 , 0.0 , (near+far)/(near-far), (2*near*far)/(near-far)],
[ 0.0 , 0.0 , -1.0 , 0.0 ]], dtype='float32')
关于java - 全屏时视口(viewport)似乎稍微偏离屏幕,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/5296499/