Другие языки программирования и технологии

Как происходит ориентация в пространстве?

Вопрос для программистов-инженеров.
Представим есть почти бесконечно длинный неоднородный объект.
Если мы его создадим в какой нибудь 3Д-программе, то спокойно сможем передвигать его по всей длине.
вопросы
1)Как объемный объект добавляется в память компьютера?
Я бы сказал, что каждому пикселю объекта присваиваются координаты относительно начала отсчета, и когда объект двигают, допустим. вправо, то показываются пиксели, у которых совпадают х-координаты с местоположением камеры.
Но это моя теория, как обстоит на практике я не знаю
2)как просчитывается его перспектива.
Ведь мы видим не один слой его пикселей, а ту часть объекта, которая попадает в поле зрения камеры. Но по условиям перспективы, с удалением размеры объекта тоже уменьшаются.
Но как объяснить это процессору?
Мало в каких 3Д-программах можно сделать реально бесконечно длинный объект. В основном, потому, что это на фиг не нужно - увеличивает время растеризации, а практическое применение придумать сложно. На вскидку, вспоминается только Vue, с его infinit terrains и Mandelbulb 3D. И там и там процедурная генерация...

1). В памяти компьютера у 3д объекта никаких пикселей нет. Есть только координаты вершин полигонов. Растеризируется только минимально необходимая поверхность, т. е. видимая камерой, но ограниченная вертексами, т. е. "кусок" одного полигона не может быть растеризован, только полигон целиком. В случае если у тебя многокилометровый куб, в растеризатор он таки попадает целиком. Ну а в пиксельный конвеер попадает только та часть, которая будет видна на экране.

2). "мы видим не один слой его пикселей" -- не понял, про что это вообще... Ну да, если камера не ортогональная, то учитываются перспективные искажения. Часто, ещё и искажения линзы - например при очень широкоуголной камере получим "рыбий глаз". Это тоже часть этапа растеризации объекта. Как это объяснить процессору - алгоритмом, листов на пять, на 95% процентов состоящим из тригонометрии. Тут это объяснить не получится, но если интересно - в сети полно открытых реализаций, на куче языков.
ДМ
Денис Муравин
7 947
Лучший ответ
Алексей Викторов 1)ну а если как я сказал объект неоднородный?
Конечно такой тоже можно сохранить только по вершинам полигонов, но их потребуется тогда очень много?

Алексей Викторов 2)хорошо, как вы сказали мы сохраняем только вершины.
Например в питоне-c.create.polygon(35,23-начальные, 45,67-конечные)
По этим координатам имеем прямоугольник.
Но как программа находит допустим его середину?
Она же тоже должна ориентироваться по координатам?
И перемещение должно синхронизироваться с координатами?
3)мы смотрим на объект под углом, и видим допустим его конец. а как программа рассчитывает место где объект должен оканчиваться?
Ведь это не одномерная система, для которой с какой точки не посмотри объект будет там же, а трехмерная.
То есть надо не только знать конечные координаты, но и угол обзора и поворота.
Я конечно понимаю, что это хорошо описывается математикой и даже кватернионами. Но хотелось бы разобраться в этом вопросе хотя бы поверхностно
Алексей Викторов Как это объяснить процессору - алгоритмом, листов на пять, на 95% процентов состоящим из тригонометрии. Тут это объяснить не получится, но если интересно - в сети полно ткрытых реализаций, на куче языков.
Можно ссылочки, я просто не знаю по каким параметрам искать?
Денис Муравин - ну а если как я сказал объект неоднородный?
в той части, которая вас интересует, такое понятие вообще отсутствует. На этапе текстурирования - да, можно дисплейсментом или шейдерами, хотя это тоже не совсем то... а до этого любой полигон вполне себе однородный, плоский. И да, их нужно очень много. В реальном времени могут быть миллионы. В не реалтайме - на порядок больше.
- как программа находит допустим его середину?
во первых просто - середина = (начальный вектор плюс (конечный вектор минус начальный вектор)) разделить на два. Во вторых, непосредственно для рендера это не нужно, разве что что бы вектор нормали посчитать.
Денис Муравин - мы смотрим на объект под углом, и видим допустим его конец. а как программа рассчитывает место где объект должен оканчиваться?
проецирует виртуальную перспективу на 2д поверхность. В этом и есть смысл растеризации. Это всё в тех 5и листах, о которых я говорил...
- То есть надо не только знать конечные координаты, но и угол обзора и поворота.
Для рендера - не нужно. Есть разные реализации, но чаще всего для рендера вообще объектов не существует. Только набор координат полигонов. Работой с объектами занимается другая часть программы.
- Можно ссылочки, я просто не знаю по каким параметрам искать?
искать софтверные реализации 3д рендера. Можно на гитхабе, например. Из простейших статей, вот: https://habr.com/ru/post/340234/
это проходят на курсе компьютерной графики. любой объемный объект может описываться набором функций или многогранников
ЕЖ
Евгения Жоха
73 710
Алексей Викторов поподробнее можно?

Похожие вопросы