Как стать автором
Обновить

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

Я себе в голове порой плохо представляю 4-ёх мерное пространство, а Вы раз и на Си написали!
Огромное спасибо за пост!
Я может не точную аналогию проведу, но мы легко представляем себе 1 2ву и 3х мерные массивы, с 4-5-6 уже сложнее.
Но в коде с ними ровно как и с первыми по сложности.

но всё таки проПисать графику да, мышление не только пространственное надо :))
Ну его (4-х мерное пр-во) мало кто представляет на самом деле. Дело в том, что для математики любое n-мерное пространство легко поддается измерениям и вычислениям. Но я тоже благодарен за пост, повтыкал в ролики с удовольствием, и даже попытался код почитать, вникнуть!
Спасибо за пост! С большим интересом прочла Вашу предыдущую заметку — но эта еще интереснее :)Жаль, что видео такие короткие. Стоило бы сделать их зацикленными и длящимися не 3-4 секунды, а 30-40, чтобы за десяток циклов можно было попытаться «грокнуть», «прочувствовать» четырехмерную модель.

Кстати, сейчас у Вас 4-мерная модель проецируется сначала на трехмерное пространство, а затем — на двумерную плоскость. Может быть, стоит попробовать сделать стереоскопическое видео для анаглифических очков или «техники скрещенного взгляда»? (не знаю, как правильно называется второй, вольно обозванный мною метод)

Также очень любопытно было бы не только видео, но и программа, позволяющая манипулировать 4-мерными фигурами или разгуливать по 4-мерной сцене (этакий Doom или Wolfenstein 3D).
Я старался сделать видео как можно боле короткими, но с таким расчётом, чтобы они были «зацикленными». 4 секунды вращения куба это 40 минут рейтрейсинга. Посмотрите архив ссылку на который я дал в самом конце: там видео в хорошем качестве. Запустите и нажмите «replay» — будет бесконечное видео.

Предлагаете сделать две картинки из двух рядомстоящих точек? Это скорее работа для простого скрипта на Lua — код рейтрейсера на C не изменится. Нужно лишь сформировать две сцены, отрейтрейсить и совместить их. Проверить последний шаг я не смогу, потому что мне никогда не удавалось увидеть изображение на стереограммах.

4D-realtime это, конечно, круто, но пока что на обычном PC нельзя сделать даже 3D-realtime. Один кадр 4D делается 5 секунд — до realtime тут далеко :)
Или просто взять какой-нибудь простой видеоредактор и скопировать в него десять раз то самое 4-секундное видео, полученное в результате рендеринга.
Я где-то недавно находил апплет, где можно крутить 4D и смотреть через красносиние очки либо «техникой скрещенного взгляда».
Была статья с обзором 4D игр. В частности там упоминался шутер Adanaxis. Может присмотрите себе интересное что.
А как бы понять это четырехмерное пространство? Вики интересно, но если прям учебником бы каким? :) А то совсем не технарь, но для общего развитию хочу. :)
Я на youtube давно смотрел эту серию из 2 роликов, там максимально доходчиво показывают, я даже в голове сумел представить. Главное внимательно вникать в то, что рассказывают, там специально медленно и с подводящими к пониманию примерами.
Рекомендую ещё Dimensions, ничего более доходчивого не встречал по данной теме.
«I have endeavoured to present the subject of the higher dimensionality of space in a clear manner, devoid of mathematical subtleties and technicalities…

> На этом видео куб неподвижен, а 4-х мерный наблюдатель пролетает через куб

Насколько я понимаю, пролетая через 4-x-мерный куб, наблюдатель, должен пересечь его грани (трехмерные кубы) два раза. Но на видео, кажется, пересекли один раз. Мы что, пролетели через ребро? Или остановились внутри куба? Я запутался
Извините, не разглядел, уж очень быстрое видео. Все верно — мы пролетаем между двумя трехмерными гранями через две противоположные друг другу трехмерные грани
Не любая связная 4хмерная область останется связной в трехмерной и тем более двухмерной проекции. Для сложных сцен наверное схитрить вашим методом не удастся.
Вы имеете ввиду случай когда часть области за камерой? В любом случае алгоритм в конечном итоге выглядит так: на экране проверется каждый, скажем, 15-й пиксель (у меня это параметр сцены options.thickness) и получается сетка. Затем начинает работать заливка. Мой алгоритм может потерять элементы которые помещаются в квадратик 15×15. Но когда у меня стоит выбор: возможная неточность рендеринга или очень долгий рендеринг, я вынужденно выбираю первое.
Еще есть вероятность, что объект не примитив, но это не наш случай. А сейчас угадываете, начиная заливку из области в которой гарантированно есть проекция или случайно блуждаете по экрану?
Я проверяю пиксели с координатами (15M, 15N) и от тех пикселей где есть попадание, начинаю заливку. 15 это параметр «толщины сцены». Если на сцене есть объекты которые дают маленькую проекцию, то надо взять не 15, а скажем 5, т.е. написать options = {thickness = 5}.
>Аналогично для трёхмерного зрения: четырёхмерный шар будет казаться наблюдателю трёхмерным эллипсоидом.
По-моему он будет трехмерным шаром
Для некоторых моделей 3-х мерного зрения — возможно.

