122 UniverseRenderer& draw(T& camera,
const iVector2& viewportSize);
124 bool& isDirty() {
return _dirty; }
126 UniverseRenderer& setDirty() {
131 shaders::ParticleSphereShader::ColorMode& colorMode() {
return _colorMode; }
133 UniverseRenderer& setColorMode(shaders::ParticleSphereShader::ColorMode colorMode) {
134 _colorMode = colorMode;
138 const Float lineWidth();
140 UniverseRenderer& setLineWidth(
const Float &lw);
142 const Float lineWidthMin();
144 const Float lineWidthMax();
146 Color3& ambientColor() {
return _ambientColor; }
148 UniverseRenderer& setAmbientColor(
const Color3& color);
150 Color3& diffuseColor() {
return _diffuseColor; }
152 UniverseRenderer& setDiffuseColor(
const Color3& color);
154 Color3& specularColor() {
return _specularColor; }
156 UniverseRenderer& setSpecularColor(
const Color3& color);
158 Float& shininess() {
return _shininess; }
160 UniverseRenderer& setShininess(
float shininess);
162 Color3& gridColor() {
return _gridColor; }
164 UniverseRenderer& setGridColor(
const Color3 &color) {
169 Color3& sceneBoxColor() {
return _sceneBoxColor; }
171 UniverseRenderer& setSceneBoxColor(
const Color3 &color) {
172 _sceneBoxColor = color;
176 fVector3& lightDirection() {
return _lightDir; }
178 UniverseRenderer& setLightDirection(
const fVector3& lightDir);
180 Color3& lightColor() {
return _lightColor; }
182 UniverseRenderer& setLightColor(
const Color3 &color);
184 Color3& backgroundColor() {
return _clearColor; }
186 UniverseRenderer& setBackgroundColor(
const Color3 &color);
188 UniverseRenderer& setModelViewTransform(
const Magnum::Matrix4& mat) {
193 UniverseRenderer& setProjectionTransform(
const Magnum::Matrix4& mat) {
198 const bool showingDiscretizationGrid()
const {
199 return _showDiscretizationGrid;
202 UniverseRenderer& showDiscretizationGrid(
const bool &
show) {
203 _showDiscretizationGrid =
show;
207 Color3& discretizationGridColor() {
208 return _discretizationGridColor;
211 UniverseRenderer& setDiscretizationGridColor(
const Color3 &color);
213 const fVector3& defaultEye()
const {
217 const fVector3& defaultCenter()
const {
221 const fVector3& defaultUp()
const {
225 bool renderUniverse =
true;
228 void onCursorMove(
double xpos,
double ypos);
230 void onCursorEnter(
int entered);
232 void onMouseButton(
int button,
int action,
int mods);
236 void onWindowMove(
int x,
int y);
238 void onWindowSizeChange(
int x,
int y);
240 void onFramebufferSizeChange(
int x,
int y);
242 void viewportEvent(
const int w,
const int h);
246 int clipPlaneCount()
const;
248 static int maxClipPlaneCount();
250 const unsigned addClipPlaneEquation(
const Magnum::Vector4& pe);
252 const unsigned removeClipPlaneEquation(
const unsigned int &
id);
254 void setClipPlaneEquation(
unsigned id,
const Magnum::Vector4& pe);
256 const Magnum::Vector4& getClipPlaneEquation(
unsigned id);
258 const float getZoomRate();
260 void setZoomRate(
const float &zoomRate);
262 const float getSpinRate();
264 void setSpinRate(
const float &spinRate);
266 const float getMoveRate();
268 void setMoveRate(
const float &moveRate);
321 void viewportEvent(Platform::GlfwApplication::ViewportEvent&
event);
323 void cameraTranslateDown();
325 void cameraTranslateUp();
327 void cameraTranslateRight();
329 void cameraTranslateLeft();
331 void cameraTranslateForward();
333 void cameraTranslateBackward();
335 void cameraRotateDown();
337 void cameraRotateUp();
339 void cameraRotateLeft();
341 void cameraRotateRight();
343 void cameraRollLeft();
345 void cameraRollRight();
349 void cameraZoomOut();
384 void mousePressEvent(Platform::GlfwApplication::MouseEvent&
event);
385 void mouseReleaseEvent(Platform::GlfwApplication::MouseEvent&
event);
399 void mouseScrollEvent(Platform::GlfwApplication::MouseScrollEvent&
event);
401 SubRenderer *getSubRenderer(
const SubRendererFlag &flag);
405 bool _decorateScene =
true;
406 bool _showDiscretizationGrid =
false;
407 shaders::ParticleSphereShader::ColorMode _colorMode = shaders::ParticleSphereShader::ColorMode::ConsistentRandom;
408 Color3 _ambientColor{0.4f};
409 Color3 _diffuseColor{1.f};
410 Color3 _specularColor{0.2f};
411 Color3 _gridColor = {1.f, 1.f, 1.f};
412 Color3 _sceneBoxColor = {1.f, 1.f, 0.f};
413 Float _shininess = 100.0f;
414 fVector3 _lightDir{1.0f, 1.0f, 2.0f};
415 Color3 _lightColor = {0.9, 0.9, 0.9};
416 Color3 _clearColor{0.35f};
417 Color3 _discretizationGridColor{0.1, 0.1, 0.8};
419 fVector3 _eye, _center, _up;
421 std::vector<Magnum::Vector4> _clipPlanes;
432 Magnum::Matrix4 projMat = Matrix4{Math::IdentityInit};
434 iVector2 _prevMousePosition;
435 fVector3 _rotationPoint, _translationPoint;
443 ArcBallCamera *_arcball;
446 GL::Mesh gridMesh{NoCreate};
447 Magnum::Matrix4 gridModelView;
449 GL::Mesh sceneBox{NoCreate};
454 shaders::Phong sphereShader{NoCreate};
456 Shaders::Flat3D wireframeShader{NoCreate};
458 GL::Buffer sphereInstanceBuffer{NoCreate};
460 GL::Buffer largeSphereInstanceBuffer{NoCreate};
462 GL::Mesh sphereMesh{NoCreate};
464 GL::Mesh largeSphereMesh{NoCreate};
466 GL::Mesh discretizationGridMesh{NoCreate};
468 GL::Buffer discretizationGridBuffer{NoCreate};
470 std::vector<SubRenderer*> subRenderers;
491 fVector3 unproject(
const iVector2& windowPosition,
float depth)
const;
494 void setupCallbacks();
501 bool _bonds3d_flags[3] = {
false,
false,
false};