| | |
| |
|
| | |
| | |
| | |
| | |
| | |
| | |
| | |
| | |
| | |
| | |
| | |
| | |
| | |
| | |
| | |
| | |
| | |
| | |
| | |
| | |
| | |
| |
|
| | #ifndef __simdisplay_h__ |
| | #define __simdisplay_h__ |
| |
|
| | #include "GlUtils.h" |
| | #include "Shader.h" |
| | #include "StockObject.h" |
| | #include "MillPathLine.h" |
| | #include <vector> |
| | #include <random> |
| | #include <algorithm> |
| |
|
| | namespace MillSim |
| | { |
| |
|
| | constexpr auto pi = std::numbers::pi_v<float>; |
| |
|
| | struct Point3D |
| | { |
| | float x, y, z; |
| | }; |
| |
|
| | class SimDisplay |
| | { |
| | public: |
| | ~SimDisplay(); |
| | void InitGL(qreal devicePixelRatio); |
| | void CleanGL(); |
| | void CleanFbos(); |
| | void PrepareDisplay(vec3 objCenter); |
| | void PrepareFrameBuffer(); |
| | void StartDepthPass(); |
| | void StartGeometryPass(vec3 objColor, bool invertNormals); |
| | void StartCloserGeometryPass(vec3 objColor); |
| | void RenderLightObject(); |
| | void ScaleViewToStock(StockObject* obj); |
| | void RenderResult(bool recalculate); |
| | void RenderResultStandard(); |
| | void RenderResultSSAO(bool recalculate); |
| | void SetupLinePathPass(int curSegment, bool isHidden); |
| | void TiltEye(float tiltStep); |
| | void RotateEye(float rotStep); |
| | void MoveEye(float x, float z); |
| | void MoveEyeCenter(); |
| | void UpdateEyeFactor(float factor); |
| | void UpdateWindowScale(); |
| |
|
| | void UpdateProjection(); |
| | float GetEyeFactor() |
| | { |
| | return mEyeDistFactor; |
| | } |
| |
|
| | public: |
| | bool applySSAO = false; |
| | bool updateDisplay = false; |
| | float maxFar = 100; |
| | bool displayInitiated = false; |
| |
|
| | protected: |
| | void InitShaders(); |
| | void CreateDisplayFbos(); |
| | void CreateSsaoFbos(); |
| | void CreateFboQuad(); |
| | void CreateGBufTex(GLenum texUnit, GLint intFormat, GLenum format, GLenum type, GLuint& texid); |
| | void UniformHemisphere(vec3& randVec); |
| | void UniformCircle(vec3& randVec); |
| |
|
| | protected: |
| | |
| | Shader shader3D, shaderInv3D, shaderFlat, shaderSimFbo; |
| | Shader shaderGeom, shaderSSAO, shaderSSAOLighting, shaderSSAOBlur; |
| | Shader shaderGeomCloser; |
| | Shader shaderLinePath; |
| | vec3 lightColor = {0.5f, 0.6f, 0.7f}; |
| | vec3 lightPos = {20.0f, 20.0f, 10.0f}; |
| | vec3 ambientCol = {0.2f, 0.2f, 0.25f}; |
| | vec4 pathLineColor = {0.0f, 0.9f, 0.0f, 1.0}; |
| | vec3 pathLineColorPassed = {0.9f, 0.3f, 0.3f}; |
| |
|
| | vec3 eye = {0, 100, 40}; |
| | vec3 target = {0, 0, 0}; |
| | vec3 upvec = {0, 0, 1}; |
| |
|
| | mat4x4 mMatLookAt; |
| | StockObject mlightObject; |
| |
|
| | qreal mDevicePixelRatio; |
| | int mWidth; |
| | int mHeight; |
| |
|
| | std::mt19937 generator; |
| | std::uniform_real_distribution<float> distr01; |
| |
|
| |
|
| | float mEyeDistance = 30; |
| | float mEyeRoration = 0; |
| | float mEyeInclination = pi / 6; |
| | float mEyeStep = pi / 36; |
| |
|
| | float mMaxStockDim = 100; |
| | float mEyeDistFactor = 0.0f; |
| | float mEyeXZFactor = 0.01f; |
| | float mEyeXZScale = 0; |
| | float mEyeX = 0.0f; |
| | float mEyeZ = 0.0f; |
| |
|
| | |
| | unsigned int mFbo; |
| | unsigned int mFboColTexture; |
| | unsigned int mFboPosTexture; |
| | unsigned int mFboNormTexture; |
| | unsigned int mRboDepthStencil; |
| | unsigned int mFboQuadVAO, mFboQuadVBO; |
| |
|
| | |
| | bool mSsaoValid = false; |
| | std::vector<Point3D> mSsaoKernel; |
| | unsigned int mSsaoFbo; |
| | unsigned int mSsaoBlurFbo; |
| | unsigned int mFboSsaoTexture; |
| | unsigned int mFboSsaoBlurTexture; |
| | unsigned int mFboRandTexture; |
| | }; |
| |
|
| | } |
| | #endif |
| |
|