Hacker News Digest

Тег: #3d-graphics

Постов: 5

WorldGrow: Generating Infinite 3D World (github.com)

Проект WorldGrow представляет собой инструмент для генерации бесконечных 3D миров, размещенный на GitHub в репозитории world-grow/WorldGrow. Несмотря на ограниченное описание, проект обещает создавать масштабируемые виртуальные среды без границ, что может быть интересно для разработчиков игр, симуляторов или исследователей в области компьютерной графики. Открытый исходный код позволяет сообществу вносить вклад в развитие технологии и адаптировать ее под различные задачи.

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

by cdani • 27 октября 2025 г. в 09:31 • 78 points

ОригиналHN

#3d-graphics#procedural-content-generation#pcg#open-source#virtual-worlds#game-development#simulation#wave-function-collapse#wfc#github

Комментарии (49)

  • Метод принципиально отличается от Wave Function Collapse (WFC), хотя некоторые видят сходства в подходе.
  • Главная проблема — не генерация миров как таковых, а создание интересных и структурно целостных миров на больших масштабах.
  • Технические вопросы включают ограниченность памяти, отсутствие уникальных семян для удаленных тайлов и возможную неэффективность по сравнению с традиционной PCG.
  • Потенциальные нишевые применения включают хоррор-среды (Backrooms, SCP-3008) и симуляторы, но практическая ценность и новизна метода ставятся под сомнение.
  • Критики отмечают нереалистичность, структурную бессмысленность сгенерированных объектов и отсутствие явных преимуществ над существующими технологиями.

rlsw – Raylib software OpenGL renderer in less than 5k LOC (github.com)

В файле rlsw.h представлен упрощённый API SimpleWindow для raylib, созданный для быстрой разработки оконных приложений с минимальным кодом. Основная структура SimpleWindow инкапсулирует параметры окна (ширина, высота, заголовок), а SimpleWindowEvent обрабатывает базовые события (закрытие, перемещение, изменение размера). API содержит всего 12 функций, включая swCreateWindow для инициализации, swBeginDrawing/swEndDrawing для рендеринга, и swPollEvents для обработки ввода.

Ключевое преимущество — лаконичность: весь функционал сводится к нескольким вызовам, что идеально подходит для прототипов и небольших проектов. Поддерживаются все основные платформы (Windows, Linux, macOS), а зависимость сводится к одному заголовочному файлу без необходимости линковки. Разработчики отмечают, что это решение особенно полезно для образовательных целей или когда требуется минимальная сложность без избыточных возможностей полного raylib.

by fschuett • 21 октября 2025 г. в 21:00 • 228 points

ОригиналHN

#raylib#opengl#c#windows#linux#macos#3d-graphics#2d-graphics#github

Комментарии (87)

  • Raylib теперь компилируется без внешних зависимостей, что делает его идеальным для встраиваемых систем и ретро-харда.
  • Сообщество вспомнило, что ПО-рендеринг всегда был возможен, и теперь можно делать 2D/3D игры даже на 20-летнем железе.
  • Появился спор о том, насколько полезен этот факт для разработки игр на микроконтроллерах и эмуляторах старого железа.
  • Некоторые участники обсуждения отметили, что это также открывает путь к созданию игр для таких систем, как Nintendo 3DS и других портативных устройств.
  • Были упомянуты проекты TinyGL и PortableGL как альтернативы, а также отмечено, что OpenGL 1.1-совместимое ПО-рендеринг всегда было возможно, но теперь это стало еще более доступным.

Matrices can be your friends (2002) (sjbaker.org)

Матрицы — это мощный инструмент, а не просто набор чисел. Первые девять элементов матрицы представляют поворот объекта. Например, первые три элемента первой колонки (m[0], m[1], m[2]) — это направление оси X после преобразования. Аналогично, следующие три (m[4], m[5], m[6]) — это новая ось Y, и так далее.

Вместо того чтобы выполнять множество отдельных операций (вращение, масштабирование, перемещение), можно просто применить одну матрицу, которая объединяет все эти преобразования. Это эффективно: один вызов к glMultMatrixf() заменяет множество вызовов других функций.

Например, чтобы повернуть объект на 45 градусов вокруг оси Z и переместить его на 10 единиц по X и Y, можно использовать матрицу, где первые три элемента первых двух столбцов — это косинусы и синусы угла, а последние элементы первого и второго столбца — это координаты перемещения. Это не только проще мысленно, но и эффективнее для процессора.

