9#define STB_IMAGE_WRITE_IMPLEMENTATION
10#include <stb_image_write.h>
13#include <jGL/OpenGL/openGLInstance.h>
14#include <jGL/Display/desktopDisplay.h>
15#include <jGL/orthoCam.h>
37const float dr = (1.0)*0.5;
39const float dphi = (2.0*3.14)*0.05;
55 std::vector<uint8_t>
pixels(resolution.x*resolution.y*4, 0);
116 glm::vec4(5.0, 5.0, 5.0, 255.0)/255.0f,
117 glm::vec4(250.0, 250.0, 250.0, 255.0)/255.0f
130 glm::vec4(250.0, 250.0, 250.0, 255.0)/255.0f,
131 glm::vec4(5.0, 5.0, 5.0, 255.0)/255.0f
156 if (
display.keyHasAnyEvents(
GLFW_KEY_W, {jGL::EventType::PRESS, jGL::EventType::HOLD}))
161 if (
display.keyHasAnyEvents(
GLFW_KEY_S, {jGL::EventType::PRESS, jGL::EventType::HOLD}))
166 if (
display.keyHasAnyEvents(
GLFW_KEY_Q, {jGL::EventType::PRESS, jGL::EventType::HOLD}))
171 if (
display.keyHasAnyEvents(
GLFW_KEY_E, {jGL::EventType::PRESS, jGL::EventType::HOLD}))
176 if (
display.keyHasAnyEvents(
GLFW_KEY_A, {jGL::EventType::PRESS, jGL::EventType::HOLD}))
181 if (
display.keyHasAnyEvents(
GLFW_KEY_D, {jGL::EventType::PRESS, jGL::EventType::HOLD}))
206 std::vector<Atom> & atoms,
207 std::map<int, Element> & emphasisControls,
208 std::multimap<Element, uint64_t> & elementMap,
210 float deemphasisAlpha,
246 for (
const auto &
control : emphasisControls)
250 auto iter = elementMap.equal_range(
control.second);
255 atoms[
iter.first->second].colour.a =
alpha;
291 const unsigned int resX,
292 const unsigned int resY,
299 auto tic = std::chrono::high_resolution_clock::now();
316 glm::vec2(64.0f, resY-64.0f),
326 for (
int n = 0; n < 60; n++)
331 auto toc = std::chrono::high_resolution_clock::now();
341void backward(std::unique_ptr<Structure> & structure)
344 if (
f > 2) {
f -= 2; }
345 else {
f = structure->frameCount()-2+
f;}
346 structure->readFrame(
f);
358 const std::vector<Atom> & atoms,
363 for (
const auto &
atom : atoms)
365 if (
atom.colour.a != 0.0 &&
atom.colour.a != 1.0)
void translate(std::vector< Atom > &atoms, glm::vec3 r)
Definition atom.h:146
Render atoms as sphere meshes.
Definition atomRenderer.h:27
Render Bonds as ray-traced cylinders.
Definition bondRenderer.h:18
A 3D projective camera centered on a focus moving on a sphere.
Definition camera.h:30
void rotate(float increment)
Rotate about the y OpenGL axis.
Definition camera.h:136
void zoom(float increment)
Increment the zoom.
Definition camera.h:110
void incline(float increment)
Incline about the y OpenGL axis.
Definition camera.h:117
glm::vec< L, float, glm::qualifier::highp > vec
Definition commandLine.h:214
bool closing
Definition main.h:43
void keyEventCallback(GLFWwindow *window, int key, int scancode, int action, int mods)
Override jGL default event callback.
Definition main.h:82
const float dr
Definition main.h:37
bool atomControls(jGL::DesktopDisplay &display, std::vector< Atom > &atoms, std::map< int, Element > &emphasisControls, std::multimap< Element, uint64_t > &elementMap, std::vector< float > &alphaOverrides, float deemphasisAlpha, float translateSpeed)
Controls for the Atoms position's.
Definition main.h:204
void loadingScreenFrame(jGL::DesktopDisplay &display, Camera &camera, AtomRenderer &loadingAtoms, std::string progressMessage, Theme theme, const unsigned int resX, const unsigned int resY, bool hideInfo=false)
Display a frame of the loading screen.
Definition main.h:285
void setAlpha(std::vector< Atom > &atoms, std::vector< float > alphas)
Set the alpha channel of Atom colours.
Definition main.h:271
void setTransparencySorting(const std::vector< Atom > &atoms, AtomRenderer &atomRenderer, BondRenderer &bondRenderer)
Enable of disable transparency sorting if there are transparent elements.
Definition main.h:357
const float dphi
Definition main.h:39
Theme lightTheme()
A light colour theme.
Definition main.h:126
const float dtheta
Definition main.h:38
std::unique_ptr< jGL::jGLInstance > jGLInstance
Definition main.h:45
bool cameraControls(jGL::DesktopDisplay &display, Camera &camera, float zoomSpeed, float rotateSpeed, float inclineSpeed)
Controls for the camera.
Definition main.h:147
void backward(std::unique_ptr< Structure > &structure)
Move back one frame.
Definition main.h:341
void screenshot(glm::ivec2 resolution)
Obtain screen pixels and write to a png.
Definition main.h:53
const float emphasisedAlpha
Definition main.h:41
Theme darkTheme()
A dark colour theme.
Definition main.h:112
A background and text colour theme.
Definition main.h:102
glm::vec4 background
Definition main.h:103
glm::vec4 text
Definition main.h:104
std::string timeStamp()
Current timestamp.
Definition util.h:179