OpenGL: дрожание строки при больших сценах и малых значениях

#opengl-es #camera #line #culling #frustum

#opengl-es #камера #линия #отбраковка #усечение

Вопрос:

В настоящее время я рисую 3D-солнечную систему и пытаюсь нарисовать траекторию орбит планет. Вычисленные данные верны в трехмерном пространстве, но когда я направляюсь к Плутону, линия орбиты дрожит повсюду, пока камера не остановится полностью. Я не думаю, что это уникально для этой конкретной планеты, но, учитывая расстояние, на которое должна перемещаться камера, я думаю, что она более заметна на этом расстоянии.

Я подозреваю, что это как-то связано с усечением, но я подключал значения к каждому из компонентов и, похоже, не могу найти решение. Чтобы увидеть что-либо, мне приходится использовать очень маленькие числа (величина E-5) для планеты и близлежащих точек орбиты, но затем до величины E 2 для других регионов (может быть, мне нужно нарисовать его дважды с разными усечениями?)

Любая помощь с благодарностью…

Комментарии:

1. Похоже, вы достигли предела точности с плавающей точкой. Попробуйте использовать double.

2. @Banthar: не поможет, поскольку большинство / все реализации OpenGL имеют одинарную точность внутри.

3. Возможно, вы превышаете пределы разрешения вашего буфера глубины: по сути, ваше дальнее расстояние (1E 2), деленное на ваше ближнее расстояние (1E-5), должно быть меньше 2 ^ (количество бит в вашем буфере глубины). В этом случае вам нужно около 24 бит, чтобы покрыть диапазон 1E 7. Мой Mac — 16 бит.

4. Мы пытались использовать двойные значения по аналогичным причинам, но я не думаю, что это решило аналогичную проблему. Ограничение буфера глубины — это то, с чем я постоянно сталкиваюсь — как мне расширить диапазон буфера глубины? (Я только что заметил, что пометил это неправильно — я должен был пометить opengles, поскольку я работаю на Android)

5. Просто чтобы выбросить это: имеет ли смысл, что один из способов исправить это — переместить камеру только наполовину и заставить планету двигаться на то же расстояние, но в противоположном направлении, т.Е. К камере?

Ответ №1:

Спасибо всем за ответ, но моим решением было нарисовать его с помощью тех же матриц, которые рисовали планету, поскольку она также не подпрыгивала. Таким образом, решение действительно заключается в том, чтобы лучше кодировать, извините.