From 741323e6c1dc1ba48d12b8adbc4b1fcd1f398886 Mon Sep 17 00:00:00 2001 From: ZappoMan Date: Mon, 4 May 2015 14:19:13 -0700 Subject: [PATCH] wire up atmosphere.hasStars property --- interface/src/Application.cpp | 22 +++++++++++++------ .../entities/src/AtmospherePropertyGroup.cpp | 14 +++++++++++- .../entities/src/AtmospherePropertyGroup.h | 1 + .../entities/src/EntityItemPropertiesMacros.h | 14 ++++++++++++ libraries/entities/src/EntityPropertyFlags.h | 3 ++- libraries/entities/src/ZoneEntityItem.cpp | 1 + libraries/environment/src/EnvironmentData.cpp | 3 ++- libraries/environment/src/EnvironmentData.h | 5 +++++ 8 files changed, 53 insertions(+), 10 deletions(-) diff --git a/interface/src/Application.cpp b/interface/src/Application.cpp index c03da4064f..88496d0510 100644 --- a/interface/src/Application.cpp +++ b/interface/src/Application.cpp @@ -3112,22 +3112,30 @@ void Application::displaySide(Camera& theCamera, bool selfAvatarOnly, RenderArgs // compute starfield alpha based on distance from atmosphere float alpha = 1.0f; + bool hasStars = true; if (Menu::getInstance()->isOptionChecked(MenuOption::Atmosphere)) { // TODO: handle this correctly for zones const EnvironmentData& closestData = _environment.getClosestData(theCamera.getPosition()); - float height = glm::distance(theCamera.getPosition(), closestData.getAtmosphereCenter()); - if (height < closestData.getAtmosphereInnerRadius()) { - alpha = 0.0f; + + if (closestData.getHasStars()) { + float height = glm::distance(theCamera.getPosition(), closestData.getAtmosphereCenter()); + if (height < closestData.getAtmosphereInnerRadius()) { + alpha = 0.0f; - } else if (height < closestData.getAtmosphereOuterRadius()) { - alpha = (height - closestData.getAtmosphereInnerRadius()) / - (closestData.getAtmosphereOuterRadius() - closestData.getAtmosphereInnerRadius()); + } else if (height < closestData.getAtmosphereOuterRadius()) { + alpha = (height - closestData.getAtmosphereInnerRadius()) / + (closestData.getAtmosphereOuterRadius() - closestData.getAtmosphereInnerRadius()); + } + } else { + hasStars = false; } } // finally render the starfield //qDebug() << "stars alpha:" << alpha; - _stars.render(theCamera.getFieldOfView(), theCamera.getAspectRatio(), theCamera.getNearClip(), alpha); + if (hasStars) { + _stars.render(theCamera.getFieldOfView(), theCamera.getAspectRatio(), theCamera.getNearClip(), alpha); + } } if (Menu::getInstance()->isOptionChecked(MenuOption::Wireframe)) { diff --git a/libraries/entities/src/AtmospherePropertyGroup.cpp b/libraries/entities/src/AtmospherePropertyGroup.cpp index dc3dbe0bab..c59882791f 100644 --- a/libraries/entities/src/AtmospherePropertyGroup.cpp +++ b/libraries/entities/src/AtmospherePropertyGroup.cpp @@ -22,7 +22,7 @@ AtmospherePropertyGroup::AtmospherePropertyGroup() { _mieScattering = 0.0f; _rayleighScattering = 0.0f; _scatteringWavelengths = glm::vec3(0.0f); - + _hasStars = true; } void AtmospherePropertyGroup::copyToScriptValue(QScriptValue& properties, QScriptEngine* engine, bool skipDefaults, EntityItemProperties& defaultEntityProperties) const { @@ -32,6 +32,7 @@ void AtmospherePropertyGroup::copyToScriptValue(QScriptValue& properties, QScrip COPY_GROUP_PROPERTY_TO_QSCRIPTVALUE(Atmosphere, MieScattering, mieScattering); COPY_GROUP_PROPERTY_TO_QSCRIPTVALUE(Atmosphere, RayleighScattering, rayleighScattering); COPY_GROUP_PROPERTY_TO_QSCRIPTVALUE_VEC3(Atmosphere, ScatteringWavelengths, scatteringWavelengths); + COPY_GROUP_PROPERTY_TO_QSCRIPTVALUE(Atmosphere, HasStars, hasStars); } void AtmospherePropertyGroup::copyFromScriptValue(const QScriptValue& object, bool& _defaultSettings) { @@ -41,6 +42,7 @@ void AtmospherePropertyGroup::copyFromScriptValue(const QScriptValue& object, bo COPY_GROUP_PROPERTY_FROM_QSCRIPTVALUE_FLOAT(atmosphere, mieScattering, setMieScattering); COPY_GROUP_PROPERTY_FROM_QSCRIPTVALUE_FLOAT(atmosphere, rayleighScattering, setRayleighScattering); COPY_GROUP_PROPERTY_FROM_QSCRIPTVALUE_VEC3(atmosphere, scatteringWavelengths, setScatteringWavelengths); + COPY_GROUP_PROPERTY_FROM_QSCRIPTVALUE_BOOL(atmosphere, hasStars, setHasStars); } void AtmospherePropertyGroup::debugDump() const { @@ -51,6 +53,7 @@ void AtmospherePropertyGroup::debugDump() const { qDebug() << " Mie Scattering:" << getMieScattering(); qDebug() << " Rayleigh Scattering:" << getRayleighScattering(); qDebug() << " Scattering Wavelengths:" << getScatteringWavelengths(); + qDebug() << " Has Stars:" << getHasStars(); } bool AtmospherePropertyGroup::appentToEditPacket(OctreePacketData* packetData, @@ -68,6 +71,7 @@ bool AtmospherePropertyGroup::appentToEditPacket(OctreePacketData* packetData, APPEND_ENTITY_PROPERTY(PROP_ATMOSPHERE_MIE_SCATTERING, appendValue, getMieScattering()); APPEND_ENTITY_PROPERTY(PROP_ATMOSPHERE_RAYLEIGH_SCATTERING, appendValue, getRayleighScattering()); APPEND_ENTITY_PROPERTY(PROP_ATMOSPHERE_SCATTERING_WAVELENGTHS, appendValue, getScatteringWavelengths()); + APPEND_ENTITY_PROPERTY(PROP_ATMOSPHERE_HAS_STARS, appendValue, getHasStars()); return true; } @@ -84,6 +88,7 @@ bool AtmospherePropertyGroup::decodeFromEditPacket(EntityPropertyFlags& property READ_ENTITY_PROPERTY(PROP_ATMOSPHERE_MIE_SCATTERING, float, _mieScattering); READ_ENTITY_PROPERTY(PROP_ATMOSPHERE_RAYLEIGH_SCATTERING, float, _rayleighScattering); READ_ENTITY_PROPERTY(PROP_ATMOSPHERE_SCATTERING_WAVELENGTHS, glm::vec3, _scatteringWavelengths); + READ_ENTITY_PROPERTY(PROP_ATMOSPHERE_HAS_STARS, bool, _hasStars); processedBytes += bytesRead; @@ -97,6 +102,7 @@ void AtmospherePropertyGroup::markAllChanged() { _mieScatteringChanged = true; _rayleighScatteringChanged = true; _scatteringWavelengthsChanged = true; + _hasStarsChanged = true; } EntityPropertyFlags AtmospherePropertyGroup::getChangedProperties() const { @@ -108,6 +114,7 @@ EntityPropertyFlags AtmospherePropertyGroup::getChangedProperties() const { CHECK_PROPERTY_CHANGE(PROP_ATMOSPHERE_MIE_SCATTERING, mieScattering); CHECK_PROPERTY_CHANGE(PROP_ATMOSPHERE_RAYLEIGH_SCATTERING, rayleighScattering); CHECK_PROPERTY_CHANGE(PROP_ATMOSPHERE_SCATTERING_WAVELENGTHS, scatteringWavelengths); + CHECK_PROPERTY_CHANGE(PROP_ATMOSPHERE_HAS_STARS, hasStars); return changedProperties; } @@ -120,6 +127,7 @@ void AtmospherePropertyGroup::getProperties(EntityItemProperties& properties) co COPY_ENTITY_GROUP_PROPERTY_TO_PROPERTIES(Atmosphere, MieScattering, getMieScattering); COPY_ENTITY_GROUP_PROPERTY_TO_PROPERTIES(Atmosphere, RayleighScattering, getRayleighScattering); COPY_ENTITY_GROUP_PROPERTY_TO_PROPERTIES(Atmosphere, ScatteringWavelengths, getScatteringWavelengths); + COPY_ENTITY_GROUP_PROPERTY_TO_PROPERTIES(Atmosphere, HasStars, getHasStars); } bool AtmospherePropertyGroup::setProperties(const EntityItemProperties& properties) { @@ -131,6 +139,7 @@ bool AtmospherePropertyGroup::setProperties(const EntityItemProperties& properti SET_ENTITY_GROUP_PROPERTY_FROM_PROPERTIES(Atmosphere, MieScattering, mieScattering, setMieScattering); SET_ENTITY_GROUP_PROPERTY_FROM_PROPERTIES(Atmosphere, RayleighScattering, rayleighScattering, setRayleighScattering); SET_ENTITY_GROUP_PROPERTY_FROM_PROPERTIES(Atmosphere, ScatteringWavelengths, scatteringWavelengths, setScatteringWavelengths); + SET_ENTITY_GROUP_PROPERTY_FROM_PROPERTIES(Atmosphere, HasStars, hasStars, setHasStars); return somethingChanged; } @@ -144,6 +153,7 @@ EntityPropertyFlags AtmospherePropertyGroup::getEntityProperties(EncodeBitstream requestedProperties += PROP_ATMOSPHERE_MIE_SCATTERING; requestedProperties += PROP_ATMOSPHERE_RAYLEIGH_SCATTERING; requestedProperties += PROP_ATMOSPHERE_SCATTERING_WAVELENGTHS; + requestedProperties += PROP_ATMOSPHERE_HAS_STARS; return requestedProperties; } @@ -164,6 +174,7 @@ void AtmospherePropertyGroup::appendSubclassData(OctreePacketData* packetData, E APPEND_ENTITY_PROPERTY(PROP_ATMOSPHERE_MIE_SCATTERING, appendValue, getMieScattering()); APPEND_ENTITY_PROPERTY(PROP_ATMOSPHERE_RAYLEIGH_SCATTERING, appendValue, getRayleighScattering()); APPEND_ENTITY_PROPERTY(PROP_ATMOSPHERE_SCATTERING_WAVELENGTHS, appendValue, getScatteringWavelengths()); + APPEND_ENTITY_PROPERTY(PROP_ATMOSPHERE_HAS_STARS, appendValue, getHasStars()); } int AtmospherePropertyGroup::readEntitySubclassDataFromBuffer(const unsigned char* data, int bytesLeftToRead, @@ -179,6 +190,7 @@ int AtmospherePropertyGroup::readEntitySubclassDataFromBuffer(const unsigned cha READ_ENTITY_PROPERTY(PROP_ATMOSPHERE_MIE_SCATTERING, float, _mieScattering); READ_ENTITY_PROPERTY(PROP_ATMOSPHERE_RAYLEIGH_SCATTERING, float, _rayleighScattering); READ_ENTITY_PROPERTY(PROP_ATMOSPHERE_SCATTERING_WAVELENGTHS, glm::vec3, _scatteringWavelengths); + READ_ENTITY_PROPERTY(PROP_ATMOSPHERE_HAS_STARS, bool, _hasStars); return bytesRead; } diff --git a/libraries/entities/src/AtmospherePropertyGroup.h b/libraries/entities/src/AtmospherePropertyGroup.h index 3f3f2ff6d2..e081033cd6 100644 --- a/libraries/entities/src/AtmospherePropertyGroup.h +++ b/libraries/entities/src/AtmospherePropertyGroup.h @@ -96,6 +96,7 @@ public: DEFINE_PROPERTY(PROP_ATMOSPHERE_MIE_SCATTERING, MieScattering, mieScattering, float); DEFINE_PROPERTY(PROP_ATMOSPHERE_RAYLEIGH_SCATTERING, RayleighScattering, rayleighScattering, float); DEFINE_PROPERTY_REF(PROP_ATMOSPHERE_SCATTERING_WAVELENGTHS, ScatteringWavelengths, scatteringWavelengths, glm::vec3); + DEFINE_PROPERTY(PROP_ATMOSPHERE_HAS_STARS, HasStars, hasStars, bool); }; #endif // hifi_AtmospherePropertyGroup_h diff --git a/libraries/entities/src/EntityItemPropertiesMacros.h b/libraries/entities/src/EntityItemPropertiesMacros.h index a3be19b812..b8564f650f 100644 --- a/libraries/entities/src/EntityItemPropertiesMacros.h +++ b/libraries/entities/src/EntityItemPropertiesMacros.h @@ -306,6 +306,20 @@ } \ } +#define COPY_GROUP_PROPERTY_FROM_QSCRIPTVALUE_BOOL(G, P, S) \ + { \ + QScriptValue G = object.property(#G); \ + if (G.isValid()) { \ + QScriptValue P = G.property(#P); \ + if (P.isValid()) { \ + float newValue = P.toVariant().toBool(); \ + if (_defaultSettings || newValue != _##P) { \ + S(newValue); \ + } \ + } \ + } \ + } + #define COPY_PROPERTY_FROM_QSCRIPTVALUE_STRING(P, S)\ QScriptValue P = object.property(#P); \ if (P.isValid()) { \ diff --git a/libraries/entities/src/EntityPropertyFlags.h b/libraries/entities/src/EntityPropertyFlags.h index 969ed309bb..0b5d2ce805 100644 --- a/libraries/entities/src/EntityPropertyFlags.h +++ b/libraries/entities/src/EntityPropertyFlags.h @@ -142,7 +142,8 @@ enum EntityPropertyList { PROP_ATMOSPHERE_MIE_SCATTERING = PROP_EMIT_DIRECTION, PROP_ATMOSPHERE_RAYLEIGH_SCATTERING = PROP_EMIT_STRENGTH, PROP_ATMOSPHERE_SCATTERING_WAVELENGTHS = PROP_LOCAL_GRAVITY, - PROP_SKYBOX_MODE = PROP_PARTICLE_RADIUS, + PROP_ATMOSPHERE_HAS_STARS = PROP_PARTICLE_RADIUS, + PROP_SKYBOX_MODE = PROP_MODEL_URL, // SunBrightness - same as KeyLight Intensity? // SunLocation (or direction) - same as KeyLight diff --git a/libraries/entities/src/ZoneEntityItem.cpp b/libraries/entities/src/ZoneEntityItem.cpp index 4f9ae0a30f..cefc0b0de7 100644 --- a/libraries/entities/src/ZoneEntityItem.cpp +++ b/libraries/entities/src/ZoneEntityItem.cpp @@ -76,6 +76,7 @@ EnvironmentData ZoneEntityItem::getEnvironmentData() const { result.setRayleighScattering(_atmospherePropeties.getRayleighScattering()); result.setMieScattering(_atmospherePropeties.getMieScattering()); result.setScatteringWavelengths(_atmospherePropeties.getScatteringWavelengths()); + result.setHasStars(_atmospherePropeties.getHasStars()); // defaults for now... result.setSunLocation(glm::vec3(1000, 900, 1000)); diff --git a/libraries/environment/src/EnvironmentData.cpp b/libraries/environment/src/EnvironmentData.cpp index 913841fe31..f703b667bc 100644 --- a/libraries/environment/src/EnvironmentData.cpp +++ b/libraries/environment/src/EnvironmentData.cpp @@ -27,7 +27,8 @@ EnvironmentData::EnvironmentData(int id) : _mieScattering(0.0010f), _scatteringWavelengths(0.650f, 0.570f, 0.475f), _sunLocation(1000, 900, 1000), - _sunBrightness(20.0f) { + _sunBrightness(20.0f), + _hasStars(true) { } glm::vec3 EnvironmentData::getAtmosphereCenter(const glm::vec3& cameraPosition) const { diff --git a/libraries/environment/src/EnvironmentData.h b/libraries/environment/src/EnvironmentData.h index 52297682fd..ebbb3d1fb0 100644 --- a/libraries/environment/src/EnvironmentData.h +++ b/libraries/environment/src/EnvironmentData.h @@ -28,6 +28,9 @@ public: void setGravity(float gravity) { _gravity = gravity; } float getGravity() const { return _gravity; } + void setHasStars(bool value) { _hasStars = value; } + bool getHasStars() const { return _hasStars; } + void setAtmosphereCenter(const glm::vec3& center) { _atmosphereCenter = center; } void setAtmosphereInnerRadius(float radius) { _atmosphereInnerRadius = radius; } void setAtmosphereOuterRadius(float radius) { _atmosphereOuterRadius = radius; } @@ -73,6 +76,8 @@ private: glm::vec3 _sunLocation; float _sunBrightness; + + bool _hasStars; }; #endif // hifi_EnvironmentData_h