2011-03-14 1 views
0

В программе OpenGL у меня есть объект Camera, который устанавливает матрицу проекции в центр спрайта. Он работал нормально, пока я не перешел в полноэкранный режим, там я заметил, что объект, на котором я сосредоточился, был в центре. После беспорядка с моим разрешением я заметил, что разрешения 4: 3 не имеют этой проблемы (я был первоначально на 1680x1050), а затем я нашел следующее.Viewport выглядит слегка вне экрана в полноэкранном режиме

1280x1024: объект по центру.
1280x960: объект центрирован.
1280x720: объект не центрирован, и весь видовой экран, кажется, сдвинулся влево. То есть, когда я перемещаю мою мышь, кажется, что она сдвигается с экрана на несколько дюймов, и справа от моего экрана есть черная область, где ничего не рисуется, и моя мышь не будет двигаться.

У кого-нибудь была такая проблема? Я на Ubuntu, если это важно.

ответ

1

Учитывается ли соотношение сторон при настройке матрицы проекции?

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') 
+0

Я использую glOrtho для создания моей перспективы. На каждой итерации камера вызывает glOrtho (objectCenter.x-80, objectCenter.x + 80, objectCenter.y-50, objectCenter.y + 50, -1, 1) (при условии представления соотношения 16:10) и каждый раз в окне меняет размер. Я вызываю glViewport (0, 0, windowWidth, windowHeight). Я что-то пропустил? – HahaHortness

+0

Я не знаком с glOrtho (я все еще изучаю OpenGL, и я решил пойти с 3,3 ядра, поэтому glOrtho, glFrustum и т. Д. Устарели), но, прочитав документацию, похоже, что это сработает для 16:10 соотношение сторон, так что я в недоумении. Может ли быть что-то еще в стеке матриц перед glOrtho? Или что вы не в правильном режиме матрицы? –

0

Я полагаю, что ваш монитор подключен через VGA и неправильно откалиброван для этого разрешения. Таким образом монитор переключает вывод дисплея.

Возможные решения включают в себя:

  • откалибровать монитор (либо автоматически, либо вручную, либо с помощью органов управления монитором или управлением операционной системы, если таковые имеются)
  • переключить подключение к цифровой один (скажем, DVI или HDMI).
Смежные вопросы