Skip to content

snave333/gyokuro-engine

Repository files navigation

Gyokuro

Hero image

A C++ OpenGL rendering library – pronounced "gee-o-kuh-ro". Uses the forward shading technique and targets the OpenGL 3.3 Core profile.

This project is my journey following the tutorials and guides from Learn OpenGL, along with a slew of other online and print guides, and creating a high-level wrapper around the rendering software.

Key Features

  • Model Loading
  • PBR Materials, IBL
  • HDR Pipeline
  • Fast VFC

For a full feature list and roadmap of planned features, see the list below.

Helmet screenshot

Example Usage

// start the rendering engine

gyo::Engine engine(1920, 1080);
if(!engine.IsRunning()) {
    std::cerr << "Gyokuro failed to start!" << std::endl;
    return 1;
}

// create our scene

SceneController& sc = engine.sc();

sc.SetEnvironment("brown_photostudio_2k.hdr");

glm::vec3 spotLightColor(1.0f, 0.2f, 0.2f);
LightNode* spotLight = new LightNode(new SpotLight(spotLightColor * 6.0f, 40.0f));
spotLight->Translate(2, 1, -5);
spotLight->Rotate(45, -15, 0);
sc.AddNode(spotLight);

ModelNode* helmet = new ModelNode(Resources::GetModel("DamagedHelmet.glb", true));
sc.AddNode(helmet);
glm::vec3 rotationAxis(0.0f, 1.0f, 0.0f);

sc.AddUpdateFunction([helmet, rotationAxis](float dt) {
    helmet->Rotate(dt * 15, rotationAxis);
});

// render the scene to the window

while(engine.IsRunning()) {
    engine.Frame();
}

For more examples, see the runnable projects in the samples folder.

Roadmap

  • Camera
    • Perspective/orthagraphic projections
    • Free-look, fly camera
    • Orbit camera
  • 3D Primitives
    • Quad
    • Cube
    • Sphere
    • Torus
    • Pyramid
  • Shaders
    • GLSL file loading
    • #include ".glsl" support
    • #define injection
    • Camera matrices UBO
    • Scene lighting UBO
  • 2D Texture Loading
  • Simple Lights
    • Directional
    • Point
    • Spot
  • Material Definitions
    • Unlit (supports color map)
    • Phong (supports diffuse, specular, and normal map)
  • Utility Drawables
    • Mesh normals/tangents/bitangents viewer (geom shader)
    • AABB wireframe renderer
    • Frustum wireframe renderer
  • Skybox
    • Cubemap
    • HDR
  • View Frustum Culling
    • AABB based model culling
      • P/N vertex LUT optimization
      • Plane coherence optimization
    • Scene bounding volume hierarchy
  • Blending
    • Sorted transparency
    • Additive
  • Resource Caching
    • Shaders
    • Textures
    • Cubemaps
    • Fonts
  • UI
    • MSDF-based text rendering
    • UI images/panels
  • HDR
    • Render buffer
    • Reinhard tone mapping
    • Gamma correction
  • Model loading
    • Separate model/texture file loading
    • Embedded texture support (glb)
  • PBR
    • Material (supports albedo, normal, metallic/roughness, ao, & emission maps)
    • Analytic lights
    • IBL
  • MSAA
  • Image effects
  • Shadows

Dependencies

Acknowledgments

Attributions

  • "Dice.fbx" 3D model and textures by Josh Cook.
  • "Battle Damaged Sci-fi Helmet - PBR" 3D model by "leonardo-carrion" on Sketchfab here.
  • "Cerberus" revolver 3D model by Andrew Maximov here.
  • PBR Textures and HDRIs from freepbr.com and polyhaven.com

About

A C++ OpenGL Rendering Library

Resources

Stars

Watchers

Forks