A 3D surface and conics visualizer made using OpenGL and C
Video Demos
·
Report Bug
Preview - Future Releases - Some More Renders - Installation |
---|
3b1b SoME1 - Libraries Used - License - Contact |
Example Usage - Users - Developers |
preview.mp4
As of 15/08/2021
, 3d-conics features mesh generation based on multivaraible functions and live interaction with their properties (such as controlling the domain/range & applying transformations) with a handful of 3D surfaces and conics.
The mesh properties can be adjusted via a GUI overlay (Dear Imgui integration) and viewed through a controllable 3D perspective projection camera, which are implemented as separate modes (edit and normal respectively).
A mesh generating menu allows you to select a handful of prefabricated functions (such as PARABOLOID
, HYPERBOLIC PARABOLOID
, SINGLE CONE
, DOUBLE CONE
, CYLINDER
, SPHERE
and a couple more) and their initialization properties.
Features that I would like to work towards implementing
- Live delaunay triangulation
- Rendering multiple meshes in the same application instance
- Live mesh vertex editor
- Live mesh painting
- Custom transformations
Feel free to suggest some features in the issues tab!
Below are some of the things you can do with the meshes which you generate from a spawner menu.
There is an universal option to increase or decrease the "level of detail" of the currently rendered mesh. This causes uniform generation of extra vertices, which makes the mesh more tightly/loosely packed. This may also increase resource usage.
LOD.mp4
Various meshes have their own custom properties which may not apply to all of them. For example, rendering a conic (such as a cylinder) contains adjustable angles to "wrap" itself, radius and height. A surface such as a hyperboloid, which is not generated parametrically has adjustable properties for the maximum domain and range.
Properties.mp4
Currently, there is support for rotating the mesh in all 3-axis using Euler angles (might look into replacing with Quaternions). There are buttons to automate the rotations as well, so that you can adjust other properties while watching the mesh transform.
Rotation.mp4
This feature allows you to automate viewing how the mesh changes as you adjust their domain/range live. An amplitude slider allows you to control the speed at which this happens.
Breathing.mp4
Creating your own App instance using the conics harness
class App : public conics::Harness{
Camera* camera = new Camera();
Spawner* spawner = new Spawner();
// override startup to initialize rendering data
void startup() override{
// Sets up data buffer for a cone shape (starting mesh)
R->default_mesh = new Mesh(surface::CONE...);
}
// override render to call renderer routines
void render() override{
VP = camera->calc_VP(delta);
// GUI
R->renderGUI(*spawner);
// MESH
R->renderMesh(*R->default_mesh);
}
}
Creating your own GUI overlay window
// Creating your own GUI
class MyGUI : public GUI {
void update() override;
...
}
MyGUI::MyGUI(){
MyGUI::flag_list {/* your ImGUI flags here */};
MyGUI::updateFlags();
// If you want to change GUI with events attach to the KL
KeyListener::listeners.push_back(this);
}
HYPERBOLIC PARABOLOID
(saddle) generated with
SINGLE CONE
generated parametrically with
The cone is stretching because I was live-editing the t-factor
TORUS
generated parametrically with
The torus "wraps" in the render because I was live-editing the value of theta
Dependencies include OpenGL 4.50
, libdl
, glfw3
, pthread
, sqlite3
, glm
git clone https://github.com/ranaxdev/3d-conics
cd 3d-conics
mkdir Release
cd Release
cmake -DCMAKE_BUILD_TYPE=Release ../
make
I'm currently working on releasing an executable so that you don't have to use cmake
to build it on windows
This project was inspired by the math educator and content creator 3Blue1Brown's online competition SoME1 (The Summer of Math Exposition). It has been submitted as an entry.
I made this tool because I believe math educators can benefit from it by using it to demonstrate 3D surfaces/conics to their students as it is often difficult to plot them by hand, as you have to think about perspective and shading. This tool allows you to view these surfaces in various angles and see how they change by adjusting their many properties.
-
GLAD : OpenGL Loading Library
-
GLM : OpenGL Mathematics
-
GLFW : A multi-platform library for OpenGL, OpenGL ES, Vulkan, window and input
-
Dear ImGui : Bloat-free Graphical User interface for C with minimal dependencies
Distributed under the Apache 2.0 License. See LICENSE
for more information.
S.R. Qaiser - @pitu_dev - [email protected]
Project Link: https://github.com/ranaxdev/3d-conics