Я имею дело с экспериментальной установкой, где простая картина отображается на модифицированную генами муху. Изображение проецируется на экран с определенными расстояниями до этой мухи.Как настроить коррекцию перспективы OpenGL?
Теперь настало время настроить коррекцию перспективы, так что отображаемое изображение, например горизонтальная полоса, становится более широким на большем расстоянии от точки зрения мухи (experimental setup). Код теперь выглядит следующим образом:
glMatrixMode(GL_PROJECTION);
glLoadIdentity();
if(!USEFRUSTUM)
gluPerspective(90.0f, 2 * width/height, 0.1f, 100.0f);
else
glFrustum(92.3f, 2.3f, -25.0f, 65.0f, 50.0f, 1000.0f);
значение было введено кем-то несколько лет назад, и мы выяснили, что они не являются точными больше. Однако я путаю, какие значения ввести или изменить, чтобы проекция работала должным образом, потому что, как вы можете видеть в экспериментальной установке, поле зрения мухи немного наклонено.
Я подумал о тех значениях:
- fovy = угол между а и с
- ширины и высоты мера на проекционном экране
- но что такое zNear? Должен ли я измерять расстояние от мухи до верхней или нижней части экрана? Я не понимаю, почему кто-то вошел в 0.1f, потому что это кажется мне слишком близко.
- Как узнать значение zFar? Является ли это максимальным расстоянием объекта на лету?
Я получил информацию о glPerspective от: https://www.ntu.edu.sg/home/ehchua/programming/opengl/CG_BasicsTheory.html Я также проверил Simplest way to set up a 3D OpenGL perspective projection, но этот пост не относится к моей экспериментальной установке, которая является источником моего замешательства.
Благодарим за помощь!
Hey datenwolf! Большое спасибо за ваш ответ.Теперь я понял, как принимать измерения для ближнего, нижнего, левого и правого и того, как выглядит усечка в моем случае. Я еще не понимаю, как определить масштабный коэффициент s. Я читал в «Руководстве по программированию OpenGL:« Официальное руководство по изучению OpenGL, версии 3 »(книги Google), что, пока мои измерения используют последовательную единицу, я могу оставить их немасштабированными. Диапазон глубины может зависеть от глубины визуального поля мухи? Думаю, тогда я мог бы обсудить с моими коллегами соответствующую ценность. – TheCooocy
@ TheCooocy: Да, вы можете полностью опустить 's' (т. Е. S = 1) до тех пор, пока вся геометрия, которую вы рисуете с помощью OpenGL, непротиворечива. Поскольку вы взаимодействуете с физическим существом (животным), это имеет большое значение для определения геометрии, которую вы собираетесь рисовать с помощью OpenGL в тех же физических единицах, в которых измеряется проекционная система «снаружи». * расстояние не должно быть расстоянием до фактического экрана, но, вероятно, ближе к лету (изображение маленького крошечного экрана прямо перед глазами мухи). Но для физических ограничений в вашей настройке вы должны использовать этот больший экран. – datenwolf
@ TheCooocy: Таким образом, тогда вы должны принять соотношение между «виртуальным» расстоянием «n_» и фактическим расстоянием экрана «n» и масштабировать влево, вправо, снизу, сверху и рядом с этим коэффициентом n_/n '. Если вы делаете все, скажем, * мм * юниты, это будет расстояние отсечки, при котором объекты (внезапно) исчезают. По практическим соображениям, касающимся разрешения буфера глубины, вы должны выбрать значение * far * as small и значение для * near * как можно меньше для размещения геометрии, которую вы хотите нарисовать. – datenwolf