Babylon.js is a complete JavaScript framework for building 3D games with HTML 5 and WebGL. BabylonJS was chosen because it is the most efficient, most feature-rich, and most modern WebGL graphics library available.
The goal of BabylonCpp is to fully implement the relevant portions of the excellent Babylon.js 3D framework/engine in C++17, facilitating the creation of lightweight, cross-platform 3D games and applications with native performance.
It includes more than 200 examples, a graphical inspector for all 3D objects (based on ImGui), as well as an interactive playground for live coding and experiments.
This repository contains submodules for some of the external dependencies, so when doing a fresh clone you need to clone recursively:
git clone --recursive https://github.com/samdauwe/BabylonCpp.git
Existing repositories can be updated manually:
git submodule init
git submodule update
A build script named cmake_build.py
is provided for compiling all sources from command line on Linux and Windows:
Release build:
python cmake_build.py all --mode=release
Debug build:
python cmake_build.py all --mode=debug
Use the provided CMakeLists.txt with CMake to generate a build configuration for your favorite IDE or compiler.
Xcode project targeting iOS 12.0
cmake -G Xcode -DCMAKE_TOOLCHAIN_FILE=../external/ios-cmake/ios.toolchain.cmake -DPLATFORM=OS64COMBINED -DENABLE_ARC=0 -DDEPLOYMENT_TARGET=12 ..
A Visual Studio solution file can be generated by using the provided cmake_build.py
script:
python cmake_build.py configure
If you're using a different IDE or compiler you can use the provided CMakeLists.txt for use with CMake to generate a build configuration for your toolchain.
The following code initializes a basic scene by creating a camera, a light, and two basic meshes (a sphere and a ground plane).
void initializeScene(ICanvas* canvas, Scene* scene)
{
// Create a FreeCamera, and set its position to (x:0, y:5, z:-10)
auto camera = FreeCamera::New("camera1", Vector3(0, 5, -10), scene);
// Target the camera to the scene origin
camera->setTarget(Vector3::Zero());
// Attach the camera to the canvas
camera->attachControl(canvas, true);
// Create a basic light, aiming 0,1,0 - meaning, to the sky
auto light = HemisphericLight::New("light1", Vector3(0, 1, 0), scene);
// Default intensity is 1. Let's dim the light a small amount
light->intensity = 0.7f;
// Create a built-in "sphere" shape; its constructor takes 4 params: name,
// subdivs, size, scene
auto sphere = Mesh::CreateSphere("sphere1", 32, 2.f, scene);
// Move the sphere upward 1/2 of its height
sphere->position().y = 1.f;
// Create a built-in "ground" shape.
// Params: name, width, depth, subdivs, scene
Mesh::CreateGround("ground1", 6, 6, 2, scene);
}
This code results in the following scene:
Example scenes can be found on the samples page.
The master branch code is in sync with the last Babylon.js v4.2.0 release of 2020/11/12. The upgrade to v4.2.0 caused some issues with some of the examples, these issues still need to be resolved.
The example scenes give a good overview which features are currenlty ported and working for Babylon.js 4.0.0.
Known issues are summarized here.
A summary of the development roadmap can be found on this page.
- Earcut: A C++ port of earcut.js, a fast, header-only polygon triangulation library.
- GLFW: Framework for OpenGL application development, used for the examples.
- Google Test: Google's framework for writing C++ tests on a variety of platforms, used for the unit tests.
- Dear ImGui: Bloat-free Immediate Mode Graphical User interface for C++ with minimal dependencies.
- ImGuiColorTextEdit:Syntax highlighting text editor for ImGui.
- JSON for Modern C++
- Runtime Compiled C++: Library that enables to reliably make major changes to your C++ code at runtime and see the results immediately.
- ios-cmake: A CMake toolchain file for iOS, watchOS and tvOS C/C++/Obj-C++ development.
The compiler should implement all the features of the ISO C++ 2017 standard:
- GCC >= 7.0.0
- Clang >= 5.0.0
- AppleClang >= 10.0
- MSVC >= 2017
- Linux
- MacOSX
- Windows >= 7
- iOS >= 12.0
Graphics APIs:
Open-source under Apache 2.0 license.