Найти в Дзене

Go 3D: Как нарисовать куб на Golang и не сойти с ума от С++ зависимостей

Думаете, Go — только для серверов и утилит? Пример 3D-рендера на чистом Go. Вот подробный гайд, как повторить это за 10-15 минут.
Введение: Почему Go и 3D? А почему бы и нет если не запрещено ? Хотя писать на Go подобные "проекты" глупость и я бы не советовал, но всё же поиграться с ним можно. Для этого есть отличная библиотека GoGL (OpenGL биндинги для Go) и GLFW для создания окон. Сегодня мы создадим вращающийся куб с текстурами. И всё это — на чистом Go. Команды для терминала: Почему именно эти библиотеки? Проверяем установку: Создаём main.go: Запускаем: Добавляем инициализацию в main.go: Добавляем функцию создания шейдеров: Определяем исходники шейдеров прямо в коде: Создаем шейдерную программу в main: Определяем вершины куба: Создаём буферы: Используем mathgl для матриц: Сложности, с которыми можно столкнуться: Go даёт: Этот куб — только начало. Дальше можно добавить: P.S: Это просто пример как можно реализовать(решил просто посмотреть будут ли подобные статьи интересны или
Оглавление

Думаете, Go — только для серверов и утилит? Пример 3D-рендера на чистом Go. Вот подробный гайд, как повторить это за 10-15 минут.

Введение: Почему Go и 3D?

А почему бы и нет если не запрещено ? Хотя писать на Go подобные "проекты" глупость и я бы не советовал, но всё же поиграться с ним можно.

Для этого есть отличная библиотека GoGL (OpenGL биндинги для Go) и GLFW для создания окон. Сегодня мы создадим вращающийся куб с текстурами. И всё это — на чистом Go.

Шаг 1: Устанавливаем зависимости и настраиваем проект

Команды для терминала:

Почему именно эти библиотеки?

  • go-gl/gl — биндинги для OpenGL (версия 4.6)
  • go-gl/glfw — создание окон и обработка ввода
  • go-gl/mathgl — математика для 3D (матрицы, векторы)

Проверяем установку:

Точка в конце обязательна
Точка в конце обязательна

Шаг 2: Создаём базовое окно

Создаём main.go:

-3

Запускаем:

-4

Шаг 3: Инициализируем OpenGL

Добавляем инициализацию в main.go:

-5

Шаг 4: Создаём шейдерную программу

Добавляем функцию создания шейдеров:

-6

-7

Определяем исходники шейдеров прямо в коде:

-8

Создаем шейдерную программу в main:

-9

Шаг 5: Создаём 3D-куб

Определяем вершины куба:

-10

Создаём буферы:

-11

Шаг 6: Добавляем преобразования и анимацию

Используем mathgl для матриц:

-12

Что получилось в итоге?

  • ✅ Вращающийся 3D-куб на чистом Go
  • ✅ Полноценный конвейер OpenGL 4.6
  • ✅ Современные шейдеры GLSL
  • ✅ Матричные преобразования

Сложности, с которыми можно столкнуться:

  1. Придется разбираться с cgo-биндингами
  2. Go не очень дружит с указателями (пригодился gl.Ptr)
  3. Матричная математика требует аккуратности

Зачем это всё?

Go даёт:

  • Простоту: код читается легче чем C++
  • Безопасность: нет segfaults и утечек памяти
  • Кроссплатформенность: работает на Windows, macOS, Linux

Этот куб — только начало. Дальше можно добавить:

  • Загрузку 3D-моделей из файлов
  • Текстурирование и освещение
  • Физику на gobullet3

P.S: Это просто пример как можно реализовать(решил просто посмотреть будут ли подобные статьи интересны или нет), если вас заинтересует тема подобных статей, то могу их почаще выкладывать и более тщательно подходить к подобным темам(хотя на дзене вообще не удобно писать статьи с кодом), я в основном Golang разработчик и хорошо знаю Python, так что при желании можете писать в комментариях чтобы вы хотели в следующих статьях.

Полный код проекта:
Gitflic

Пробовали ли вы графику на Go? Делитесь опытом в комментариях!