Dimension3D
Dimension3D copied to clipboard
A simple graphics library (2D, 3D and windows).
ð§ŋ Dimension3D
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
- ð Summary
- âĻ Features
-
ð ïļ Install
- ðĶ Dependencies
- ðĨ Integrating into your project (not recommended)
- ðĶī Using the skeleton project (recommended)
-
ðĨïļ Demo
- âïļ Code example
- ðïļ Releases
- ð Documentation
- ð Notes
- ð Credits
âĻ Features
Windows
-
Interactive windows with buttons, sliders... (see ImGui for more information)
-
Scene windows for display
2D
-
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
3D
-
Cubes, spheres, cylinders, cones, custom meshes...
-
Phong materials, Textures...
-
Ambient, directional and point lights
-
Perspective and orthographic cameras
-
Drag, fly and orbit controllers
Simplified OpenGL objects
- Shaders, framebuffers, vertexbuffers, textures...
Utils
- Colors, vectors, small functions...
ð ïļ Install
ðĶ Dependencies
Compilers and softwares
- CMake
- GCC for Linux
- Clang for MacOS
- Visual Studio (the software or the compiler only) for Windows (recommended)
- MinGW for Windows (not recommended)
Libraries
ðĨ Integrating into your project (not recommended)
Link all the dependencies to your project and compile the Dimension3D library as if it was part of your project.
ðĶī Using the skeleton project (recommended)
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.
ðĨïļ Demo
âïļ Code example
#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;
}
ðïļ Releases
You can also see the releases of the skeleton project to test the example code without compiling.
ð Documentation
You can read the documentation by consulting the wiki.
ð Notes
- This is a small project of a single beginner programmer so there may be bugs if you do not use the library as indicated
ð Credits
- Angel Uriot : Creator of the library.