wire up atmosphere.hasStars property

This commit is contained in:
ZappoMan 2015-05-04 14:19:13 -07:00
parent cfe717fe08
commit 741323e6c1
8 changed files with 53 additions and 10 deletions

View file

@ -3112,22 +3112,30 @@ void Application::displaySide(Camera& theCamera, bool selfAvatarOnly, RenderArgs
// compute starfield alpha based on distance from atmosphere // compute starfield alpha based on distance from atmosphere
float alpha = 1.0f; float alpha = 1.0f;
bool hasStars = true;
if (Menu::getInstance()->isOptionChecked(MenuOption::Atmosphere)) { if (Menu::getInstance()->isOptionChecked(MenuOption::Atmosphere)) {
// TODO: handle this correctly for zones // TODO: handle this correctly for zones
const EnvironmentData& closestData = _environment.getClosestData(theCamera.getPosition()); const EnvironmentData& closestData = _environment.getClosestData(theCamera.getPosition());
float height = glm::distance(theCamera.getPosition(), closestData.getAtmosphereCenter());
if (height < closestData.getAtmosphereInnerRadius()) {
alpha = 0.0f;
} else if (height < closestData.getAtmosphereOuterRadius()) { if (closestData.getHasStars()) {
alpha = (height - closestData.getAtmosphereInnerRadius()) / float height = glm::distance(theCamera.getPosition(), closestData.getAtmosphereCenter());
(closestData.getAtmosphereOuterRadius() - closestData.getAtmosphereInnerRadius()); if (height < closestData.getAtmosphereInnerRadius()) {
alpha = 0.0f;
} else if (height < closestData.getAtmosphereOuterRadius()) {
alpha = (height - closestData.getAtmosphereInnerRadius()) /
(closestData.getAtmosphereOuterRadius() - closestData.getAtmosphereInnerRadius());
}
} else {
hasStars = false;
} }
} }
// finally render the starfield // finally render the starfield
//qDebug() << "stars alpha:" << alpha; //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)) { if (Menu::getInstance()->isOptionChecked(MenuOption::Wireframe)) {

View file

@ -22,7 +22,7 @@ AtmospherePropertyGroup::AtmospherePropertyGroup() {
_mieScattering = 0.0f; _mieScattering = 0.0f;
_rayleighScattering = 0.0f; _rayleighScattering = 0.0f;
_scatteringWavelengths = glm::vec3(0.0f); _scatteringWavelengths = glm::vec3(0.0f);
_hasStars = true;
} }
void AtmospherePropertyGroup::copyToScriptValue(QScriptValue& properties, QScriptEngine* engine, bool skipDefaults, EntityItemProperties& defaultEntityProperties) const { 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, MieScattering, mieScattering);
COPY_GROUP_PROPERTY_TO_QSCRIPTVALUE(Atmosphere, RayleighScattering, rayleighScattering); COPY_GROUP_PROPERTY_TO_QSCRIPTVALUE(Atmosphere, RayleighScattering, rayleighScattering);
COPY_GROUP_PROPERTY_TO_QSCRIPTVALUE_VEC3(Atmosphere, ScatteringWavelengths, scatteringWavelengths); 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) { 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, mieScattering, setMieScattering);
COPY_GROUP_PROPERTY_FROM_QSCRIPTVALUE_FLOAT(atmosphere, rayleighScattering, setRayleighScattering); COPY_GROUP_PROPERTY_FROM_QSCRIPTVALUE_FLOAT(atmosphere, rayleighScattering, setRayleighScattering);
COPY_GROUP_PROPERTY_FROM_QSCRIPTVALUE_VEC3(atmosphere, scatteringWavelengths, setScatteringWavelengths); COPY_GROUP_PROPERTY_FROM_QSCRIPTVALUE_VEC3(atmosphere, scatteringWavelengths, setScatteringWavelengths);
COPY_GROUP_PROPERTY_FROM_QSCRIPTVALUE_BOOL(atmosphere, hasStars, setHasStars);
} }
void AtmospherePropertyGroup::debugDump() const { void AtmospherePropertyGroup::debugDump() const {
@ -51,6 +53,7 @@ void AtmospherePropertyGroup::debugDump() const {
qDebug() << " Mie Scattering:" << getMieScattering(); qDebug() << " Mie Scattering:" << getMieScattering();
qDebug() << " Rayleigh Scattering:" << getRayleighScattering(); qDebug() << " Rayleigh Scattering:" << getRayleighScattering();
qDebug() << " Scattering Wavelengths:" << getScatteringWavelengths(); qDebug() << " Scattering Wavelengths:" << getScatteringWavelengths();
qDebug() << " Has Stars:" << getHasStars();
} }
bool AtmospherePropertyGroup::appentToEditPacket(OctreePacketData* packetData, 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_MIE_SCATTERING, appendValue, getMieScattering());
APPEND_ENTITY_PROPERTY(PROP_ATMOSPHERE_RAYLEIGH_SCATTERING, appendValue, getRayleighScattering()); APPEND_ENTITY_PROPERTY(PROP_ATMOSPHERE_RAYLEIGH_SCATTERING, appendValue, getRayleighScattering());
APPEND_ENTITY_PROPERTY(PROP_ATMOSPHERE_SCATTERING_WAVELENGTHS, appendValue, getScatteringWavelengths()); APPEND_ENTITY_PROPERTY(PROP_ATMOSPHERE_SCATTERING_WAVELENGTHS, appendValue, getScatteringWavelengths());
APPEND_ENTITY_PROPERTY(PROP_ATMOSPHERE_HAS_STARS, appendValue, getHasStars());
return true; 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_MIE_SCATTERING, float, _mieScattering);
READ_ENTITY_PROPERTY(PROP_ATMOSPHERE_RAYLEIGH_SCATTERING, float, _rayleighScattering); READ_ENTITY_PROPERTY(PROP_ATMOSPHERE_RAYLEIGH_SCATTERING, float, _rayleighScattering);
READ_ENTITY_PROPERTY(PROP_ATMOSPHERE_SCATTERING_WAVELENGTHS, glm::vec3, _scatteringWavelengths); READ_ENTITY_PROPERTY(PROP_ATMOSPHERE_SCATTERING_WAVELENGTHS, glm::vec3, _scatteringWavelengths);
READ_ENTITY_PROPERTY(PROP_ATMOSPHERE_HAS_STARS, bool, _hasStars);
processedBytes += bytesRead; processedBytes += bytesRead;
@ -97,6 +102,7 @@ void AtmospherePropertyGroup::markAllChanged() {
_mieScatteringChanged = true; _mieScatteringChanged = true;
_rayleighScatteringChanged = true; _rayleighScatteringChanged = true;
_scatteringWavelengthsChanged = true; _scatteringWavelengthsChanged = true;
_hasStarsChanged = true;
} }
EntityPropertyFlags AtmospherePropertyGroup::getChangedProperties() const { 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_MIE_SCATTERING, mieScattering);
CHECK_PROPERTY_CHANGE(PROP_ATMOSPHERE_RAYLEIGH_SCATTERING, rayleighScattering); CHECK_PROPERTY_CHANGE(PROP_ATMOSPHERE_RAYLEIGH_SCATTERING, rayleighScattering);
CHECK_PROPERTY_CHANGE(PROP_ATMOSPHERE_SCATTERING_WAVELENGTHS, scatteringWavelengths); CHECK_PROPERTY_CHANGE(PROP_ATMOSPHERE_SCATTERING_WAVELENGTHS, scatteringWavelengths);
CHECK_PROPERTY_CHANGE(PROP_ATMOSPHERE_HAS_STARS, hasStars);
return changedProperties; 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, MieScattering, getMieScattering);
COPY_ENTITY_GROUP_PROPERTY_TO_PROPERTIES(Atmosphere, RayleighScattering, getRayleighScattering); 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, ScatteringWavelengths, getScatteringWavelengths);
COPY_ENTITY_GROUP_PROPERTY_TO_PROPERTIES(Atmosphere, HasStars, getHasStars);
} }
bool AtmospherePropertyGroup::setProperties(const EntityItemProperties& properties) { 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, MieScattering, mieScattering, setMieScattering);
SET_ENTITY_GROUP_PROPERTY_FROM_PROPERTIES(Atmosphere, RayleighScattering, rayleighScattering, setRayleighScattering); 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, ScatteringWavelengths, scatteringWavelengths, setScatteringWavelengths);
SET_ENTITY_GROUP_PROPERTY_FROM_PROPERTIES(Atmosphere, HasStars, hasStars, setHasStars);
return somethingChanged; return somethingChanged;
} }
@ -144,6 +153,7 @@ EntityPropertyFlags AtmospherePropertyGroup::getEntityProperties(EncodeBitstream
requestedProperties += PROP_ATMOSPHERE_MIE_SCATTERING; requestedProperties += PROP_ATMOSPHERE_MIE_SCATTERING;
requestedProperties += PROP_ATMOSPHERE_RAYLEIGH_SCATTERING; requestedProperties += PROP_ATMOSPHERE_RAYLEIGH_SCATTERING;
requestedProperties += PROP_ATMOSPHERE_SCATTERING_WAVELENGTHS; requestedProperties += PROP_ATMOSPHERE_SCATTERING_WAVELENGTHS;
requestedProperties += PROP_ATMOSPHERE_HAS_STARS;
return requestedProperties; 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_MIE_SCATTERING, appendValue, getMieScattering());
APPEND_ENTITY_PROPERTY(PROP_ATMOSPHERE_RAYLEIGH_SCATTERING, appendValue, getRayleighScattering()); APPEND_ENTITY_PROPERTY(PROP_ATMOSPHERE_RAYLEIGH_SCATTERING, appendValue, getRayleighScattering());
APPEND_ENTITY_PROPERTY(PROP_ATMOSPHERE_SCATTERING_WAVELENGTHS, appendValue, getScatteringWavelengths()); 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, 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_MIE_SCATTERING, float, _mieScattering);
READ_ENTITY_PROPERTY(PROP_ATMOSPHERE_RAYLEIGH_SCATTERING, float, _rayleighScattering); READ_ENTITY_PROPERTY(PROP_ATMOSPHERE_RAYLEIGH_SCATTERING, float, _rayleighScattering);
READ_ENTITY_PROPERTY(PROP_ATMOSPHERE_SCATTERING_WAVELENGTHS, glm::vec3, _scatteringWavelengths); READ_ENTITY_PROPERTY(PROP_ATMOSPHERE_SCATTERING_WAVELENGTHS, glm::vec3, _scatteringWavelengths);
READ_ENTITY_PROPERTY(PROP_ATMOSPHERE_HAS_STARS, bool, _hasStars);
return bytesRead; return bytesRead;
} }

