Я пишу приложение для исследования космоса.Я решил, что световые годы будут единицами, и точно смоделировал расстояния между звездами.После долгой работы и большой кропотливой работы (в основном я изучаю веревки), я установил, что камера работает правильно с точки зрения космического корабля, проходящего через космос.
Изначально я не обращал внимания на параметр zNeargluPerspective (), пока я не работал над планетарными объектами.Поскольку моя шкала указана в световых единицах, я вскоре понял, что из-за того, что zNear равен 1.0f, я не смогу видеть такие объекты.После экспериментов я пришел к следующим цифрам:
#define POV 45
#define zNear 0.0000001f
#define zFar 100000000.0f
gluPerspective (POV, WinWidth/WinHeight, zNear ,zFar);
Это работает исключительно хорошо, потому что я смог совершить кругосветное путешествие по моей солнечной системе (позиция 0,0,0) и подойти близко к планетам, которые выглядят великолепно освещенными.и текстура сопоставлена.Однако другие системы (не в положении 0,0,0) проходить намного сложнее, потому что объекты удалялись от камеры необычными способами.
Однако я заметил, что странные визуальные глюки начали происходить при путешествии по вселенной.Объекты позади меня будут «оборачиваться» и показываться вперед, если я поверну на 180 градусов в направлении Y, они также появятся на своем первоначальном месте.Таким образом, при искривлении в пространстве большинство звезд правильно параллаксируются, но некоторые появляются и движутся в противоположном направлении (что, по меньшей мере, мешает).
Изменение значения zNear на 0.1f немедленно исправляет ВСЕ эти глюки.(но также не разрешит объекты солнечной системы).Так что я застрял.Я также пытался работать с glFrustum, и он дает точно такие же результаты.
Я использую следующее для просмотра мира:
glTranslatef(pos_x, pos_y, pos_z);
С соответствующим кодом камеры для ориентации по мере необходимости.Даже отключение функции камеры ничего не меняет.Я даже попробовал gluLookAt (), и снова он дает те же результаты.
Есть ли у gluPerspective () ограничения при использовании экстремальных значений zNear / zFar?Я пытался уменьшить диапазон, но безрезультатно.Я даже изменил свои мировые единицы с световых лет на километры, масштабируя все и используя большее значение zNear - ничего.ПОМОГИТЕ!