Лучший способ сделать это - группировать объекты по шкале и визуализировать их отдельно. Например, солнечная система могла бы использовать в качестве единицы шкалы Земли, которая равна 6378.1 km
радиусу, и 147.09x10^6 km
вдали от солнца.
Нормализация их вокруг радиуса Земли, получит:
Earth's Radius: 1.0 unit
Distance from sun: 23061.72 units
Тот же принцип нормализации относится и к другим телам Солнечной системы:
Venus' Radius: 0.9488405638 units
Distance from sun: 16851.41 units
Pluto's Radius: 0.186105580 units
Distance from sun: 695633.4 units
Вы также должны настроить вашу глубину включать такие цифры. Пока тела имеют много пространства между собой, ошибок и z-боев не должно происходить. So:
- Перенести первую группу. (большой диапазон глубины)
- Затем очистите только глубину экрана.
- Затем визуализируйте объекты, которые являются маленькими и близкими к камере, такие как астероиды, космические корабли и т. Д. Вещи, которым не нужны такие большие цифры . (здесь используется значительно меньший диапазон глубины)
- Все готово.
Как вы можете видеть, вы можете сгруппировать сцену по шкале и на нескольких уровнях. Например, вы можете получить список координат для локальной группы звезд, сделать их первыми как точки, очистить глубину, затем отобразить тела системы, в которые вы находитесь, очистить глубину снова и визуализировать локальные объекты в твоя позиция. Вы также должны учитывать, что планета, подобная Плутону, едва видна с Земли, поэтому вы можете просто использовать намного меньший диапазон глубины для рисования.
Вы не можете использовать астрономические расстояния в графических расчетах; просто нет достаточной точности в двойном, чтобы справиться с ними. –
Чтобы уточнить, что @ColonelThirtyTwo: написал: При выполнении астрономических визуализаций он обычно сводится к тому, что все объекты находятся на бесконечности и касаются только угловых направлений. – datenwolf
И если возможен следующий вариант ?: Если объект находится слишком далеко, передайте и масштабируйте объект по радиус-вектору объекта камеры таким образом, чтобы он был видимым. Если камера двигалась, проекция тоже двигалась. – TuringMachine