Перейти к основному содержимому

Siv3D — 2D/3D и мультимедиа на C++

Разработчику Начальный уровень

Что такое Siv3D

Siv3D (OpenSiv3D) — open-source C++20 фреймворк для игр, учебных симуляций и creative coding. В одном SDK собраны 2D и 3D, Unicode-шрифты, аудио, простой GUI, работа с файлами и математика — без отдельной связки SDL_image + GL loader + stb.

Проект зародился в Японии; используется в университетских курсах и game jam. Документация — на английском и японском.

По идее Siv3D близок к Raylib ("всё в одном"), но API строится вокруг Scene, Main() и типов вроде String, Texture, Camera3D — в духе современного C++ (идиомы C++20).


Ключевые понятия

ТерминОпределение
Main()Точка входа Siv3D вместо main; макрос SDK настраивает окно и цикл
SceneЛогический холст фиксированного размера; масштабируется под окно
System::Update()Один кадр: события, таймер, true пока приложение живо
String / U"..."Unicode-строки; литерал U"Привет" — тип String
Transformer3DRAII-объект, задающий камеру и 3D-проекцию на время блока

Для чистого 2D без 3D достаточно SFML. Для минимального C-API — Raylib.


Siv3D, Raylib и SFML

КритерийSiv3DRaylibSFML
2DБогатые примитивыДаДа
3DМеши, камера, светУпрощённоНет
Стандарт C++C++20C (+ обёртки)C++17
Стиль APIScene + Main()InitWindow / Draw*sf::RenderWindow
GUIВстроенные виджетыrgui (опционально)Нет
ПлатформыWin, macOS, LinuxШирокий списокWin, Linux, macOS

Правило выбора: один фреймворк для 2D + 3D + шрифты + GUI на C++20 — Siv3D. Минимализм и C — Raylib. Только 2D и OOP — SFML.


Структура приложения

Ключевые типы SDK:

ТипНазначение
SceneЛогический холст; координаты не "плывут" при resize окна
Texture / ImageРастр; Image — CPU, Texture — GPU
FontОтрисовка Unicode-текста
AudioWAV, MP3, синтез
RandomRNG для игровой логики
Mesh + Camera3DПростые 3D-сцены без ручного Vulkan

Установка

  1. Скачайте OpenSiv3D SDK с официального репозитория под вашу ОС.
  2. Создайте проект через OpenSiv3D Project Generator или скопируйте шаблон CMake.
  3. Компилятор: MSVC 2022, Clang 14+, GCC 11+ с поддержкой C++20 (toolchain).

CMake (упрощённо):

cmake_minimum_required(VERSION 3.16)
project(siv3d_game CXX)
set(CMAKE_CXX_STANDARD 20)

include("${SIV3D_ROOT}/cmake/Siv3D.cmake")
add_executable(Game Main.cpp)
target_link_siv3d(Game)

SIV3D_ROOT — путь к распакованному SDK. Детали меняются между релизами — сверяйтесь с README SDK.


Минимальный 2D-пример

# include <Siv3D.hpp>

void Main()
{
Scene scene{800, 600};
const Font font{48};

while (System::Update())
{
scene.draw(ColorF{0.12, 0.12, 0.16});
scene.circle(400, 300, 50).draw(ColorF{0.3, 0.85, 0.5});
font(U"Hello, Siv3D!").drawAt(400, 80, Palette::White);
}
}

Разбор построчно

  • # include <Siv3D.hpp> — единый заголовок SDK (пробел после # — стиль Siv3D).
  • void Main()точка входа; SDK предоставляет main, который вызывает Main().
  • Scene scene{800, 600} — логическое поле 800×600; при изменении окна Siv3D масштабирует отрисовку, сохраняя пропорции.
  • System::Update() — один кадр игрового цикла; возвращает false при закрытии.
  • scene.draw(ColorF{...}) — заливка фона; ColorF — RGBA в диапазоне 0..1.
  • scene.circle(...).draw(...) — fluent-стиль: создали фигуру → нарисовали.
  • U"Hello, Siv3D!"Unicode-литерал; кириллица поддерживается без отдельной кодировки.
  • font(...).drawAt(x, y, color) — текст с якорем в точке.

3D без ручного Vulkan

const Mesh mesh = Mesh::LoadOBJ(U"model.obj");
while (System::Update()) {
const Transformer3D t{
Camera3D{Vec3{0, 2, 4}, Vec3{0, 0, 0}}};
mesh.draw();
}
  • Mesh — вершины и индексы на GPU.
  • Transformer3D — на время жизни объекта активна 3D-камера; после блока — снова 2D Scene.
  • Для своих шейдеров, compute и полного контроля — OpenGL или Vulkan.

Модули OpenSiv3D

Помимо ядра в SDK есть подсистемы:

  • Script — встроенный скриптовый слой;
  • Physics2D — простая 2D-физика;
  • Network — сокеты;
  • GUI — кнопки, слайдеры;
  • Excel — чтение таблиц для прототипов баланса.

Примеры (Samples) в SDK — главный учебный ресурс после первого окна.


Когда Siv3D подходит

СценарийSiv3D
Учебный курс, jam, визуализацияДа
Legacy только C++17Может не собраться
Коммерческий движок с редакторомUnreal / Unity
Минимальный embedded-бинарникSDL + свой рендер
Windows GPU без абстракцийDirectX

Частые ошибки

СимптомПричинаРешение
Ресурсы не найденыневерный путь resource/структура каталогов как в шаблоне SDK
Ошибка C++20старый компиляторобновить toolchain
Долгая сборкаheader-heavy SDKPCH / unity build из шаблона
3D "плоское" освещениенет нормалей в моделиэкспорт из Blender с normals

Что читать дальше