Таким образом, матрицы — это не просто математическая абстракция, а практический инструмент для эффективного и интуитивного управления преобразованиями в 3D-графике.

by todsacerdoti • 13 октября 2025 г. в 10:23 • 116 points

ОригиналHN

#matrices#3d-graphics#linear-algebra#computer-graphics#opengl#transformations#row-major#column-major

Комментарии (87)

  • Обсуждение развернулось вокруг того, как именно представлять и обсуждать матрицы: какие обозначения и соглашения используются, как они влияют на понимание и как они связаны с тем, как мы привыкли думать о линейных преобразованиях.
  • Участники обсуждали, что в разных областях (математика, компьютерная графика, машинное обучение) используются разные соглашения, что может вызывать путаницу.
  • Обсуждались различия между подходами "row-major" и "column-major", а также то, как разные ПО и языки программирования (например, C vs. FORTRAN) влияют на то, как мы представляем и обсуждаем матрицы.
  • Также обсудили, что важно различать матрицы как сетку чисел и как линейное преобразование, и как это влияет на то, как мы думаем о таких понятиях как повороты и масштабирование.

Developing a Space Flight Simulator in Clojure (wedesoft.de)

Космический симулятор на Clojure  
Автор: Jan Wedekind

В 2017 г. увидев проприетарный Orbiter 2016, решил написать свой симулятор. Первые прототипы — на C и GNU Guile, потом перешёл на Clojure: immutable-данные, быстрые коллекции, многопоточность через atoms/agents/refs.

Сразу взялся за сложное: 3D-планета, атмосфера, тени, объёмные облака. Открыл «OpenGL Superbible», изучил исходники Orbiter (90 % кода — графика) и понял, что выбор верный.

**Зависимости**  
- Clojure  
- LWJGL: OpenGL, GLFW, Nuklear, STB, Assimp  
- Jolt Physics — коллизии и машины  
- Fastmath — матрицы/сплайны  
- Instaparse + Gloss — парсинг NASA PCK/DAF  
- Coffi — FFI  
- Malli — схемы, Progrock — прогресс, Claypoole — параллельные циклы и др.  

deps.edn для Linux:

```clojure
org.lwjgl/lwjgl {:mvn/version "3.3.6"}
org.lwjgl/lwjgl$natives-linux {:mvn/version "3.3.6"}
;; аналогично для opengl, glfw, nuklear, stb, assimp

Для Windows — отдельная ветка.

Атмосфера
Реализован precomputed scattering Брунетона: 2D-трансмиттанс, 2D-поверхностное рассеяние, 4D-Релея и Ми. Таблицы строятся численным интегрированием; высшие функции на Clojure интегрируют по сфере и отрезку. Пример интеграла по лучу:

(defn integral-ray
  "Интеграл функции f вдоль луча"
  [{::keys [origin direction]} steps distance f]
  (let [step (/ distance steps)
        pts  (mapv #(%2 %1) (range steps) (repeat step))]
    ;; …
    ))

Проект живёт 5 лет, код открыт (CC BY-SA).

by todsacerdoti • 06 сентября 2025 г. в 01:39 • 201 points

ОригиналHN

#clojure#lwjgl#opengl#jolt-physics#instaparse#gloss#coffi#malli#claypoole#3d-graphics

Комментарии (62)

  • Пользователи восторженно встретили проект Jank, особенно его визуалы и использование Clojure без Unity/Unreal.
  • Критики отметили: 90% кода — C++ (OpenGL, физика, коллизии), Clojure лишь «высокоуровневый» слой.
  • Спор: «функциональный» ли код, если рендер и физика императивны; сторонники отвечают — важна логика приложения, а не движок.
  • Сомнения, что indie-разработчики массово перейдут на Clojure/Jank: язык нишевой, производительность и JVM пугают.
  • Практический совет: попробовать библиотеки ham-fisted, neanderthal для ускорения.

Комментарии (22)

  • GeoToy — это «Shadertoy для геометрии»: вместо цвета пикселя функция возвращает вершины, поэтому куб рисуется 36 вызовами, а не 921 600.
  • Похож на DSL для 3D-моделей; пример «temple» помогает быстрее понять синтаксис.
  • Материалы задаются не кодом, а через UI (три пиктограммы → «materials») и используют трипланарное отображение без UV.
  • Анимации пока нет, но пользователи просят добавить переменную вроде iTime из Shadertoy.
  • Проект вызывает ассоциации с Structure Synth и geometry-шейдерами, но последние считаются трудными для оптимизации.