java - 全屏时视口(viewport)似乎稍微偏离屏幕

标签 java opengl ubuntu fullscreen jogl

在 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/

相关文章:

c++ - 对屏幕上绘制的元素进行深度排序

git Push 崩溃并显示 "inflate returned -551"

java - 如何使用 HTML 中的嵌入 Java 应用程序访问本地文件系统

java - 交换/重新排序记录

opengl - GLSL 内存屏障()

opengl - 哪些 3D 卡支持全场景抗锯齿?

ubuntu - crontab 一直被覆盖

ubuntu - Android Studio [Ubuntu] 中的清理项目快捷方式

java - Spring 中调度程序 servlet xml 的名称

java - 浏览文件