View file

@ -96,6 +96,7 @@ public:
DEFINE_PROPERTY(PROP_ATMOSPHERE_MIE_SCATTERING, MieScattering, mieScattering, float); DEFINE_PROPERTY(PROP_ATMOSPHERE_MIE_SCATTERING, MieScattering, mieScattering, float);
DEFINE_PROPERTY(PROP_ATMOSPHERE_RAYLEIGH_SCATTERING, RayleighScattering, rayleighScattering, float); DEFINE_PROPERTY(PROP_ATMOSPHERE_RAYLEIGH_SCATTERING, RayleighScattering, rayleighScattering, float);
DEFINE_PROPERTY_REF(PROP_ATMOSPHERE_SCATTERING_WAVELENGTHS, ScatteringWavelengths, scatteringWavelengths, glm::vec3); DEFINE_PROPERTY_REF(PROP_ATMOSPHERE_SCATTERING_WAVELENGTHS, ScatteringWavelengths, scatteringWavelengths, glm::vec3);
DEFINE_PROPERTY(PROP_ATMOSPHERE_HAS_STARS, HasStars, hasStars, bool);
}; };
#endif // hifi_AtmospherePropertyGroup_h #endif // hifi_AtmospherePropertyGroup_h

View file

@ -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)\ #define COPY_PROPERTY_FROM_QSCRIPTVALUE_STRING(P, S)\
QScriptValue P = object.property(#P); \ QScriptValue P = object.property(#P); \
if (P.isValid()) { \ if (P.isValid()) { \

View file

@ -142,7 +142,8 @@ enum EntityPropertyList {
PROP_ATMOSPHERE_MIE_SCATTERING = PROP_EMIT_DIRECTION, PROP_ATMOSPHERE_MIE_SCATTERING = PROP_EMIT_DIRECTION,
PROP_ATMOSPHERE_RAYLEIGH_SCATTERING = PROP_EMIT_STRENGTH, PROP_ATMOSPHERE_RAYLEIGH_SCATTERING = PROP_EMIT_STRENGTH,
PROP_ATMOSPHERE_SCATTERING_WAVELENGTHS = PROP_LOCAL_GRAVITY, 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? // SunBrightness - same as KeyLight Intensity?
// SunLocation (or direction) - same as KeyLight // SunLocation (or direction) - same as KeyLight

View file

@ -76,6 +76,7 @@ EnvironmentData ZoneEntityItem::getEnvironmentData() const {
result.setRayleighScattering(_atmospherePropeties.getRayleighScattering()); result.setRayleighScattering(_atmospherePropeties.getRayleighScattering());
result.setMieScattering(_atmospherePropeties.getMieScattering()); result.setMieScattering(_atmospherePropeties.getMieScattering());
result.setScatteringWavelengths(_atmospherePropeties.getScatteringWavelengths()); result.setScatteringWavelengths(_atmospherePropeties.getScatteringWavelengths());
result.setHasStars(_atmospherePropeties.getHasStars());
// defaults for now... // defaults for now...
result.setSunLocation(glm::vec3(1000, 900, 1000)); result.setSunLocation(glm::vec3(1000, 900, 1000));

View file

@ -27,7 +27,8 @@ EnvironmentData::EnvironmentData(int id) :
_mieScattering(0.0010f), _mieScattering(0.0010f),
_scatteringWavelengths(0.650f, 0.570f, 0.475f), _scatteringWavelengths(0.650f, 0.570f, 0.475f),
_sunLocation(1000, 900, 1000), _sunLocation(1000, 900, 1000),
_sunBrightness(20.0f) { _sunBrightness(20.0f),
_hasStars(true) {
} }
glm::vec3 EnvironmentData::getAtmosphereCenter(const glm::vec3& cameraPosition) const { glm::vec3 EnvironmentData::getAtmosphereCenter(const glm::vec3& cameraPosition) const {

View file

@ -28,6 +28,9 @@ public:
void setGravity(float gravity) { _gravity = gravity; } void setGravity(float gravity) { _gravity = gravity; }
float getGravity() const { return _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 setAtmosphereCenter(const glm::vec3& center) { _atmosphereCenter = center; }
void setAtmosphereInnerRadius(float radius) { _atmosphereInnerRadius = radius; } void setAtmosphereInnerRadius(float radius) { _atmosphereInnerRadius = radius; }
void setAtmosphereOuterRadius(float radius) { _atmosphereOuterRadius = radius; } void setAtmosphereOuterRadius(float radius) { _atmosphereOuterRadius = radius; }
@ -73,6 +76,8 @@ private:
glm::vec3 _sunLocation; glm::vec3 _sunLocation;
float _sunBrightness; float _sunBrightness;
bool _hasStars;
}; };
#endif // hifi_EnvironmentData_h #endif // hifi_EnvironmentData_h