This repository contains the source code of a simple graphics library (2D, 3D and windows). It looks like SFML for 3D or ThreeJS for C++.
Interactive windows with buttons, sliders... (see ImGui for more information)
Scene windows for display
Rectangles, circles, custom shapes, images... (see SFML for more information) on a scene or the main window
A drag controller to move the view with the mouse
Cubes, spheres, cylinders, cones, custom meshes...
Phong materials, Textures...
Ambient, directional and point lights
Perspective and orthographic cameras
Drag, fly and orbit controllers
Link all the dependencies to your project and compile the Dimension3D library as if it was part of your project.
Download the skeleton project, delete the main.cpp demo and put your project files in the sources folder.
Then follow the instructions of the skeleton project here.
#include <dim/dimension3D.hpp>
int main()
{
// Open the main window and initialize the libraries
dim::Window::open("App", 0.75f);
// Create the scenes
dim::Scene scene("Scene");
// Cameras and controllers
scene.set_controller(dim::OrbitController());
dim::PerspectiveCamera cam;
cam.set_position(dim::Vector3(0.f, 0.f, 3.f));
scene.set_camera(cam);
// Add lights
scene.add_light(dim::DirectionalLight(dim::Vector3(-1.f, -1.f, -1.f)));
// Create objects
dim::Object object_1(dim::Mesh::Sphere(256, 256), dim::Material(dim::Color(1.f, 0.1f, 0.1f), 0.1f, 0.5f, 0.6f, 30.f));
dim::Object object_2(dim::Mesh::Cone(256), dim::Material(dim::Color(0.1f, 1.f, 0.1f), 0.1f, 0.5f, 0.6f, 30.f));
object_2.move(dim::Vector3(1.1f, 0.f, 0.f));
dim::Object object_3(dim::Mesh::Cylinder(256), dim::Material(dim::Color(0.1f, 0.1f, 1.f), 0.1f, 0.5f, 0.6f, 30.f));
object_3.move(dim::Vector3(-1.1f, 0.f, 0.f));
// The example button color
float color[4] = { 1.f, 1.f, 1.f, 1.f };
// Main loop
while (dim::Window::running)
{
// Check events
sf::Event sf_event;
while (dim::Window::poll_event(sf_event))
{
dim::Window::check_events(sf_event);
scene.check_events(sf_event);
}
// Clear the screen
dim::Window::clear();
scene.clear();
// Update interactive stuff
dim::Window::update();
scene.update();
// Draw the objects
scene.draw(object_1);
scene.draw(object_2);
scene.draw(object_3);
// Display the scenes to the window
scene.display();
// The ImGui window and button example
ImGui::Begin("Menu");
ImGui::Button("Button");
ImGui::ColorPicker3("Color picker", color, ImGuiColorEditFlags_PickerHueWheel);
ImGui::End();
// Display the window to the screen
dim::Window::display();
}
// Close the main window and shut down the libraries
dim::shut_down();
return EXIT_SUCCESS;
}
You can also see the releases of the skeleton project to test the example code without compiling.
You can read the documentation by consulting the wiki.