Возьмём 4-х мерный шар и глаз 4-х мерного наблюдателя. Проведём всевозможные лучи из глаза в шар — лучи образуют 4-х мерный конус. Сечения конуса перпендикулярные оси — шары. У наблюдателя есть 3-х мерный ровный экран куда всё проецируется. Если экран перпендикулярен оси эллипса то наблюдатель увидит шар, а если не перпендикулярен то эллипсоид.
Да, в общем-то так же, как и в нашем пространстве, если проектор поставить не под прямым углом к экрану. Но это как-бы искажения, четырехмерный наблюдатель же не увидит «силуэт» четырехмерного шара как эллипс.
По этой причине некоторые люди не умеют рисовать. Когда они рисуют табурет они стараются отобразить на рисунке прямые углы сиденья (они ведь знают, что у табурета квадратное сиденье). Это вопрос терминологии и нестрогих допущений. «Силуэт» до шара дорисует мозг, но проекция все равно останется эллипсом.
Но шар (не окружность) на картине всегда рисуют как шар
В смысле как окружность а не элипс
Пожалуй, для того чтобы проекцией стал эллипс, надо чтобы исходный объект был 4хмерной сферой, а не шаром. Сам попался на ту же ошибку с терминологией. Наверное вы правы.
А, действительно, сфера-то в элипсоид, наверное, превращается. Я почему-то только про шар думал. Представить бы теперь это как-то
Тоже попался с терминологией, всё шар себе представить пытался. Насколько я понимаю, чтобы получился элипсоид, нам нужен трехмерный шар в четырехмерном пространстве? Или как его назвать, я уже запутался. В общем, у него не должно быть «высоты», он должен быть «плоским»
Должен, например, уметь в писываться в грань гиперкуба. Попробуем представить его в нашей проекции. В ней грань гиперкуба это трапеция, и если в нее была вписана 4D-окружность, не должно ли ее расплющить соответственно? То есть не в эллипсоид, а, как бы вырязиться, что-то типа трапеции с до упора скругленными углами?
По идее под «плоским» можно понимать любую сферу, т.е. 4хмерный шар, полый вдоль какого-то направления. Тогда проекция под углом к «полому» направлению будет давать искажения. Частным случаем можно считать как раз 3хмерную сферу вписанную в 3хмерную грань, которую предложили вы.
Что-то мне прямо нехорошо от Вашего видео. Или уработался, не знаю даже. Прямо голова кружится после просмотра :)
Одно из лучших видео про 4д, на мой взгляд. Пролет через 4д куб вообще впервые вижу, впечатляет.
Видел пару игр, где попытались реализовать 4д, но там он состоял из плоских по четвертому измерению 3д обьектов. А с такой точностью отрисовки как у вас можно сделать действительно качественную 4д игру.

Почему время на отрисовку такое большое? обьект ведь простой… новые видеокарты 3д изображение обрабатывают до сотни раз в секунду на минимальных настройках. Или 4д обьекты на много порядков сложнее рисовать?
Тут штука в том что это честный рейтрейсер.
Видеокарты наверно помогут в этом деле, но вряд ли они что то принципиально изменят. Важное отличие рейтрейсинга 3D и 4D следующее:

— В случае 3D, чтобы найти цвет луча нужно найти где луч пересекается с объектом — это конечное число некоторых математических действий. Здесь не важно где находится объект и как направлен луч.

— В случае 4D всё не так просто. Из камеры вылетает условный луч и летит через 3-х мерную проекцию 4-х мерной сцены. Но ведь мы не знаем как выглядит трёхмерная проекция и не можем простым способом выяснить где луч сталкивается с ней. Получается такая штука: у нас есть функция f(q) = цвет точки в 3-х мерной проекции и есть луч q = p + vt который летит через эту сцену; задача найти интеграл вдоль всего луча от f(p + vt). Если не знать как ведёт себя f, остаются лишь квадратурные формулы работающие за время O(длина луча) — здесь, как видите, ограничена длина луча.

Можно, в принципе, сделать одну немного нечестную оптимизацию: сначала спроецировать 4-х мерную сцену на 3-х мерный экран — получится другая уже трёхмерная сцена — после чего обычным алгоритмом спроецировать это дело на экран. Я уверен, что несложно доказать, что проекция 4-х мерного эллипса это 3-х мерный эллипс оси которого находятся одним матричным умножением; аналогично цилиндр перейдёт в некий «обобщённый цилиндроид» и т.д. Плюсы метода: очень красивая картинка с отражениями/преломлениями. Минусы: эти отражения — отражения 3-х мерной проекции, а не исходной 4-х мерной сцены, к тому же, как я говорил, отражения 4-х мерных объектов находятся внутри 3-х мерных проекций, поэтому корректная проекция это бесконечный набор вложенных объектов которая рендерится за бесконечное время.
Спасибо за пост!
Обожаю данную тему, пространства старше 3его меня всегда будоражат. И я вообще считаю, что мы являемся проекцией четырех мерного мира (где время это плоскость и можно видеть все варианты ситуации) на 3 мерное пространство. Я даже по этому поводу стихотворение Плоскость Времени написал, когда меня очень шторило от просмотра фильма Геометрия вселенной
Вот интересно, если долго медитировать на такую штуку, возникнет ли _ощущение_ 4D-реальности? И знает ли история людей, у которых возникало подобное ощущение?

P.S. классно бы было на подобную штуку в движении посмотреть в стерео.
А с какой скоростью считается полупрозрачное отражение в сфере?
Сколько времени уходит на рендеринг видео с отражением? Примерно 4 минуты на кадр. Заметно дольше чем рендеринг по методу «first hit» — «первое столкновение со сценой».
Мне текст вашего поста напомнил первый учебник по алгебре, который нам в универе выдали (Кострыкина, кажется, авторства).

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

Естественно, что когда сам занимаешься предметом, то он кажется проще чем на самом деле. Возможно поэтому изложение в этом посте получилось чрезмерно кратким, сложным для восприятия.
Зарегистрируйтесь на Хабре, чтобы оставить комментарий

Публикации