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++.
- 📋 Summary
- ✨ Features
- 🛠️ Install
- 📦 Dependencies
- 📥 Integrating into your project (not recommended)
- 🦴 Using the skeleton project (recommended)
- 🖥️ Demo
- 📖 Documentation
- 📝 Notes
- 🙏 Credits
-
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
- Shaders, framebuffers, vertexbuffers, textures...
- Colors, vectors, small functions...
- CMake
- GCC for Linux
- Clang for MacOS
- Visual Studio (the software or the compiler only) for Windows (recommended)
- MinGW for Windows (not recommended)
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.
- This is a small project of a single beginner programmer so there may be bugs if you do not use the library as indicated
- Angel Uriot : Creator of the library.