mirror of
https://github.com/JulianGro/overte.git
synced 2025-04-14 11:46:34 +02:00
wire up atmosphere.hasStars property
This commit is contained in:
parent
cfe717fe08
commit
741323e6c1
8 changed files with 53 additions and 10 deletions
|
@ -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)) {
|
||||
|
|
|
@ -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;
|
||||
}
|
||||
|
|
|
@ -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
|
||||
|
|
|
@ -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()) { \
|
||||
|
|
|
@ -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
|
||||
|
||||
|
|
|
@ -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));
|
||||
|
|
|
@ -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 {
|
||||
|
|
|
@ -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
|
||||
|
|
Loading…
Reference in a new issue