From b2e5cc7c4e3a892e4dbc3e66814252d20e651a22 Mon Sep 17 00:00:00 2001 From: Nex Pro Date: Fri, 28 Aug 2015 02:29:01 +0100 Subject: [PATCH 01/37] Fixed list problems when list contains more than 200 entries. And some style fixes. --- examples/html/entityList.html | 48 ++++++++++++++++++----------------- 1 file changed, 25 insertions(+), 23 deletions(-) diff --git a/examples/html/entityList.html b/examples/html/entityList.html index 62bbbd08a6..457a448a8e 100644 --- a/examples/html/entityList.html +++ b/examples/html/entityList.html @@ -9,11 +9,13 @@ var currentSortOrder = 'asc'; var entityList = null; var refreshEntityListTimer = null; - var ASC_STRING = ' ▾'; - var DESC_STRING = ' ▴'; + const ASCENDING_STRING = ' ▾'; + const DESCENDING_STRING = ' ▴'; + const DELETE = 46; // Key code for the delete key. + const MAX_ITEMS = Number.MAX_VALUE; // Used to set the max length of the list of discovered entities. function loaded() { - entityList = new List('entity-list', { valueNames: ['name', 'type', 'url']}); + entityList = new List('entity-list', { valueNames: ['name', 'type', 'url'], page: MAX_ITEMS}); entityList.clear(); elEntityTable = document.getElementById("entity-table"); elEntityTableBody = document.getElementById("entity-table-body"); @@ -32,19 +34,19 @@ setSortColumn('url'); }; - function onRowClicked(e) { + function onRowClicked(clickEvent) { var id = this.dataset.entityId; var selection = [this.dataset.entityId]; - if (e.ctrlKey) { + if (clickEvent.ctrlKey) { selection = selection.concat(selectedEntities); - } else if (e.shiftKey && selectedEntities.length > 0) { + } else if (clickEvent.shiftKey && selectedEntities.length > 0) { var previousItemFound = -1; var clickedItemFound = -1; - for (var i in entityList.visibleItems) { - if (clickedItemFound === -1 && this.dataset.entityId == entityList.visibleItems[i].values().id) { - clickedItemFound = i; - } else if(previousItemFound === -1 && selectedEntities[0] == entityList.visibleItems[i].values().id) { - previousItemFound = i; + for (var entity in entityList.visibleItems) { + if (clickedItemFound === -1 && this.dataset.entityId == entityList.visibleItems[entity].values().id) { + clickedItemFound = entity; + } else if(previousItemFound === -1 && selectedEntities[0] == entityList.visibleItems[entity].values().id) { + previousItemFound = entity; } } if (previousItemFound !== -1 && clickedItemFound !== -1) { @@ -88,19 +90,19 @@ var filename = urlParts[urlParts.length - 1]; entityList.add([{ id: id, name: name, type: type, url: filename }], function(items) { - var el = items[0].elm; + var currentElement = items[0].elm; var id = items[0]._values.id; entities[id] = { id: id, name: name, - el: el, + el: currentElement, item: items[0], }; - el.setAttribute('id', 'entity_' + id); - el.setAttribute('title', url); - el.dataset.entityId = id; - el.onclick = onRowClicked; - el.ondblclick = onRowDoubleClicked; + currentElement.setAttribute('id', 'entity_' + id); + currentElement.setAttribute('title', url); + currentElement.dataset.entityId = id; + currentElement.onclick = onRowClicked; + currentElement.ondblclick = onRowDoubleClicked; }); if (refreshEntityListTimer) { @@ -132,7 +134,7 @@ currentSortColumn = column; currentSortOrder = "asc"; } - elSortOrder[column].innerHTML = currentSortOrder == "asc" ? ASC_STRING : DESC_STRING; + elSortOrder[column].innerHTML = currentSortOrder == "asc" ? ASCENDING_STRING : DESCENDING_STRING; entityList.sort(currentSortColumn, { order: currentSortOrder }); } @@ -175,12 +177,12 @@ refreshEntities(); } - document.addEventListener("keydown", function (e) { - if (e.target.nodeName === "INPUT") { + document.addEventListener("keydown", function (keyDownEvent) { + if (keyDownEvent.target.nodeName === "INPUT") { return; } - var keyCode = e.keyCode; - if (keyCode === 46) { + var keyCode = keyDownEvent.keyCode; + if (keyCode === DELETE) { EventBridge.emitWebEvent(JSON.stringify({ type: 'delete' })); refreshEntities(); } From 45ff118249e1f60eb7b538d00b38447d5bbc6ec4 Mon Sep 17 00:00:00 2001 From: David Rowe Date: Thu, 3 Sep 2015 12:43:36 -0700 Subject: [PATCH 02/37] Add new radiusSpread entity particle property --- .../RenderableParticleEffectEntityItem.cpp | 47 ++++++++++++------- .../entities/src/EntityItemProperties.cpp | 8 +++- libraries/entities/src/EntityItemProperties.h | 2 + libraries/entities/src/EntityPropertyFlags.h | 1 + .../entities/src/ParticleEffectEntityItem.cpp | 28 ++++++++--- .../entities/src/ParticleEffectEntityItem.h | 10 ++-- .../networking/src/udt/PacketHeaders.cpp | 2 +- libraries/networking/src/udt/PacketHeaders.h | 1 + 8 files changed, 69 insertions(+), 30 deletions(-) diff --git a/libraries/entities-renderer/src/RenderableParticleEffectEntityItem.cpp b/libraries/entities-renderer/src/RenderableParticleEffectEntityItem.cpp index f683083ed1..146dea8ea0 100644 --- a/libraries/entities-renderer/src/RenderableParticleEffectEntityItem.cpp +++ b/libraries/entities-renderer/src/RenderableParticleEffectEntityItem.cpp @@ -168,52 +168,63 @@ void RenderableParticleEffectEntityItem::update(const quint64& now) { updateRenderItem(); } -static glm::vec3 zSortAxis; -static bool zSort(const glm::vec3& rhs, const glm::vec3& lhs) { - return glm::dot(rhs, ::zSortAxis) > glm::dot(lhs, ::zSortAxis); -} - uint32_t toRGBA(uint8_t r, uint8_t g, uint8_t b, uint8_t a) { return ((uint32_t)r | (uint32_t)g << 8 | (uint32_t)b << 16 | (uint32_t)a << 24); } +class PositionAndRadius { +public: + PositionAndRadius(glm::vec3 position, float radius) : position(position), radius(radius) { } + + glm::vec3 position; + float radius; +}; + +static glm::vec3 zSortAxis; +static bool zSort(const PositionAndRadius& rhs, const PositionAndRadius& lhs) { + return glm::dot(rhs.position, ::zSortAxis) > glm::dot(lhs.position, ::zSortAxis); +} + void RenderableParticleEffectEntityItem::updateRenderItem() { if (!_scene) { return; } - float particleRadius = getParticleRadius(); + //float particleRadius = _particleRadiuses[i]; auto xcolor = getXColor(); auto alpha = (uint8_t)(glm::clamp(getLocalRenderAlpha(), 0.0f, 1.0f) * 255.0f); auto rgba = toRGBA(xcolor.red, xcolor.green, xcolor.blue, alpha); - // make a copy of each particle position - std::vector positions; - positions.reserve(getLivingParticleCount()); + // make a copy of each particle position and radius + std::vector positionsAndRadiuses; + positionsAndRadiuses.reserve(getLivingParticleCount()); for (quint32 i = _particleHeadIndex; i != _particleTailIndex; i = (i + 1) % _maxParticles) { - positions.push_back(_particlePositions[i]); + positionsAndRadiuses.push_back(PositionAndRadius(_particlePositions[i], _particleRadiuses[i])); } // sort particles back to front // NOTE: this is view frustum might be one frame out of date. auto frustum = AbstractViewStateInterface::instance()->getCurrentViewFrustum(); ::zSortAxis = frustum->getDirection(); - qSort(positions.begin(), positions.end(), zSort); + qSort(positionsAndRadiuses.begin(), positionsAndRadiuses.end(), zSort); // allocate vertices _vertices.clear(); // build vertices from particle positions - const glm::vec3 upOffset = frustum->getUp() * particleRadius; - const glm::vec3 rightOffset = frustum->getRight() * particleRadius; - for (auto&& pos : positions) { + const glm::vec3 up = frustum->getUp(); + const glm::vec3 right = frustum->getRight(); + for (auto&& particle : positionsAndRadiuses) { + glm::vec3 upOffset = up * particle.radius; + glm::vec3 rightOffset = right * particle.radius; // generate corners of quad aligned to face the camera. - _vertices.emplace_back(pos + rightOffset + upOffset, glm::vec2(1.0f, 1.0f), rgba); - _vertices.emplace_back(pos - rightOffset + upOffset, glm::vec2(0.0f, 1.0f), rgba); - _vertices.emplace_back(pos - rightOffset - upOffset, glm::vec2(0.0f, 0.0f), rgba); - _vertices.emplace_back(pos + rightOffset - upOffset, glm::vec2(1.0f, 0.0f), rgba); + _vertices.emplace_back(particle.position + rightOffset + upOffset, glm::vec2(1.0f, 1.0f), rgba); + _vertices.emplace_back(particle.position - rightOffset + upOffset, glm::vec2(0.0f, 1.0f), rgba); + _vertices.emplace_back(particle.position - rightOffset - upOffset, glm::vec2(0.0f, 0.0f), rgba); + _vertices.emplace_back(particle.position + rightOffset - upOffset, glm::vec2(1.0f, 0.0f), rgba); } + render::PendingChanges pendingChanges; pendingChanges.updateItem(_renderItemId, [this](ParticlePayload& payload) { // update vertex buffer diff --git a/libraries/entities/src/EntityItemProperties.cpp b/libraries/entities/src/EntityItemProperties.cpp index c6c02f248c..e7204e33d8 100644 --- a/libraries/entities/src/EntityItemProperties.cpp +++ b/libraries/entities/src/EntityItemProperties.cpp @@ -89,6 +89,7 @@ CONSTRUCT_PROPERTY(velocitySpread, ParticleEffectEntityItem::DEFAULT_VELOCITY_SP CONSTRUCT_PROPERTY(emitAcceleration, ParticleEffectEntityItem::DEFAULT_EMIT_ACCELERATION), CONSTRUCT_PROPERTY(accelerationSpread, ParticleEffectEntityItem::DEFAULT_ACCELERATION_SPREAD), CONSTRUCT_PROPERTY(particleRadius, ParticleEffectEntityItem::DEFAULT_PARTICLE_RADIUS), +CONSTRUCT_PROPERTY(radiusSpread, ParticleEffectEntityItem::DEFAULT_RADIUS_SPREAD), CONSTRUCT_PROPERTY(marketplaceID, ENTITY_ITEM_DEFAULT_MARKETPLACE_ID), CONSTRUCT_PROPERTY(keyLightColor, ZoneEntityItem::DEFAULT_KEYLIGHT_COLOR), CONSTRUCT_PROPERTY(keyLightIntensity, ZoneEntityItem::DEFAULT_KEYLIGHT_INTENSITY), @@ -355,6 +356,7 @@ EntityPropertyFlags EntityItemProperties::getChangedProperties() const { CHECK_PROPERTY_CHANGE(PROP_EMIT_ACCELERATION, emitAcceleration); CHECK_PROPERTY_CHANGE(PROP_ACCELERATION_SPREAD, accelerationSpread); CHECK_PROPERTY_CHANGE(PROP_PARTICLE_RADIUS, particleRadius); + CHECK_PROPERTY_CHANGE(PROP_RADIUS_SPREAD, radiusSpread); CHECK_PROPERTY_CHANGE(PROP_MARKETPLACE_ID, marketplaceID); CHECK_PROPERTY_CHANGE(PROP_NAME, name); CHECK_PROPERTY_CHANGE(PROP_KEYLIGHT_COLOR, keyLightColor); @@ -458,6 +460,7 @@ QScriptValue EntityItemProperties::copyToScriptValue(QScriptEngine* engine, bool COPY_PROPERTY_TO_QSCRIPTVALUE(emitAcceleration); COPY_PROPERTY_TO_QSCRIPTVALUE(accelerationSpread); COPY_PROPERTY_TO_QSCRIPTVALUE(particleRadius); + COPY_PROPERTY_TO_QSCRIPTVALUE(radiusSpread); COPY_PROPERTY_TO_QSCRIPTVALUE(marketplaceID); COPY_PROPERTY_TO_QSCRIPTVALUE(name); COPY_PROPERTY_TO_QSCRIPTVALUE(collisionSoundURL); @@ -579,6 +582,7 @@ void EntityItemProperties::copyFromScriptValue(const QScriptValue& object, bool COPY_PROPERTY_FROM_QSCRIPTVALUE(emitAcceleration, glmVec3, setEmitAcceleration); COPY_PROPERTY_FROM_QSCRIPTVALUE(accelerationSpread, glmVec3, setAccelerationSpread); COPY_PROPERTY_FROM_QSCRIPTVALUE(particleRadius, float, setParticleRadius); + COPY_PROPERTY_FROM_QSCRIPTVALUE(radiusSpread, float, setRadiusSpread); COPY_PROPERTY_FROM_QSCRIPTVALUE(marketplaceID, QString, setMarketplaceID); COPY_PROPERTY_FROM_QSCRIPTVALUE(name, QString, setName); COPY_PROPERTY_FROM_QSCRIPTVALUE(collisionSoundURL, QString, setCollisionSoundURL); @@ -821,7 +825,7 @@ bool EntityItemProperties::encodeEntityEditPacket(PacketType::Value command, Ent APPEND_ENTITY_PROPERTY(PROP_EMIT_ACCELERATION, properties.getEmitAcceleration()); APPEND_ENTITY_PROPERTY(PROP_ACCELERATION_SPREAD, properties.getAccelerationSpread()); APPEND_ENTITY_PROPERTY(PROP_PARTICLE_RADIUS, properties.getParticleRadius()); - + APPEND_ENTITY_PROPERTY(PROP_RADIUS_SPREAD, properties.getRadiusSpread()); } if (properties.getType() == EntityTypes::Zone) { @@ -1091,6 +1095,7 @@ bool EntityItemProperties::decodeEntityEditPacket(const unsigned char* data, int READ_ENTITY_PROPERTY_TO_PROPERTIES(PROP_EMIT_ACCELERATION, glm::vec3, setEmitAcceleration); READ_ENTITY_PROPERTY_TO_PROPERTIES(PROP_ACCELERATION_SPREAD, glm::vec3, setAccelerationSpread); READ_ENTITY_PROPERTY_TO_PROPERTIES(PROP_PARTICLE_RADIUS, float, setParticleRadius); + READ_ENTITY_PROPERTY_TO_PROPERTIES(PROP_RADIUS_SPREAD, float, setRadiusSpread); } if (properties.getType() == EntityTypes::Zone) { @@ -1223,6 +1228,7 @@ void EntityItemProperties::markAllChanged() { _emitAccelerationChanged = true; _accelerationSpreadChanged = true; _particleRadiusChanged = true; + _radiusSpreadChanged = true; _marketplaceIDChanged = true; diff --git a/libraries/entities/src/EntityItemProperties.h b/libraries/entities/src/EntityItemProperties.h index 6d95faa9b1..0c4d963fc5 100644 --- a/libraries/entities/src/EntityItemProperties.h +++ b/libraries/entities/src/EntityItemProperties.h @@ -136,6 +136,7 @@ public: DEFINE_PROPERTY(PROP_EMIT_ACCELERATION, EmitAcceleration, emitAcceleration, glm::vec3); DEFINE_PROPERTY(PROP_ACCELERATION_SPREAD, AccelerationSpread, accelerationSpread, glm::vec3); DEFINE_PROPERTY(PROP_PARTICLE_RADIUS, ParticleRadius, particleRadius, float); + DEFINE_PROPERTY(PROP_RADIUS_SPREAD, RadiusSpread, radiusSpread, float); DEFINE_PROPERTY_REF(PROP_MARKETPLACE_ID, MarketplaceID, marketplaceID, QString); DEFINE_PROPERTY_REF(PROP_KEYLIGHT_COLOR, KeyLightColor, keyLightColor, xColor); DEFINE_PROPERTY(PROP_KEYLIGHT_INTENSITY, KeyLightIntensity, keyLightIntensity, float); @@ -316,6 +317,7 @@ inline QDebug operator<<(QDebug debug, const EntityItemProperties& properties) { DEBUG_PROPERTY_IF_CHANGED(debug, properties, EmitAcceleration, emitAcceleration, ""); DEBUG_PROPERTY_IF_CHANGED(debug, properties, AccelerationSpread, accelerationSpread, ""); DEBUG_PROPERTY_IF_CHANGED(debug, properties, ParticleRadius, particleRadius, ""); + DEBUG_PROPERTY_IF_CHANGED(debug, properties, RadiusSpread, radiusSpread, ""); DEBUG_PROPERTY_IF_CHANGED(debug, properties, MarketplaceID, marketplaceID, ""); DEBUG_PROPERTY_IF_CHANGED(debug, properties, BackgroundMode, backgroundMode, ""); DEBUG_PROPERTY_IF_CHANGED(debug, properties, VoxelVolumeSize, voxelVolumeSize, ""); diff --git a/libraries/entities/src/EntityPropertyFlags.h b/libraries/entities/src/EntityPropertyFlags.h index abb8241d8f..8d1ad12a8d 100644 --- a/libraries/entities/src/EntityPropertyFlags.h +++ b/libraries/entities/src/EntityPropertyFlags.h @@ -138,6 +138,7 @@ enum EntityPropertyList { // used by particles PROP_VELOCITY_SPREAD, PROP_ACCELERATION_SPREAD, + PROP_RADIUS_SPREAD, //////////////////////////////////////////////////////////////////////////////////////////////////// // ATTENTION: add new properties to end of list just ABOVE this line diff --git a/libraries/entities/src/ParticleEffectEntityItem.cpp b/libraries/entities/src/ParticleEffectEntityItem.cpp index 7dab825adc..202bb82051 100644 --- a/libraries/entities/src/ParticleEffectEntityItem.cpp +++ b/libraries/entities/src/ParticleEffectEntityItem.cpp @@ -54,6 +54,7 @@ const glm::vec3 ParticleEffectEntityItem::DEFAULT_VELOCITY_SPREAD(3.0f, 0.0f, 3. const glm::vec3 ParticleEffectEntityItem::DEFAULT_EMIT_ACCELERATION(0.0f, -9.8f, 0.0f); const glm::vec3 ParticleEffectEntityItem::DEFAULT_ACCELERATION_SPREAD(0.0f, 0.0f, 0.0f); const float ParticleEffectEntityItem::DEFAULT_PARTICLE_RADIUS = 0.025f; +const float ParticleEffectEntityItem::DEFAULT_RADIUS_SPREAD = 0.0f; const QString ParticleEffectEntityItem::DEFAULT_TEXTURES = ""; @@ -72,6 +73,7 @@ ParticleEffectEntityItem::ParticleEffectEntityItem(const EntityItemID& entityIte _emitAcceleration(DEFAULT_EMIT_ACCELERATION), _accelerationSpread(DEFAULT_ACCELERATION_SPREAD), _particleRadius(DEFAULT_PARTICLE_RADIUS), + _radiusSpread(DEFAULT_RADIUS_SPREAD), _lastAnimated(usecTimestampNow()), _animationLoop(), _animationSettings(), @@ -82,6 +84,7 @@ ParticleEffectEntityItem::ParticleEffectEntityItem(const EntityItemID& entityIte _particlePositions(DEFAULT_MAX_PARTICLES, glm::vec3(0.0f, 0.0f, 0.0f)), _particleVelocities(DEFAULT_MAX_PARTICLES, glm::vec3(0.0f, 0.0f, 0.0f)), _particleAccelerations(DEFAULT_MAX_PARTICLES, glm::vec3(0.0f, 0.0f, 0.0f)), + _particleRadiuses(DEFAULT_MAX_PARTICLES, DEFAULT_PARTICLE_RADIUS), _timeUntilNextEmit(0.0f), _particleHeadIndex(0), _particleTailIndex(0), @@ -111,7 +114,6 @@ void ParticleEffectEntityItem::setVelocitySpread(const glm::vec3& velocitySpread computeAndUpdateDimensions(); } - void ParticleEffectEntityItem::setEmitAcceleration(const glm::vec3& emitAcceleration) { _emitAcceleration = emitAcceleration; computeAndUpdateDimensions(); @@ -126,6 +128,10 @@ void ParticleEffectEntityItem::setParticleRadius(float particleRadius) { _particleRadius = particleRadius; } +void ParticleEffectEntityItem::setRadiusSpread(float radiusSpread) { + _radiusSpread = radiusSpread; +} + void ParticleEffectEntityItem::computeAndUpdateDimensions() { const float time = _lifespan * 1.1f; // add 10% extra time to account for incremental timer accumulation error @@ -163,9 +169,9 @@ EntityItemProperties ParticleEffectEntityItem::getProperties() const { COPY_ENTITY_PROPERTY_TO_PROPERTIES(lifespan, getLifespan); COPY_ENTITY_PROPERTY_TO_PROPERTIES(emitRate, getEmitRate); COPY_ENTITY_PROPERTY_TO_PROPERTIES(emitVelocity, getEmitVelocity); - COPY_ENTITY_PROPERTY_TO_PROPERTIES(emitAcceleration, getEmitAcceleration); COPY_ENTITY_PROPERTY_TO_PROPERTIES(particleRadius, getParticleRadius); + COPY_ENTITY_PROPERTY_TO_PROPERTIES(radiusSpread, getRadiusSpread); COPY_ENTITY_PROPERTY_TO_PROPERTIES(textures, getTextures); return properties; @@ -185,11 +191,12 @@ bool ParticleEffectEntityItem::setProperties(const EntityItemProperties& propert SET_ENTITY_PROPERTY_FROM_PROPERTIES(lifespan, setLifespan); SET_ENTITY_PROPERTY_FROM_PROPERTIES(emitRate, setEmitRate); SET_ENTITY_PROPERTY_FROM_PROPERTIES(emitVelocity, setEmitVelocity); + SET_ENTITY_PROPERTY_FROM_PROPERTIES(velocitySpread, setVelocitySpread); SET_ENTITY_PROPERTY_FROM_PROPERTIES(emitAcceleration, setEmitAcceleration); SET_ENTITY_PROPERTY_FROM_PROPERTIES(accelerationSpread, setAccelerationSpread); SET_ENTITY_PROPERTY_FROM_PROPERTIES(particleRadius, setParticleRadius); + SET_ENTITY_PROPERTY_FROM_PROPERTIES(radiusSpread, setRadiusSpread); SET_ENTITY_PROPERTY_FROM_PROPERTIES(textures, setTextures); - SET_ENTITY_PROPERTY_FROM_PROPERTIES(velocitySpread, setVelocitySpread); if (somethingChanged) { bool wantDebug = false; @@ -257,6 +264,10 @@ int ParticleEffectEntityItem::readEntitySubclassDataFromBuffer(const unsigned ch READ_ENTITY_PROPERTY(PROP_TEXTURES, QString, setTextures); } + if (args.bitstreamVersion >= VERSION_ENTITIES_PARTICLE_RADIUS_SPREAD) { + READ_ENTITY_PROPERTY(PROP_RADIUS_SPREAD, float, setRadiusSpread); + } + return bytesRead; } @@ -280,6 +291,7 @@ EntityPropertyFlags ParticleEffectEntityItem::getEntityProperties(EncodeBitstrea requestedProperties += PROP_PARTICLE_RADIUS; requestedProperties += PROP_TEXTURES; requestedProperties += PROP_VELOCITY_SPREAD; + requestedProperties += PROP_RADIUS_SPREAD; return requestedProperties; } @@ -308,6 +320,7 @@ void ParticleEffectEntityItem::appendSubclassData(OctreePacketData* packetData, APPEND_ENTITY_PROPERTY(PROP_PARTICLE_RADIUS, getParticleRadius()); APPEND_ENTITY_PROPERTY(PROP_TEXTURES, getTextures()); APPEND_ENTITY_PROPERTY(PROP_VELOCITY_SPREAD, getVelocitySpread()); + APPEND_ENTITY_PROPERTY(PROP_RADIUS_SPREAD, getRadiusSpread()); } bool ParticleEffectEntityItem::isAnimatingSomething() const { @@ -514,7 +527,7 @@ void ParticleEffectEntityItem::stepSimulation(float deltaTime) { } } - // emit new particles, but only if animaiton is playing + // emit new particles, but only if animation is playing if (getAnimationIsPlaying()) { float timeLeftInFrame = deltaTime; @@ -527,12 +540,12 @@ void ParticleEffectEntityItem::stepSimulation(float deltaTime) { quint32 i = _particleTailIndex; _particleLifetimes[i] = _lifespan; - + _particleRadiuses[i] = _particleRadius + (2.0f * randFloat() - 1) * _radiusSpread; + glm::vec3 spreadOffset; spreadOffset.x = -_velocitySpread.x + randFloat() * (_velocitySpread.x * 2.0f); spreadOffset.y = -_velocitySpread.y + randFloat() * (_velocitySpread.y * 2.0f); spreadOffset.z = -_velocitySpread.z + randFloat() * (_velocitySpread.z * 2.0f); - // set initial conditions _particlePositions[i] = getPosition(); @@ -571,8 +584,9 @@ void ParticleEffectEntityItem::setMaxParticles(quint32 maxParticles) { _particleLifetimes.resize(_maxParticles); _particlePositions.resize(_maxParticles); _particleVelocities.resize(_maxParticles); + _particleRadiuses.resize(_maxParticles); - // effectivly clear all particles and start emitting new ones from scratch. + // effectively clear all particles and start emitting new ones from scratch. _particleHeadIndex = 0; _particleTailIndex = 0; _timeUntilNextEmit = 0.0f; diff --git a/libraries/entities/src/ParticleEffectEntityItem.h b/libraries/entities/src/ParticleEffectEntityItem.h index 4ed9216e85..844348a667 100644 --- a/libraries/entities/src/ParticleEffectEntityItem.h +++ b/libraries/entities/src/ParticleEffectEntityItem.h @@ -102,12 +102,10 @@ public: void setEmitVelocity(const glm::vec3& emitVelocity); const glm::vec3& getEmitVelocity() const { return _emitVelocity; } - static const glm::vec3 DEFAULT_VELOCITY_SPREAD; void setVelocitySpread(const glm::vec3& velocitySpread); const glm::vec3& getVelocitySpread() const { return _velocitySpread; } - static const glm::vec3 DEFAULT_EMIT_ACCELERATION; void setEmitAcceleration(const glm::vec3& emitAcceleration); const glm::vec3& getEmitAcceleration() const { return _emitAcceleration; } @@ -119,7 +117,11 @@ public: static const float DEFAULT_PARTICLE_RADIUS; void setParticleRadius(float particleRadius); float getParticleRadius() const { return _particleRadius; } - + + static const float DEFAULT_RADIUS_SPREAD; + void setRadiusSpread(float radiusSpread); + float getRadiusSpread() const { return _radiusSpread; } + void computeAndUpdateDimensions(); @@ -155,6 +157,7 @@ protected: glm::vec3 _emitAcceleration; glm::vec3 _accelerationSpread; float _particleRadius; + float _radiusSpread; quint64 _lastAnimated; AnimationLoop _animationLoop; QString _animationSettings; @@ -167,6 +170,7 @@ protected: QVector _particlePositions; QVector _particleVelocities; QVector _particleAccelerations; + QVector _particleRadiuses; float _timeUntilNextEmit; // particle arrays are a ring buffer, use these indicies diff --git a/libraries/networking/src/udt/PacketHeaders.cpp b/libraries/networking/src/udt/PacketHeaders.cpp index ac72f1bd68..da84a7cec8 100644 --- a/libraries/networking/src/udt/PacketHeaders.cpp +++ b/libraries/networking/src/udt/PacketHeaders.cpp @@ -67,7 +67,7 @@ PacketVersion versionForPacketType(PacketType::Value packetType) { case EntityAdd: case EntityEdit: case EntityData: - return VERSION_ENTITIES_PARTICLE_MODIFICATIONS; + return VERSION_ENTITIES_PARTICLE_RADIUS_SPREAD; case AvatarData: return 13; default: diff --git a/libraries/networking/src/udt/PacketHeaders.h b/libraries/networking/src/udt/PacketHeaders.h index fa6178b627..ce58273f43 100644 --- a/libraries/networking/src/udt/PacketHeaders.h +++ b/libraries/networking/src/udt/PacketHeaders.h @@ -144,5 +144,6 @@ const PacketVersion VERSION_POLYVOX_TEXTURES = 36; const PacketVersion VERSION_ENTITIES_POLYLINE = 37; const PacketVersion VERSION_OCTREE_CENTERED_ORIGIN = 38; const PacketVersion VERSION_ENTITIES_PARTICLE_MODIFICATIONS = 39; +const PacketVersion VERSION_ENTITIES_PARTICLE_RADIUS_SPREAD = 40; #endif // hifi_PacketHeaders_h \ No newline at end of file From 2bc2582797de5d8ef4a0bc8daceb902b53282bf4 Mon Sep 17 00:00:00 2001 From: David Rowe Date: Thu, 3 Sep 2015 12:44:13 -0700 Subject: [PATCH 03/37] Fix missing entity property gets for velocity and acceleration spread --- libraries/entities/src/ParticleEffectEntityItem.cpp | 2 ++ 1 file changed, 2 insertions(+) diff --git a/libraries/entities/src/ParticleEffectEntityItem.cpp b/libraries/entities/src/ParticleEffectEntityItem.cpp index 202bb82051..da19f64361 100644 --- a/libraries/entities/src/ParticleEffectEntityItem.cpp +++ b/libraries/entities/src/ParticleEffectEntityItem.cpp @@ -169,7 +169,9 @@ EntityItemProperties ParticleEffectEntityItem::getProperties() const { COPY_ENTITY_PROPERTY_TO_PROPERTIES(lifespan, getLifespan); COPY_ENTITY_PROPERTY_TO_PROPERTIES(emitRate, getEmitRate); COPY_ENTITY_PROPERTY_TO_PROPERTIES(emitVelocity, getEmitVelocity); + COPY_ENTITY_PROPERTY_TO_PROPERTIES(velocitySpread, getVelocitySpread); COPY_ENTITY_PROPERTY_TO_PROPERTIES(emitAcceleration, getEmitAcceleration); + COPY_ENTITY_PROPERTY_TO_PROPERTIES(accelerationSpread, getAccelerationSpread); COPY_ENTITY_PROPERTY_TO_PROPERTIES(particleRadius, getParticleRadius); COPY_ENTITY_PROPERTY_TO_PROPERTIES(radiusSpread, getRadiusSpread); COPY_ENTITY_PROPERTY_TO_PROPERTIES(textures, getTextures); From 341e1dcf684f88c6ce203684c61f0f4d5c136c2b Mon Sep 17 00:00:00 2001 From: David Rowe Date: Thu, 3 Sep 2015 12:44:29 -0700 Subject: [PATCH 04/37] Add particleTest.js script to demo / test entity particle properties --- examples/example/entities/particlesTest.js | 117 +++++++++++++++++++++ 1 file changed, 117 insertions(+) create mode 100644 examples/example/entities/particlesTest.js diff --git a/examples/example/entities/particlesTest.js b/examples/example/entities/particlesTest.js new file mode 100644 index 0000000000..f2c80b6895 --- /dev/null +++ b/examples/example/entities/particlesTest.js @@ -0,0 +1,117 @@ +// +// particlesTest.js +// examples/example/entities +// +// Created by David Rowe on 2 Sep 2015. +// Copyright 2015 High Fidelity, Inc. +// +// Click on the box entity to display different particle effects. +// +// Distributed under the Apache License, Version 2.0. +// See the accompanying file LICENSE or http://www.apache.org/licenses/LICENSE-2.0.html +// + +(function () { + var box, + particles, + particleExample = -1, + NUM_PARTICLE_EXAMPLES = 4; + + function onClickDownOnEntity(entityID) { + if (entityID === box || entityID === particles) { + particleExample = (particleExample + 1) % NUM_PARTICLE_EXAMPLES; + + switch (particleExample) { + case 0: + print("Simple animation"); + Entities.editEntity(particles, { + velocitySpread: { x: 0.0, y: 0.0, z: 0.0 }, + accelerationSpread: { x: 0.0, y: 0.0, z: 0.0 }, + radiusSpread: 0.0, + animationIsPlaying: true + }); + break; + case 1: + print("Velocity spread"); + Entities.editEntity(particles, { + velocitySpread: { x: 0.1, y: 0.0, z: 0.1 }, + accelerationSpread: { x: 0.0, y: 0.0, z: 0.0 }, + radiusSpread: 0.0, + animationIsPlaying: true + }); + break; + case 2: + print("Acceleration spread"); + Entities.editEntity(particles, { + velocitySpread: { x: 0.0, y: 0.0, z: 0.0 }, + accelerationSpread: { x: 0.0, y: 0.1, z: 0.0 }, + radiusSpread: 0.0, + animationIsPlaying: true + }); + break; + case 3: + print("Radius spread"); + Entities.editEntity(particles, { + velocitySpread: { x: 0.0, y: 0.0, z: 0.0 }, + accelerationSpread: { x: 0.0, y: 0.0, z: 0.0 }, + radiusSpread: 0.035, + animationIsPlaying: true + }); + break; + } + } + } + + function setUp() { + var spawnPoint = Vec3.sum(MyAvatar.position, Vec3.multiply(4.0, Quat.getFront(Camera.getOrientation()))), + animation = { + fps: 30, + frameIndex: 0, + running: true, + firstFrame: 0, + lastFrame: 30, + loop: true + }; + + box = Entities.addEntity({ + type: "Box", + position: spawnPoint, + dimensions: { x: 0.3, y: 0.3, z: 0.3 }, + color: { red: 128, green: 128, blue: 128 }, + lifetime: 3600 // 1 hour; just in case + }); + + particles = Entities.addEntity({ + type: "ParticleEffect", + position: spawnPoint, + particleRadius: 0.04, + particleRadiusSpread: 0.0, + emitRate: 2.0, + emitVelocity: { x: 0.0, y: 1.0, z: 0.0 }, + velocitySpread: { x: 0.0, y: 0.0, z: 0.0 }, + emitAcceleration: { x: 0.0, y: -0.3, z: 0.0 }, + accelerationSpread: { x: 0.0, y: 0.0, z: 0.0 }, + textures: "https://raw.githubusercontent.com/ericrius1/SantasLair/santa/assets/smokeparticle.png", + color: { red: 255, green: 255, blue: 255 }, + lifespan: 5.0, + visible: true, + locked: false, + animationSettings: animation, + animationIsPlaying: false, + lifetime: 3600 // 1 hour; just in case + }); + + Entities.clickDownOnEntity.connect(onClickDownOnEntity); + + print("Click on the box to cycle through particle examples"); + } + + function tearDown() { + Entities.clickDownOnEntity.disconnect(onClickDownOnEntity); + Entities.deleteEntity(particles); + Entities.deleteEntity(box); + } + + setUp(); + Script.scriptEnding.connect(tearDown); +}()); \ No newline at end of file From 80c18c227e3874a8dd0d37b9aab232e75e8f3b01 Mon Sep 17 00:00:00 2001 From: James Pollack Date: Thu, 3 Sep 2015 16:42:14 -0700 Subject: [PATCH 05/37] Attach the wand.js script to an entity and then move it around to make bubbles. Customize bubble behavior with bubble.js - make sure to update the path reference in wand.js --- examples/toys/bubblewand/bubble.js | 39 ++++ examples/toys/bubblewand/wand.js | 343 +++++++++++++++++++++++++++++ 2 files changed, 382 insertions(+) create mode 100644 examples/toys/bubblewand/bubble.js create mode 100644 examples/toys/bubblewand/wand.js diff --git a/examples/toys/bubblewand/bubble.js b/examples/toys/bubblewand/bubble.js new file mode 100644 index 0000000000..ae673b994e --- /dev/null +++ b/examples/toys/bubblewand/bubble.js @@ -0,0 +1,39 @@ +(function() { + + var popSound; + this.preload = function(entityID) { + // console.log('bubble preload') + this.entityID = entityID; + popSound = SoundCache.getSound("http://hifi-public.s3.amazonaws.com/james/bubblewand/sounds/pop.wav"); + + } + + this.collisionWithEntity = function(myID, otherID, collision) { + + Entities.deleteEntity(myID); + this.burstBubbleSound(collision.contactPoint) + + }; + + this.unload = function(entityID) { + // console.log('bubble unload') + // this.properties = Entities.getEntityProperties(entityID); + //var location = this.properties.position; + //this.burstBubbleSound(); + }; + + + + this.burstBubbleSound = function(location) { + + var audioOptions = { + volume: 0.5, + position: location + } + + //Audio.playSound(popSound, audioOptions); + + } + + +}) \ No newline at end of file diff --git a/examples/toys/bubblewand/wand.js b/examples/toys/bubblewand/wand.js new file mode 100644 index 0000000000..3e16fa5e08 --- /dev/null +++ b/examples/toys/bubblewand/wand.js @@ -0,0 +1,343 @@ +// wand.js +// part of bubblewand +// +// Created by James B. Pollack @imgntn -- 09/03/2015 +// Copyright 2015 High Fidelity, Inc. +// +// Makes bubbles when you wave the object around, or hold it near your mouth and make noise into the microphone. +// +// For the example, it's attached to a wand -- but you can attach it to whatever entity you want. I dream of BubbleBees :) bzzzz...pop! +// +// Distributed under the Apache License, Version 2.0. +// See the accompanying file LICENSE or http://www.apache.org/licenses/LICENSE-2.0.html + +function randInt(min, max) { + return Math.floor(Math.random() * (max - min)) + min; +} + + +function convertRange(value, r1, r2) { + return (value - r1[0]) * (r2[1] - r2[0]) / (r1[1] - r1[0]) + r2[0]; +} + +// helpers -- @zappoman +// Computes the penetration between a point and a sphere (centered at the origin) +// if point is inside sphere: returns true and stores the result in 'penetration' +// (the vector that would move the point outside the sphere) +// otherwise returns false +function findSphereHit(point, sphereRadius) { + var EPSILON = 0.000001; //smallish positive number - used as margin of error for some computations + var vectorLength = Vec3.length(point); + if (vectorLength < EPSILON) { + return true; + } + var distance = vectorLength - sphereRadius; + if (distance < 0.0) { + return true; + } + return false; +} + +function findSpherePointHit(sphereCenter, sphereRadius, point) { + return findSphereHit(Vec3.subtract(point, sphereCenter), sphereRadius); +} + +function findSphereSphereHit(firstCenter, firstRadius, secondCenter, secondRadius) { + return findSpherePointHit(firstCenter, firstRadius + secondRadius, secondCenter); +} + +(function() { + var console = {}; + console.log = function(p) { + if (arguments.length > 1) { + + for (var i = 1; i < arguments.length; i++) { + print(arguments[i]) + } + + } else { + print(p) + } + + } + + var bubbleModel = "http://hifi-public.s3.amazonaws.com/james/bubblewand/models/bubble/bubble.fbx"; + var bubbleScript = 'http://hifi-public.s3.amazonaws.com/james/bubblewand/scripts/bubble.js?' + randInt(2, 5096); + var popSound = SoundCache.getSound("http://hifi-public.s3.amazonaws.com/james/bubblewand/sounds/pop.wav"); + var wandModel = "http://hifi-public.s3.amazonaws.com/james/bubblewand/models/wand/wand.fbx"; + + + + var targetSize = 0.4; + var targetColor = { + red: 128, + green: 128, + blue: 128 + }; + var targetColorHit = { + red: 0, + green: 255, + blue: 0 + }; + var moveCycleColor = { + red: 255, + green: 255, + blue: 0 + }; + + var handSize = 0.25; + var leftCubePosition = MyAvatar.getLeftPalmPosition(); + var rightCubePosition = MyAvatar.getRightPalmPosition(); + + var RIGHT_FRONT = 512; + + var leftHand = Overlays.addOverlay("cube", { + position: leftCubePosition, + size: handSize, + color: { + red: 0, + green: 0, + blue: 255 + }, + alpha: 1, + solid: false + }); + + var rightHand = Overlays.addOverlay("cube", { + position: rightCubePosition, + size: handSize, + color: { + red: 255, + green: 0, + blue: 0 + }, + alpha: 1, + solid: false + }); + + var gustZoneOverlay = Overlays.addOverlay("cube", { + position: getGustDetectorPosition(), + size: targetSize, + color: targetColor, + alpha: 1, + solid: false + }); + + + function getGustDetectorPosition() { + var DISTANCE_IN_FRONT = 0.2; + var DISTANCE_UP = 0.5; + var DISTANCE_TO_SIDE = 0.0; + + var up = Quat.getUp(MyAvatar.orientation); + var front = Quat.getFront(MyAvatar.orientation); + var right = Quat.getRight(MyAvatar.orientation); + + var upOffset = Vec3.multiply(up, DISTANCE_UP); + var rightOffset = Vec3.multiply(right, DISTANCE_TO_SIDE); + var frontOffset = Vec3.multiply(front, DISTANCE_IN_FRONT); + + var offset = Vec3.sum(Vec3.sum(rightOffset, frontOffset), upOffset); + var position = Vec3.sum(MyAvatar.position, offset); + return position; + } + + + var BUBBLE_GRAVITY = { + x: 0, + y: -0.05, + z: 0 + } + + + var thisEntity = this; + + this.preload = function(entityID) { + print('PRELOAD') + this.entityID = entityID; + this.properties = Entities.getEntityProperties(this.entityID); + BubbleWand.lastPosition = this.properties.position; + } + + this.unload = function(entityID) { + Overlays.deleteOverlay(leftHand); + Overlays.deleteOverlay(rightHand); + Overlays.deleteOverlay(rightFront) + Entities.editEntity(entityID, { + name: "" + }); + Script.update.disconnect(BubbleWand.update); + collectGarbage(); + }; + + + var BubbleWand = { + bubbles: [], + currentBubble: null, + update: function() { + BubbleWand.updateControllerState(); + }, + updateControllerState: function() { + var _t = this; + var properties = Entities.getEntityProperties(thisEntity.entityID); + var wandPosition = properties.position; + + var leftHandPos = MyAvatar.getLeftPalmPosition(); + var rightHandPos = MyAvatar.getRightPalmPosition(); + + Overlays.editOverlay(leftHand, { + position: leftHandPos + }); + Overlays.editOverlay(rightHand, { + position: rightHandPos + }); + + //not really a sphere... + var hitTargetWithWand = findSphereSphereHit(wandPosition, handSize / 2, getGustDetectorPosition(), targetSize / 2) + + var mouthMode; + if (hitTargetWithWand) { + Overlays.editOverlay(gustZoneOverlay, { + position: getGustDetectorPosition(), + color: targetColorHit + }) + mouthMode = true; + + } else { + Overlays.editOverlay(gustZoneOverlay, { + position: getGustDetectorPosition(), + color: targetColor + }) + mouthMode=false; + } + + var velocity = Vec3.subtract(wandPosition,BubbleWand.lastPosition) + + + + _t.lastPosition = wandPosition; + + //print('VELOCITY:::'+JSON.stringify(velocity)) + var velocityStrength = Vec3.length(velocity) *100; + print('velocityStrength::' + velocityStrength); + //todo: angular velocity without the controller + // var angularVelocity = Controller.getSpatialControlRawAngularVelocity(hands.leftHand.tip); + var dimensions = Entities.getEntityProperties(_t.currentBubble).dimensions; + + var volumeLevel = MyAvatar.audioAverageLoudness; + var convertedVolume = convertRange(volumeLevel, [0, 5000], [0, 10]); + // print('CONVERTED VOLUME:' + convertedVolume); + + var growthFactor = convertedVolume + velocityStrength; + // print('growthFactor::' + growthFactor); + if (velocityStrength > 1 || convertedVolume > 1) { + var bubbleSize = randInt(1, 5) + bubbleSize = bubbleSize / 10; + if (dimensions.x > bubbleSize) { + console.log('RELEASE BUBBLE') + var lifetime = randInt(3, 8); + //sound is somewhat unstable at the moment + // Script.setTimeout(function() { + // _t.burstBubbleSound(_t.currentBubble) + // }, lifetime * 1000) + //need to add some kind of forward velocity for bubble that you blow + Entities.editEntity(_t.currentBubble, { + velocity: Vec3.normalize(velocity), + // angularVelocity: Controller.getSpatialControlRawAngularVelocity(hands.leftHand.tip), + lifetime: lifetime + }); + + _t.spawnBubble(); + return + } else { + if (mouthMode) { + dimensions.x += 0.015 * convertedVolume; + dimensions.y += 0.015 * convertedVolume; + dimensions.z += 0.015 * convertedVolume; + + } else { + dimensions.x += 0.015 * velocityStrength; + dimensions.y += 0.015 * velocityStrength; + dimensions.z += 0.015 * velocityStrength; + } + + } + } else { + if (dimensions.x >= 0.02) { + dimensions.x -= 0.001; + dimensions.y -= 0.001; + dimensions.z -= 0.001; + } + + } + + Entities.editEntity(_t.currentBubble, { + position: wandPosition, + dimensions: dimensions + }); + + }, + burstBubbleSound: function(bubble) { + var position = Entities.getEntityProperties(bubble).position; + var orientation = Entities.getEntityProperties(bubble).orientation; + console.log('bubble position at pop: ' + JSON.stringify(position)); + var audioOptions = { + volume: 0.5, + position: position, + orientation: orientation + } + + //Audio.playSound(popSound, audioOptions); + + //remove this bubble from the array + var i = BubbleWand.bubbles.indexOf(bubble); + + if (i != -1) { + BubbleWand.bubbles.splice(i, 1); + } + + }, + spawnBubble: function() { + console.log('spawning bubble') + var _t = this; + var properties = Entities.getEntityProperties(thisEntity.entityID); + var wandPosition = properties.position; + + + _t.currentBubble = Entities.addEntity({ + type: 'Model', + modelURL: bubbleModel, + position: wandPosition, + dimensions: { + x: 0.01, + y: 0.01, + z: 0.01 + }, + ignoreForCollisions: true, + gravity: BUBBLE_GRAVITY, + // collisionSoundURL:popSound, + shapeType: "sphere", + script: bubbleScript, + }); + _t.bubbles.push(_t.currentBubble) + }, + init: function() { + var _t = this; + _t.spawnBubble(); + Script.update.connect(BubbleWand.update); + } + } + + function collectGarbage() { + console.log('COLLECTING GARBAGE!!!') + Entities.deleteEntity(BubbleWand.currentBubble); + while (BubbleWand.bubbles.length > 0) { + Entities.deleteEntity(BubbleWand.bubbles.pop()); + } + } + + BubbleWand.init(); + + + +}) \ No newline at end of file From cf0d2361747fad92fdc06dfdbc51b12d45179608 Mon Sep 17 00:00:00 2001 From: James Pollack Date: Thu, 3 Sep 2015 16:50:37 -0700 Subject: [PATCH 06/37] silence logging statements for now --- examples/toys/bubblewand/wand.js | 12 ++++++------ 1 file changed, 6 insertions(+), 6 deletions(-) diff --git a/examples/toys/bubblewand/wand.js b/examples/toys/bubblewand/wand.js index 3e16fa5e08..c49ba8d97d 100644 --- a/examples/toys/bubblewand/wand.js +++ b/examples/toys/bubblewand/wand.js @@ -153,7 +153,7 @@ function findSphereSphereHit(firstCenter, firstRadius, secondCenter, secondRadiu var thisEntity = this; this.preload = function(entityID) { - print('PRELOAD') + // print('PRELOAD') this.entityID = entityID; this.properties = Entities.getEntityProperties(this.entityID); BubbleWand.lastPosition = this.properties.position; @@ -219,7 +219,7 @@ function findSphereSphereHit(firstCenter, firstRadius, secondCenter, secondRadiu //print('VELOCITY:::'+JSON.stringify(velocity)) var velocityStrength = Vec3.length(velocity) *100; - print('velocityStrength::' + velocityStrength); + // print('velocityStrength::' + velocityStrength); //todo: angular velocity without the controller // var angularVelocity = Controller.getSpatialControlRawAngularVelocity(hands.leftHand.tip); var dimensions = Entities.getEntityProperties(_t.currentBubble).dimensions; @@ -234,7 +234,7 @@ function findSphereSphereHit(firstCenter, firstRadius, secondCenter, secondRadiu var bubbleSize = randInt(1, 5) bubbleSize = bubbleSize / 10; if (dimensions.x > bubbleSize) { - console.log('RELEASE BUBBLE') + // console.log('RELEASE BUBBLE') var lifetime = randInt(3, 8); //sound is somewhat unstable at the moment // Script.setTimeout(function() { @@ -280,7 +280,7 @@ function findSphereSphereHit(firstCenter, firstRadius, secondCenter, secondRadiu burstBubbleSound: function(bubble) { var position = Entities.getEntityProperties(bubble).position; var orientation = Entities.getEntityProperties(bubble).orientation; - console.log('bubble position at pop: ' + JSON.stringify(position)); + //console.log('bubble position at pop: ' + JSON.stringify(position)); var audioOptions = { volume: 0.5, position: position, @@ -298,7 +298,7 @@ function findSphereSphereHit(firstCenter, firstRadius, secondCenter, secondRadiu }, spawnBubble: function() { - console.log('spawning bubble') + // console.log('spawning bubble') var _t = this; var properties = Entities.getEntityProperties(thisEntity.entityID); var wandPosition = properties.position; @@ -329,7 +329,7 @@ function findSphereSphereHit(firstCenter, firstRadius, secondCenter, secondRadiu } function collectGarbage() { - console.log('COLLECTING GARBAGE!!!') + // console.log('COLLECTING GARBAGE!!!') Entities.deleteEntity(BubbleWand.currentBubble); while (BubbleWand.bubbles.length > 0) { Entities.deleteEntity(BubbleWand.bubbles.pop()); From 1e9bac8dee37d5b0c52480cdc11f639bdfbc0a5e Mon Sep 17 00:00:00 2001 From: James Pollack Date: Thu, 3 Sep 2015 17:42:41 -0700 Subject: [PATCH 07/37] add create wand script, add offset to bubble spawn point so that it is at the end of the wand --- examples/toys/bubblewand/createWand.js | 27 ++++++++++++++++++++++++++ examples/toys/bubblewand/wand.js | 16 ++++++++++----- 2 files changed, 38 insertions(+), 5 deletions(-) create mode 100644 examples/toys/bubblewand/createWand.js diff --git a/examples/toys/bubblewand/createWand.js b/examples/toys/bubblewand/createWand.js new file mode 100644 index 0000000000..065ec0a189 --- /dev/null +++ b/examples/toys/bubblewand/createWand.js @@ -0,0 +1,27 @@ +function randInt(min, max) { + return Math.floor(Math.random() * (max - min)) + min; +} + +var wandModel = "http://hifi-public.s3.amazonaws.com/james/bubblewand/models/wand/wand.fbx?" + randInt(0, 10000); +var scriptURL = "http://hifi-public.s3.amazonaws.com/james/bubblewand/scripts/wand.js" + randInt(1, 10048) +var center = Vec3.sum(MyAvatar.position, Vec3.multiply(3, Quat.getFront(Camera.getOrientation()))); +var paintGun = Entities.addEntity({ + type: "Model", + modelURL: wandModel, + position: center, + dimensions: { + x: 0.1, + y: 1, + z: 0.1 + }, + collisionsWillMove: true, + shapeType: 'box', + script: scriptURL +}); + +function cleanup() { + Entities.deleteEntity(paintGun); +} + + +Script.scriptEnding.connect(cleanup); \ No newline at end of file diff --git a/examples/toys/bubblewand/wand.js b/examples/toys/bubblewand/wand.js index c49ba8d97d..4cd6c3850e 100644 --- a/examples/toys/bubblewand/wand.js +++ b/examples/toys/bubblewand/wand.js @@ -64,7 +64,7 @@ function findSphereSphereHit(firstCenter, firstRadius, secondCenter, secondRadiu var bubbleModel = "http://hifi-public.s3.amazonaws.com/james/bubblewand/models/bubble/bubble.fbx"; var bubbleScript = 'http://hifi-public.s3.amazonaws.com/james/bubblewand/scripts/bubble.js?' + randInt(2, 5096); var popSound = SoundCache.getSound("http://hifi-public.s3.amazonaws.com/james/bubblewand/sounds/pop.wav"); - var wandModel = "http://hifi-public.s3.amazonaws.com/james/bubblewand/models/wand/wand.fbx"; + @@ -272,7 +272,7 @@ function findSphereSphereHit(firstCenter, firstRadius, secondCenter, secondRadiu } Entities.editEntity(_t.currentBubble, { - position: wandPosition, + position: _t.wandTipPosition, dimensions: dimensions }); @@ -302,17 +302,23 @@ function findSphereSphereHit(firstCenter, firstRadius, secondCenter, secondRadiu var _t = this; var properties = Entities.getEntityProperties(thisEntity.entityID); var wandPosition = properties.position; - - + var upVector = Quat.getUp(properties.rotation); + var frontVector = Quat.getFront(properties.rotation); + var upOffset = Vec3.multiply(upVector,0.5); + var forwardOffset =Vec3.multiply(frontVector,0.1); + var offsetVector = Vec3.sum(upOffset,forwardOffset); + var wandTipPosition = Vec3.sum(wandPosition,offsetVector); + _t.wandTipPosition=wandTipPosition; _t.currentBubble = Entities.addEntity({ type: 'Model', modelURL: bubbleModel, - position: wandPosition, + position: wandTipPosition, dimensions: { x: 0.01, y: 0.01, z: 0.01 }, + collisionsWillMove:false, ignoreForCollisions: true, gravity: BUBBLE_GRAVITY, // collisionSoundURL:popSound, From a9ad18ec80c179f0b62943e170a912720e669860 Mon Sep 17 00:00:00 2001 From: "James B. Pollack" Date: Thu, 3 Sep 2015 20:42:56 -0700 Subject: [PATCH 08/37] cleanup, comments, and consolidation. --- examples/toys/bubblewand/bubble.js | 8 +-- examples/toys/bubblewand/createWand.js | 2 +- examples/toys/bubblewand/wand.js | 71 +++++++++----------------- 3 files changed, 28 insertions(+), 53 deletions(-) diff --git a/examples/toys/bubblewand/bubble.js b/examples/toys/bubblewand/bubble.js index ae673b994e..7076430eaa 100644 --- a/examples/toys/bubblewand/bubble.js +++ b/examples/toys/bubblewand/bubble.js @@ -1,22 +1,22 @@ (function() { - +//example of a nested entity. it doesn't do much now besides delete itself if it collides with something (bubbles are fragile! it would be cool if it sometimes merged with other bubbbles it hit) +//todo: play bubble sounds from the bubble itself instead of the wand. needs some sound fixes and a way to find its own position before unload for spatialization var popSound; this.preload = function(entityID) { - // console.log('bubble preload') + // print('bubble preload') this.entityID = entityID; popSound = SoundCache.getSound("http://hifi-public.s3.amazonaws.com/james/bubblewand/sounds/pop.wav"); } this.collisionWithEntity = function(myID, otherID, collision) { - + //if(Entites.getEntityProperties(otherID).userData.objectType==='') { merge bubbles?} Entities.deleteEntity(myID); this.burstBubbleSound(collision.contactPoint) }; this.unload = function(entityID) { - // console.log('bubble unload') // this.properties = Entities.getEntityProperties(entityID); //var location = this.properties.position; //this.burstBubbleSound(); diff --git a/examples/toys/bubblewand/createWand.js b/examples/toys/bubblewand/createWand.js index 065ec0a189..065a93e84e 100644 --- a/examples/toys/bubblewand/createWand.js +++ b/examples/toys/bubblewand/createWand.js @@ -3,7 +3,7 @@ function randInt(min, max) { } var wandModel = "http://hifi-public.s3.amazonaws.com/james/bubblewand/models/wand/wand.fbx?" + randInt(0, 10000); -var scriptURL = "http://hifi-public.s3.amazonaws.com/james/bubblewand/scripts/wand.js" + randInt(1, 10048) +var scriptURL = "http://hifi-public.s3.amazonaws.com/james/bubblewand/scripts/wand.js?" + randInt(1, 10048) var center = Vec3.sum(MyAvatar.position, Vec3.multiply(3, Quat.getFront(Camera.getOrientation()))); var paintGun = Entities.addEntity({ type: "Model", diff --git a/examples/toys/bubblewand/wand.js b/examples/toys/bubblewand/wand.js index 4cd6c3850e..3bc67537ff 100644 --- a/examples/toys/bubblewand/wand.js +++ b/examples/toys/bubblewand/wand.js @@ -47,26 +47,10 @@ function findSphereSphereHit(firstCenter, firstRadius, secondCenter, secondRadiu } (function() { - var console = {}; - console.log = function(p) { - if (arguments.length > 1) { - - for (var i = 1; i < arguments.length; i++) { - print(arguments[i]) - } - - } else { - print(p) - } - - } var bubbleModel = "http://hifi-public.s3.amazonaws.com/james/bubblewand/models/bubble/bubble.fbx"; var bubbleScript = 'http://hifi-public.s3.amazonaws.com/james/bubblewand/scripts/bubble.js?' + randInt(2, 5096); var popSound = SoundCache.getSound("http://hifi-public.s3.amazonaws.com/james/bubblewand/sounds/pop.wav"); - - - var targetSize = 0.4; var targetColor = { @@ -79,18 +63,11 @@ function findSphereSphereHit(firstCenter, firstRadius, secondCenter, secondRadiu green: 255, blue: 0 }; - var moveCycleColor = { - red: 255, - green: 255, - blue: 0 - }; var handSize = 0.25; var leftCubePosition = MyAvatar.getLeftPalmPosition(); var rightCubePosition = MyAvatar.getRightPalmPosition(); - var RIGHT_FRONT = 512; - var leftHand = Overlays.addOverlay("cube", { position: leftCubePosition, size: handSize, @@ -153,7 +130,7 @@ function findSphereSphereHit(firstCenter, firstRadius, secondCenter, secondRadiu var thisEntity = this; this.preload = function(entityID) { - // print('PRELOAD') + // print('PRELOAD') this.entityID = entityID; this.properties = Entities.getEntityProperties(this.entityID); BubbleWand.lastPosition = this.properties.position; @@ -175,9 +152,6 @@ function findSphereSphereHit(firstCenter, firstRadius, secondCenter, secondRadiu bubbles: [], currentBubble: null, update: function() { - BubbleWand.updateControllerState(); - }, - updateControllerState: function() { var _t = this; var properties = Entities.getEntityProperties(thisEntity.entityID); var wandPosition = properties.position; @@ -194,7 +168,7 @@ function findSphereSphereHit(firstCenter, firstRadius, secondCenter, secondRadiu //not really a sphere... var hitTargetWithWand = findSphereSphereHit(wandPosition, handSize / 2, getGustDetectorPosition(), targetSize / 2) - + var mouthMode; if (hitTargetWithWand) { Overlays.editOverlay(gustZoneOverlay, { @@ -208,18 +182,18 @@ function findSphereSphereHit(firstCenter, firstRadius, secondCenter, secondRadiu position: getGustDetectorPosition(), color: targetColor }) - mouthMode=false; + mouthMode = false; } - var velocity = Vec3.subtract(wandPosition,BubbleWand.lastPosition) + var velocity = Vec3.subtract(wandPosition, BubbleWand.lastPosition) - - _t.lastPosition = wandPosition; - //print('VELOCITY:::'+JSON.stringify(velocity)) - var velocityStrength = Vec3.length(velocity) *100; - // print('velocityStrength::' + velocityStrength); + _t.lastPosition = wandPosition; + + //print('VELOCITY:::'+JSON.stringify(velocity)) + var velocityStrength = Vec3.length(velocity) * 100; + // print('velocityStrength::' + velocityStrength); //todo: angular velocity without the controller // var angularVelocity = Controller.getSpatialControlRawAngularVelocity(hands.leftHand.tip); var dimensions = Entities.getEntityProperties(_t.currentBubble).dimensions; @@ -227,14 +201,14 @@ function findSphereSphereHit(firstCenter, firstRadius, secondCenter, secondRadiu var volumeLevel = MyAvatar.audioAverageLoudness; var convertedVolume = convertRange(volumeLevel, [0, 5000], [0, 10]); // print('CONVERTED VOLUME:' + convertedVolume); - + var growthFactor = convertedVolume + velocityStrength; - // print('growthFactor::' + growthFactor); + // print('growthFactor::' + growthFactor); if (velocityStrength > 1 || convertedVolume > 1) { var bubbleSize = randInt(1, 5) bubbleSize = bubbleSize / 10; if (dimensions.x > bubbleSize) { - // console.log('RELEASE BUBBLE') + // print('RELEASE BUBBLE') var lifetime = randInt(3, 8); //sound is somewhat unstable at the moment // Script.setTimeout(function() { @@ -262,6 +236,7 @@ function findSphereSphereHit(firstCenter, firstRadius, secondCenter, secondRadiu } } + } else { } else { if (dimensions.x >= 0.02) { dimensions.x -= 0.001; @@ -280,7 +255,7 @@ function findSphereSphereHit(firstCenter, firstRadius, secondCenter, secondRadiu burstBubbleSound: function(bubble) { var position = Entities.getEntityProperties(bubble).position; var orientation = Entities.getEntityProperties(bubble).orientation; - //console.log('bubble position at pop: ' + JSON.stringify(position)); + //print('bubble position at pop: ' + JSON.stringify(position)); var audioOptions = { volume: 0.5, position: position, @@ -298,17 +273,17 @@ function findSphereSphereHit(firstCenter, firstRadius, secondCenter, secondRadiu }, spawnBubble: function() { - // console.log('spawning bubble') + // print('spawning bubble') var _t = this; var properties = Entities.getEntityProperties(thisEntity.entityID); var wandPosition = properties.position; var upVector = Quat.getUp(properties.rotation); - var frontVector = Quat.getFront(properties.rotation); - var upOffset = Vec3.multiply(upVector,0.5); - var forwardOffset =Vec3.multiply(frontVector,0.1); - var offsetVector = Vec3.sum(upOffset,forwardOffset); - var wandTipPosition = Vec3.sum(wandPosition,offsetVector); - _t.wandTipPosition=wandTipPosition; + var frontVector = Quat.getFront(properties.rotation); + var upOffset = Vec3.multiply(upVector, 0.5); + var forwardOffset = Vec3.multiply(frontVector, 0.1); + var offsetVector = Vec3.sum(upOffset, forwardOffset); + var wandTipPosition = Vec3.sum(wandPosition, offsetVector); + _t.wandTipPosition = wandTipPosition; _t.currentBubble = Entities.addEntity({ type: 'Model', modelURL: bubbleModel, @@ -318,7 +293,7 @@ function findSphereSphereHit(firstCenter, firstRadius, secondCenter, secondRadiu y: 0.01, z: 0.01 }, - collisionsWillMove:false, + collisionsWillMove: false, ignoreForCollisions: true, gravity: BUBBLE_GRAVITY, // collisionSoundURL:popSound, @@ -335,7 +310,7 @@ function findSphereSphereHit(firstCenter, firstRadius, secondCenter, secondRadiu } function collectGarbage() { - // console.log('COLLECTING GARBAGE!!!') + // print('COLLECTING GARBAGE!!!') Entities.deleteEntity(BubbleWand.currentBubble); while (BubbleWand.bubbles.length > 0) { Entities.deleteEntity(BubbleWand.bubbles.pop()); From c910da7179ae225a1964588a1f50451db12ad924 Mon Sep 17 00:00:00 2001 From: David Rowe Date: Fri, 4 Sep 2015 12:27:18 -0700 Subject: [PATCH 09/37] Add radiusStart and radiusFinish entity particle properties --- examples/example/entities/particlesTest.js | 28 ++++++++- .../RenderableParticleEffectEntityItem.cpp | 4 +- .../entities/src/EntityItemProperties.cpp | 14 +++++ libraries/entities/src/EntityItemProperties.h | 4 ++ libraries/entities/src/EntityPropertyFlags.h | 2 + .../entities/src/ParticleEffectEntityItem.cpp | 62 ++++++++++++++----- .../entities/src/ParticleEffectEntityItem.h | 28 +++++++-- .../networking/src/udt/PacketHeaders.cpp | 2 +- libraries/networking/src/udt/PacketHeaders.h | 2 +- 9 files changed, 120 insertions(+), 26 deletions(-) diff --git a/examples/example/entities/particlesTest.js b/examples/example/entities/particlesTest.js index f2c80b6895..e23e64677f 100644 --- a/examples/example/entities/particlesTest.js +++ b/examples/example/entities/particlesTest.js @@ -15,7 +15,8 @@ var box, particles, particleExample = -1, - NUM_PARTICLE_EXAMPLES = 4; + NUM_PARTICLE_EXAMPLES = 6, + PARTICLE_RADIUS = 0.04; function onClickDownOnEntity(entityID) { if (entityID === box || entityID === particles) { @@ -58,6 +59,27 @@ animationIsPlaying: true }); break; + case 4: + print("Radius start and finish"); + Entities.editEntity(particles, { + velocitySpread: { x: 0.0, y: 0.0, z: 0.0 }, + accelerationSpread: { x: 0.0, y: 0.0, z: 0.0 }, + radiusStart: 0.0, + radiusFinish: 0.0, + radiusSpread: 0.0, + animationIsPlaying: true + }); + break; + case 5: + print("Stop animation"); + Entities.editEntity(particles, { + velocitySpread: { x: 0.0, y: 0.0, z: 0.0 }, + accelerationSpread: { x: 0.0, y: 0.0, z: 0.0 }, + radiusStart: PARTICLE_RADIUS, + radiusFinish: PARTICLE_RADIUS, + animationIsPlaying: false + }); + break; } } } @@ -84,8 +106,8 @@ particles = Entities.addEntity({ type: "ParticleEffect", position: spawnPoint, - particleRadius: 0.04, - particleRadiusSpread: 0.0, + particleRadius: PARTICLE_RADIUS, + radiusSpread: 0.0, emitRate: 2.0, emitVelocity: { x: 0.0, y: 1.0, z: 0.0 }, velocitySpread: { x: 0.0, y: 0.0, z: 0.0 }, diff --git a/libraries/entities-renderer/src/RenderableParticleEffectEntityItem.cpp b/libraries/entities-renderer/src/RenderableParticleEffectEntityItem.cpp index 146dea8ea0..424ea2b810 100644 --- a/libraries/entities-renderer/src/RenderableParticleEffectEntityItem.cpp +++ b/libraries/entities-renderer/src/RenderableParticleEffectEntityItem.cpp @@ -190,7 +190,6 @@ void RenderableParticleEffectEntityItem::updateRenderItem() { return; } - //float particleRadius = _particleRadiuses[i]; auto xcolor = getXColor(); auto alpha = (uint8_t)(glm::clamp(getLocalRenderAlpha(), 0.0f, 1.0f) * 255.0f); auto rgba = toRGBA(xcolor.red, xcolor.green, xcolor.blue, alpha); @@ -211,7 +210,7 @@ void RenderableParticleEffectEntityItem::updateRenderItem() { // allocate vertices _vertices.clear(); - // build vertices from particle positions + // build vertices from particle positions and radiuses const glm::vec3 up = frustum->getUp(); const glm::vec3 right = frustum->getRight(); for (auto&& particle : positionsAndRadiuses) { @@ -224,7 +223,6 @@ void RenderableParticleEffectEntityItem::updateRenderItem() { _vertices.emplace_back(particle.position + rightOffset - upOffset, glm::vec2(1.0f, 0.0f), rgba); } - render::PendingChanges pendingChanges; pendingChanges.updateItem(_renderItemId, [this](ParticlePayload& payload) { // update vertex buffer diff --git a/libraries/entities/src/EntityItemProperties.cpp b/libraries/entities/src/EntityItemProperties.cpp index e7204e33d8..0d7d7852f2 100644 --- a/libraries/entities/src/EntityItemProperties.cpp +++ b/libraries/entities/src/EntityItemProperties.cpp @@ -89,6 +89,8 @@ CONSTRUCT_PROPERTY(velocitySpread, ParticleEffectEntityItem::DEFAULT_VELOCITY_SP CONSTRUCT_PROPERTY(emitAcceleration, ParticleEffectEntityItem::DEFAULT_EMIT_ACCELERATION), CONSTRUCT_PROPERTY(accelerationSpread, ParticleEffectEntityItem::DEFAULT_ACCELERATION_SPREAD), CONSTRUCT_PROPERTY(particleRadius, ParticleEffectEntityItem::DEFAULT_PARTICLE_RADIUS), +CONSTRUCT_PROPERTY(radiusStart, ParticleEffectEntityItem::DEFAULT_RADIUS_START), +CONSTRUCT_PROPERTY(radiusFinish, ParticleEffectEntityItem::DEFAULT_RADIUS_FINISH), CONSTRUCT_PROPERTY(radiusSpread, ParticleEffectEntityItem::DEFAULT_RADIUS_SPREAD), CONSTRUCT_PROPERTY(marketplaceID, ENTITY_ITEM_DEFAULT_MARKETPLACE_ID), CONSTRUCT_PROPERTY(keyLightColor, ZoneEntityItem::DEFAULT_KEYLIGHT_COLOR), @@ -356,6 +358,8 @@ EntityPropertyFlags EntityItemProperties::getChangedProperties() const { CHECK_PROPERTY_CHANGE(PROP_EMIT_ACCELERATION, emitAcceleration); CHECK_PROPERTY_CHANGE(PROP_ACCELERATION_SPREAD, accelerationSpread); CHECK_PROPERTY_CHANGE(PROP_PARTICLE_RADIUS, particleRadius); + CHECK_PROPERTY_CHANGE(PROP_RADIUS_START, radiusStart); + CHECK_PROPERTY_CHANGE(PROP_RADIUS_FINISH, radiusFinish); CHECK_PROPERTY_CHANGE(PROP_RADIUS_SPREAD, radiusSpread); CHECK_PROPERTY_CHANGE(PROP_MARKETPLACE_ID, marketplaceID); CHECK_PROPERTY_CHANGE(PROP_NAME, name); @@ -460,6 +464,8 @@ QScriptValue EntityItemProperties::copyToScriptValue(QScriptEngine* engine, bool COPY_PROPERTY_TO_QSCRIPTVALUE(emitAcceleration); COPY_PROPERTY_TO_QSCRIPTVALUE(accelerationSpread); COPY_PROPERTY_TO_QSCRIPTVALUE(particleRadius); + COPY_PROPERTY_TO_QSCRIPTVALUE(radiusStart); + COPY_PROPERTY_TO_QSCRIPTVALUE(radiusFinish); COPY_PROPERTY_TO_QSCRIPTVALUE(radiusSpread); COPY_PROPERTY_TO_QSCRIPTVALUE(marketplaceID); COPY_PROPERTY_TO_QSCRIPTVALUE(name); @@ -582,6 +588,8 @@ void EntityItemProperties::copyFromScriptValue(const QScriptValue& object, bool COPY_PROPERTY_FROM_QSCRIPTVALUE(emitAcceleration, glmVec3, setEmitAcceleration); COPY_PROPERTY_FROM_QSCRIPTVALUE(accelerationSpread, glmVec3, setAccelerationSpread); COPY_PROPERTY_FROM_QSCRIPTVALUE(particleRadius, float, setParticleRadius); + COPY_PROPERTY_FROM_QSCRIPTVALUE(radiusStart, float, setRadiusStart); + COPY_PROPERTY_FROM_QSCRIPTVALUE(radiusFinish, float, setRadiusFinish); COPY_PROPERTY_FROM_QSCRIPTVALUE(radiusSpread, float, setRadiusSpread); COPY_PROPERTY_FROM_QSCRIPTVALUE(marketplaceID, QString, setMarketplaceID); COPY_PROPERTY_FROM_QSCRIPTVALUE(name, QString, setName); @@ -825,6 +833,8 @@ bool EntityItemProperties::encodeEntityEditPacket(PacketType::Value command, Ent APPEND_ENTITY_PROPERTY(PROP_EMIT_ACCELERATION, properties.getEmitAcceleration()); APPEND_ENTITY_PROPERTY(PROP_ACCELERATION_SPREAD, properties.getAccelerationSpread()); APPEND_ENTITY_PROPERTY(PROP_PARTICLE_RADIUS, properties.getParticleRadius()); + APPEND_ENTITY_PROPERTY(PROP_RADIUS_START, properties.getRadiusStart()); + APPEND_ENTITY_PROPERTY(PROP_RADIUS_FINISH, properties.getRadiusFinish()); APPEND_ENTITY_PROPERTY(PROP_RADIUS_SPREAD, properties.getRadiusSpread()); } @@ -1095,6 +1105,8 @@ bool EntityItemProperties::decodeEntityEditPacket(const unsigned char* data, int READ_ENTITY_PROPERTY_TO_PROPERTIES(PROP_EMIT_ACCELERATION, glm::vec3, setEmitAcceleration); READ_ENTITY_PROPERTY_TO_PROPERTIES(PROP_ACCELERATION_SPREAD, glm::vec3, setAccelerationSpread); READ_ENTITY_PROPERTY_TO_PROPERTIES(PROP_PARTICLE_RADIUS, float, setParticleRadius); + READ_ENTITY_PROPERTY_TO_PROPERTIES(PROP_RADIUS_START, float, setRadiusStart); + READ_ENTITY_PROPERTY_TO_PROPERTIES(PROP_RADIUS_FINISH, float, setRadiusFinish); READ_ENTITY_PROPERTY_TO_PROPERTIES(PROP_RADIUS_SPREAD, float, setRadiusSpread); } @@ -1228,6 +1240,8 @@ void EntityItemProperties::markAllChanged() { _emitAccelerationChanged = true; _accelerationSpreadChanged = true; _particleRadiusChanged = true; + _radiusStartChanged = true; + _radiusFinishChanged = true; _radiusSpreadChanged = true; _marketplaceIDChanged = true; diff --git a/libraries/entities/src/EntityItemProperties.h b/libraries/entities/src/EntityItemProperties.h index 0c4d963fc5..bcdfbd0289 100644 --- a/libraries/entities/src/EntityItemProperties.h +++ b/libraries/entities/src/EntityItemProperties.h @@ -136,6 +136,8 @@ public: DEFINE_PROPERTY(PROP_EMIT_ACCELERATION, EmitAcceleration, emitAcceleration, glm::vec3); DEFINE_PROPERTY(PROP_ACCELERATION_SPREAD, AccelerationSpread, accelerationSpread, glm::vec3); DEFINE_PROPERTY(PROP_PARTICLE_RADIUS, ParticleRadius, particleRadius, float); + DEFINE_PROPERTY(PROP_RADIUS_START, RadiusStart, radiusStart, float); + DEFINE_PROPERTY(PROP_RADIUS_FINISH, RadiusFinish, radiusFinish, float); DEFINE_PROPERTY(PROP_RADIUS_SPREAD, RadiusSpread, radiusSpread, float); DEFINE_PROPERTY_REF(PROP_MARKETPLACE_ID, MarketplaceID, marketplaceID, QString); DEFINE_PROPERTY_REF(PROP_KEYLIGHT_COLOR, KeyLightColor, keyLightColor, xColor); @@ -317,6 +319,8 @@ inline QDebug operator<<(QDebug debug, const EntityItemProperties& properties) { DEBUG_PROPERTY_IF_CHANGED(debug, properties, EmitAcceleration, emitAcceleration, ""); DEBUG_PROPERTY_IF_CHANGED(debug, properties, AccelerationSpread, accelerationSpread, ""); DEBUG_PROPERTY_IF_CHANGED(debug, properties, ParticleRadius, particleRadius, ""); + DEBUG_PROPERTY_IF_CHANGED(debug, properties, RadiusStart, radiusStart, ""); + DEBUG_PROPERTY_IF_CHANGED(debug, properties, RadiusFinish, radiusFinish, ""); DEBUG_PROPERTY_IF_CHANGED(debug, properties, RadiusSpread, radiusSpread, ""); DEBUG_PROPERTY_IF_CHANGED(debug, properties, MarketplaceID, marketplaceID, ""); DEBUG_PROPERTY_IF_CHANGED(debug, properties, BackgroundMode, backgroundMode, ""); diff --git a/libraries/entities/src/EntityPropertyFlags.h b/libraries/entities/src/EntityPropertyFlags.h index 8d1ad12a8d..7eafc25427 100644 --- a/libraries/entities/src/EntityPropertyFlags.h +++ b/libraries/entities/src/EntityPropertyFlags.h @@ -139,6 +139,8 @@ enum EntityPropertyList { PROP_VELOCITY_SPREAD, PROP_ACCELERATION_SPREAD, PROP_RADIUS_SPREAD, + PROP_RADIUS_START, + PROP_RADIUS_FINISH, //////////////////////////////////////////////////////////////////////////////////////////////////// // ATTENTION: add new properties to end of list just ABOVE this line diff --git a/libraries/entities/src/ParticleEffectEntityItem.cpp b/libraries/entities/src/ParticleEffectEntityItem.cpp index da19f64361..ff534ff03b 100644 --- a/libraries/entities/src/ParticleEffectEntityItem.cpp +++ b/libraries/entities/src/ParticleEffectEntityItem.cpp @@ -54,6 +54,9 @@ const glm::vec3 ParticleEffectEntityItem::DEFAULT_VELOCITY_SPREAD(3.0f, 0.0f, 3. const glm::vec3 ParticleEffectEntityItem::DEFAULT_EMIT_ACCELERATION(0.0f, -9.8f, 0.0f); const glm::vec3 ParticleEffectEntityItem::DEFAULT_ACCELERATION_SPREAD(0.0f, 0.0f, 0.0f); const float ParticleEffectEntityItem::DEFAULT_PARTICLE_RADIUS = 0.025f; +const float ParticleEffectEntityItem::RADIUS_UNINITIALIZED = -1.0f; +const float ParticleEffectEntityItem::DEFAULT_RADIUS_START = RADIUS_UNINITIALIZED; +const float ParticleEffectEntityItem::DEFAULT_RADIUS_FINISH = RADIUS_UNINITIALIZED; const float ParticleEffectEntityItem::DEFAULT_RADIUS_SPREAD = 0.0f; const QString ParticleEffectEntityItem::DEFAULT_TEXTURES = ""; @@ -73,6 +76,8 @@ ParticleEffectEntityItem::ParticleEffectEntityItem(const EntityItemID& entityIte _emitAcceleration(DEFAULT_EMIT_ACCELERATION), _accelerationSpread(DEFAULT_ACCELERATION_SPREAD), _particleRadius(DEFAULT_PARTICLE_RADIUS), + _radiusStart(DEFAULT_RADIUS_START), + _radiusFinish(DEFAULT_RADIUS_FINISH), _radiusSpread(DEFAULT_RADIUS_SPREAD), _lastAnimated(usecTimestampNow()), _animationLoop(), @@ -85,6 +90,9 @@ ParticleEffectEntityItem::ParticleEffectEntityItem(const EntityItemID& entityIte _particleVelocities(DEFAULT_MAX_PARTICLES, glm::vec3(0.0f, 0.0f, 0.0f)), _particleAccelerations(DEFAULT_MAX_PARTICLES, glm::vec3(0.0f, 0.0f, 0.0f)), _particleRadiuses(DEFAULT_MAX_PARTICLES, DEFAULT_PARTICLE_RADIUS), + _radiusStarts(DEFAULT_MAX_PARTICLES, DEFAULT_PARTICLE_RADIUS), + _radiusMiddles(DEFAULT_MAX_PARTICLES, DEFAULT_PARTICLE_RADIUS), + _radiusFinishes(DEFAULT_MAX_PARTICLES, DEFAULT_PARTICLE_RADIUS), _timeUntilNextEmit(0.0f), _particleHeadIndex(0), _particleTailIndex(0), @@ -100,10 +108,6 @@ ParticleEffectEntityItem::~ParticleEffectEntityItem() { } -void ParticleEffectEntityItem::setLifespan(float lifespan) { - _lifespan = lifespan; -} - void ParticleEffectEntityItem::setEmitVelocity(const glm::vec3& emitVelocity) { _emitVelocity = emitVelocity; computeAndUpdateDimensions(); @@ -124,14 +128,6 @@ void ParticleEffectEntityItem::setAccelerationSpread(const glm::vec3& accelerati computeAndUpdateDimensions(); } -void ParticleEffectEntityItem::setParticleRadius(float particleRadius) { - _particleRadius = particleRadius; -} - -void ParticleEffectEntityItem::setRadiusSpread(float radiusSpread) { - _radiusSpread = radiusSpread; -} - void ParticleEffectEntityItem::computeAndUpdateDimensions() { const float time = _lifespan * 1.1f; // add 10% extra time to account for incremental timer accumulation error @@ -173,6 +169,8 @@ EntityItemProperties ParticleEffectEntityItem::getProperties() const { COPY_ENTITY_PROPERTY_TO_PROPERTIES(emitAcceleration, getEmitAcceleration); COPY_ENTITY_PROPERTY_TO_PROPERTIES(accelerationSpread, getAccelerationSpread); COPY_ENTITY_PROPERTY_TO_PROPERTIES(particleRadius, getParticleRadius); + COPY_ENTITY_PROPERTY_TO_PROPERTIES(radiusStart, getRadiusStart); + COPY_ENTITY_PROPERTY_TO_PROPERTIES(radiusFinish, getRadiusFinish); COPY_ENTITY_PROPERTY_TO_PROPERTIES(radiusSpread, getRadiusSpread); COPY_ENTITY_PROPERTY_TO_PROPERTIES(textures, getTextures); @@ -197,6 +195,8 @@ bool ParticleEffectEntityItem::setProperties(const EntityItemProperties& propert SET_ENTITY_PROPERTY_FROM_PROPERTIES(emitAcceleration, setEmitAcceleration); SET_ENTITY_PROPERTY_FROM_PROPERTIES(accelerationSpread, setAccelerationSpread); SET_ENTITY_PROPERTY_FROM_PROPERTIES(particleRadius, setParticleRadius); + SET_ENTITY_PROPERTY_FROM_PROPERTIES(radiusStart, setRadiusStart); + SET_ENTITY_PROPERTY_FROM_PROPERTIES(radiusFinish, setRadiusFinish); SET_ENTITY_PROPERTY_FROM_PROPERTIES(radiusSpread, setRadiusSpread); SET_ENTITY_PROPERTY_FROM_PROPERTIES(textures, setTextures); @@ -266,8 +266,10 @@ int ParticleEffectEntityItem::readEntitySubclassDataFromBuffer(const unsigned ch READ_ENTITY_PROPERTY(PROP_TEXTURES, QString, setTextures); } - if (args.bitstreamVersion >= VERSION_ENTITIES_PARTICLE_RADIUS_SPREAD) { + if (args.bitstreamVersion >= VERSION_ENTITIES_PARTICLE_RADIUS_ADDITIONS) { READ_ENTITY_PROPERTY(PROP_RADIUS_SPREAD, float, setRadiusSpread); + READ_ENTITY_PROPERTY(PROP_RADIUS_START, float, setRadiusStart); + READ_ENTITY_PROPERTY(PROP_RADIUS_FINISH, float, setRadiusFinish); } return bytesRead; @@ -294,6 +296,8 @@ EntityPropertyFlags ParticleEffectEntityItem::getEntityProperties(EncodeBitstrea requestedProperties += PROP_TEXTURES; requestedProperties += PROP_VELOCITY_SPREAD; requestedProperties += PROP_RADIUS_SPREAD; + requestedProperties += PROP_RADIUS_START; + requestedProperties += PROP_RADIUS_FINISH; return requestedProperties; } @@ -323,6 +327,8 @@ void ParticleEffectEntityItem::appendSubclassData(OctreePacketData* packetData, APPEND_ENTITY_PROPERTY(PROP_TEXTURES, getTextures()); APPEND_ENTITY_PROPERTY(PROP_VELOCITY_SPREAD, getVelocitySpread()); APPEND_ENTITY_PROPERTY(PROP_RADIUS_SPREAD, getRadiusSpread()); + APPEND_ENTITY_PROPERTY(PROP_RADIUS_START, getRadiusStart()); + APPEND_ENTITY_PROPERTY(PROP_RADIUS_FINISH, getRadiusFinish()); } bool ParticleEffectEntityItem::isAnimatingSomething() const { @@ -492,6 +498,15 @@ QString ParticleEffectEntityItem::getAnimationSettings() const { return jsonByteString; } +void ParticleEffectEntityItem::updateRadius(quint32 index) { + float age = 2.0f * (1.0f - _particleLifetimes[index] / _lifespan); // 0.0 .. 2.0 + if (age < 1.0f) { + _particleRadiuses[index] = cosineInterpolate(_radiusStarts[index], _radiusMiddles[index], age); + } else { + _particleRadiuses[index] = cosineInterpolate(_radiusMiddles[index], _radiusFinishes[index], age - 1.0f); + } +} + void ParticleEffectEntityItem::extendBounds(const glm::vec3& point) { _particleMinBound.x = glm::min(_particleMinBound.x, point.x); _particleMinBound.y = glm::min(_particleMinBound.y, point.y); @@ -524,6 +539,7 @@ void ParticleEffectEntityItem::stepSimulation(float deltaTime) { _particleHeadIndex = (_particleHeadIndex + 1) % _maxParticles; } else { + updateRadius(i); integrateParticle(i, deltaTime); extendBounds(_particlePositions[i]); } @@ -542,8 +558,14 @@ void ParticleEffectEntityItem::stepSimulation(float deltaTime) { quint32 i = _particleTailIndex; _particleLifetimes[i] = _lifespan; - _particleRadiuses[i] = _particleRadius + (2.0f * randFloat() - 1) * _radiusSpread; + // Radius + float spreadMultiplier = 1.0 + (2.0f * randFloat() - 1) * _radiusSpread / _particleRadius; + _radiusStarts[i] = spreadMultiplier * getRadiusStart(); + _radiusMiddles[i] = spreadMultiplier * _particleRadius; + _radiusFinishes[i] = spreadMultiplier * getRadiusFinish(); + updateRadius(i); + // Velocity and acceleration glm::vec3 spreadOffset; spreadOffset.x = -_velocitySpread.x + randFloat() * (_velocitySpread.x * 2.0f); spreadOffset.y = -_velocitySpread.y + randFloat() * (_velocitySpread.y * 2.0f); @@ -587,6 +609,9 @@ void ParticleEffectEntityItem::setMaxParticles(quint32 maxParticles) { _particlePositions.resize(_maxParticles); _particleVelocities.resize(_maxParticles); _particleRadiuses.resize(_maxParticles); + _radiusStarts.resize(_maxParticles); + _radiusMiddles.resize(_maxParticles); + _radiusFinishes.resize(_maxParticles); // effectively clear all particles and start emitting new ones from scratch. _particleHeadIndex = 0; @@ -603,3 +628,12 @@ quint32 ParticleEffectEntityItem::getLivingParticleCount() const { return (_maxParticles - _particleHeadIndex) + _particleTailIndex; } } + +float ParticleEffectEntityItem::cosineInterpolate(float y1, float y2, float u) { + if (y1 == y2) { + return y1; + } + + float uy = (1 - cos(u * PI)) / 2; + return y1 * (1 - uy) + y2 * uy; +} diff --git a/libraries/entities/src/ParticleEffectEntityItem.h b/libraries/entities/src/ParticleEffectEntityItem.h index 844348a667..cac0af39a4 100644 --- a/libraries/entities/src/ParticleEffectEntityItem.h +++ b/libraries/entities/src/ParticleEffectEntityItem.h @@ -91,7 +91,7 @@ public: quint32 getMaxParticles() const { return _maxParticles; } static const float DEFAULT_LIFESPAN; - void setLifespan(float lifespan); + void setLifespan(float lifespan) { _lifespan = lifespan; } float getLifespan() const { return _lifespan; } static const float DEFAULT_EMIT_RATE; @@ -115,11 +115,21 @@ public: const glm::vec3& getAccelerationSpread() const { return _accelerationSpread; } static const float DEFAULT_PARTICLE_RADIUS; - void setParticleRadius(float particleRadius); + void setParticleRadius(float particleRadius) { _particleRadius = particleRadius; } float getParticleRadius() const { return _particleRadius; } + static const float RADIUS_UNINITIALIZED; + + static const float DEFAULT_RADIUS_START; + void setRadiusStart(float radiusStart) { _radiusStart = radiusStart; } + float getRadiusStart() const { return _radiusStart == RADIUS_UNINITIALIZED ? _particleRadius : _radiusStart; } + + static const float DEFAULT_RADIUS_FINISH; + void setRadiusFinish(float radiusFinish) { _radiusFinish = radiusFinish; } + float getRadiusFinish() const { return _radiusFinish == RADIUS_UNINITIALIZED ? _particleRadius : _radiusFinish; } + static const float DEFAULT_RADIUS_SPREAD; - void setRadiusSpread(float radiusSpread); + void setRadiusSpread(float radiusSpread) { _radiusSpread = radiusSpread; } float getRadiusSpread() const { return _radiusSpread; } void computeAndUpdateDimensions(); @@ -143,6 +153,7 @@ protected: bool isAnimatingSomething() const; void stepSimulation(float deltaTime); + void updateRadius(quint32 index); void extendBounds(const glm::vec3& point); void integrateParticle(quint32 index, float deltaTime); quint32 getLivingParticleCount() const; @@ -157,6 +168,8 @@ protected: glm::vec3 _emitAcceleration; glm::vec3 _accelerationSpread; float _particleRadius; + float _radiusStart; + float _radiusFinish; float _radiusSpread; quint64 _lastAnimated; AnimationLoop _animationLoop; @@ -171,9 +184,13 @@ protected: QVector _particleVelocities; QVector _particleAccelerations; QVector _particleRadiuses; + QVector _radiusStarts; + QVector _radiusMiddles; + QVector _radiusFinishes; + float _timeUntilNextEmit; - // particle arrays are a ring buffer, use these indicies + // particle arrays are a ring buffer, use these indices // to keep track of the living particles. quint32 _particleHeadIndex; quint32 _particleTailIndex; @@ -181,6 +198,9 @@ protected: // bounding volume glm::vec3 _particleMaxBound; glm::vec3 _particleMinBound; + +private: + float cosineInterpolate(float y1, float y2, float u); }; #endif // hifi_ParticleEffectEntityItem_h diff --git a/libraries/networking/src/udt/PacketHeaders.cpp b/libraries/networking/src/udt/PacketHeaders.cpp index da84a7cec8..8ac183da6f 100644 --- a/libraries/networking/src/udt/PacketHeaders.cpp +++ b/libraries/networking/src/udt/PacketHeaders.cpp @@ -67,7 +67,7 @@ PacketVersion versionForPacketType(PacketType::Value packetType) { case EntityAdd: case EntityEdit: case EntityData: - return VERSION_ENTITIES_PARTICLE_RADIUS_SPREAD; + return VERSION_ENTITIES_PARTICLE_RADIUS_ADDITIONS; case AvatarData: return 13; default: diff --git a/libraries/networking/src/udt/PacketHeaders.h b/libraries/networking/src/udt/PacketHeaders.h index ce58273f43..00bce90c9a 100644 --- a/libraries/networking/src/udt/PacketHeaders.h +++ b/libraries/networking/src/udt/PacketHeaders.h @@ -144,6 +144,6 @@ const PacketVersion VERSION_POLYVOX_TEXTURES = 36; const PacketVersion VERSION_ENTITIES_POLYLINE = 37; const PacketVersion VERSION_OCTREE_CENTERED_ORIGIN = 38; const PacketVersion VERSION_ENTITIES_PARTICLE_MODIFICATIONS = 39; -const PacketVersion VERSION_ENTITIES_PARTICLE_RADIUS_SPREAD = 40; +const PacketVersion VERSION_ENTITIES_PARTICLE_RADIUS_ADDITIONS = 40; #endif // hifi_PacketHeaders_h \ No newline at end of file From e86581ab64b17d9ed809a6484d562452b0b6c136 Mon Sep 17 00:00:00 2001 From: David Rowe Date: Fri, 4 Sep 2015 13:51:25 -0700 Subject: [PATCH 10/37] Update scripts to use HiFi smoke particle --- examples/example/entities/particlesTest.js | 2 +- examples/particles.js | 2 +- 2 files changed, 2 insertions(+), 2 deletions(-) diff --git a/examples/example/entities/particlesTest.js b/examples/example/entities/particlesTest.js index e23e64677f..48d5ca246a 100644 --- a/examples/example/entities/particlesTest.js +++ b/examples/example/entities/particlesTest.js @@ -113,7 +113,7 @@ velocitySpread: { x: 0.0, y: 0.0, z: 0.0 }, emitAcceleration: { x: 0.0, y: -0.3, z: 0.0 }, accelerationSpread: { x: 0.0, y: 0.0, z: 0.0 }, - textures: "https://raw.githubusercontent.com/ericrius1/SantasLair/santa/assets/smokeparticle.png", + textures: "https://hifi-public.s3.amazonaws.com/alan/Particles/Particle-Sprite-Smoke-1.png", color: { red: 255, green: 255, blue: 255 }, lifespan: 5.0, visible: true, diff --git a/examples/particles.js b/examples/particles.js index fc1a936a72..ad232dd781 100644 --- a/examples/particles.js +++ b/examples/particles.js @@ -43,7 +43,7 @@ emitVelocity: {x: 0, y: 5, z: 0}, velocitySpread: {x: 2, y: 0, z: 2}, emitAcceleration: {x: 0, y: -9.8, z: 0}, - textures: "https://raw.githubusercontent.com/ericrius1/SantasLair/santa/assets/smokeparticle.png", + textures: "https://hifi-public.s3.amazonaws.com/alan/Particles/Particle-Sprite-Smoke-1.png", color: color, lifespan: 1.0, visible: true, From 086afc47b118747f31c7b8288c066472257b07b4 Mon Sep 17 00:00:00 2001 From: Howard Stearns Date: Fri, 4 Sep 2015 14:24:37 -0700 Subject: [PATCH 11/37] Avatar animations on by default. (Using the now old animation machinery.) Default robot avatar consistent with the animations. Don't require all the bones to be present. --- .../resources/meshes/defaultAvatar_full.fst | 125 +++++++++++------- .../defaultAvatar_full/defaultAvatar_full.fbx | Bin 977504 -> 877472 bytes interface/src/Menu.cpp | 2 +- libraries/animation/src/AnimationHandle.cpp | 3 +- 4 files changed, 81 insertions(+), 49 deletions(-) diff --git a/interface/resources/meshes/defaultAvatar_full.fst b/interface/resources/meshes/defaultAvatar_full.fst index eba175e771..3fa282a819 100644 --- a/interface/resources/meshes/defaultAvatar_full.fst +++ b/interface/resources/meshes/defaultAvatar_full.fst @@ -3,62 +3,95 @@ type = body+head scale = 1 filename = defaultAvatar_full/defaultAvatar_full.fbx texdir = defaultAvatar_full/textures +joint = jointRightHand = RightHand joint = jointNeck = Head -joint = jointLeftHand = LeftHand joint = jointRoot = Hips joint = jointHead = HeadTop_End -joint = jointRightHand = RightHand joint = jointLean = Spine +joint = jointLeftHand = LeftHand freeJoint = LeftArm freeJoint = LeftForeArm freeJoint = RightArm freeJoint = RightForeArm -jointIndex = LeftHand = 35 -jointIndex = Reye = 3 -jointIndex = Hips = 10 -jointIndex = LeftHandIndex1 = 36 -jointIndex = LeftHandIndex2 = 37 -jointIndex = LeftHandIndex3 = 38 -jointIndex = LeftHandIndex4 = 39 -jointIndex = LeftShoulder = 32 -jointIndex = RightLeg = 12 -jointIndex = Grp_blendshapes = 0 -jointIndex = Leye = 4 -jointIndex = headphone = 8 -jointIndex = RightForeArm = 26 -jointIndex = Spine = 21 -jointIndex = LeftFoot = 18 -jointIndex = RightToeBase = 14 -jointIndex = face = 1 -jointIndex = LeftToe_End = 20 -jointIndex = Spine1 = 22 -jointIndex = body = 9 -jointIndex = Spine2 = 23 -jointIndex = RightUpLeg = 11 -jointIndex = top1 = 7 -jointIndex = Neck = 40 -jointIndex = HeadTop_End = 42 -jointIndex = RightShoulder = 24 -jointIndex = RightArm = 25 -jointIndex = Head = 41 -jointIndex = LeftLeg = 17 -jointIndex = LeftForeArm = 34 -jointIndex = hair = 6 -jointIndex = RightHand = 27 -jointIndex = LeftToeBase = 19 -jointIndex = LeftUpLeg = 16 -jointIndex = mouth = 2 -jointIndex = RightFoot = 13 -jointIndex = LeftArm = 33 -jointIndex = shield = 5 -jointIndex = RightHandIndex1 = 28 -jointIndex = RightHandIndex2 = 29 -jointIndex = RightToe_End = 15 -jointIndex = RightHandIndex3 = 30 -jointIndex = RightHandIndex4 = 31 +bs = MouthFrown_R = Mouth.MouthFrown_R = 1 +bs = EyeOpen_L = Leye1.EyeOpen_L = 1 +bs = LipsLowerDown_L = Mouth.LipsLowerDown = 0.5 +bs = LipsStretch_L = Mouth.LipsStretch_L = 1 +bs = MouthLeft = Mouth.MouthLeft = 1 +bs = MouthSmile_L = Mouth.MouthSmile_L = 1 +bs = Sneer_R = Mouth.Sneer = 0.61 +bs = LipsPucker = Mouth.LipsPucker = 1 +bs = EyeOpen_R = Reye1.EyeOut_R = 1 +bs = LipsLowerDown_R = Mouth.LipsLowerDown = 0.43 +bs = LipsStretch_R = Mouth.LipsStretch_R = 1 +bs = MouthSmile_R = Mouth.MouthSmile_R = 1 +bs = LipsFunnel = Mouth.LipsFunnel = 1 +bs = EyeUp_L = Leye1.EyeUp_L = 1 +bs = MouthDimple_L = Mouth.MouthDimple_L = 1 +bs = Puff = Mouth.Puff = 1 +bs = EyeIn_L = Leye1.EyeIn_L = 1 +bs = EyeUp_R = Reye1.EyeUp_R = 0.99 +bs = MouthDimple_R = Mouth.MouthDimple_R = 1 +bs = MouthRight = Mouth.MouthRight = 1 +bs = EyeOut_L = Leye1.EyeOut_L = 1 +bs = JawOpen = Mouth.JawOpen = 1 +bs = EyeIn_R = Reye1.EyeIn_R = 1 +bs = BrowsD_L = Leye1.BrowsD_L = 1 +bs = EyeDown_L = Leye1.EyeDown_L = 1 +bs = EyeBlink_L = Leye1.EyeBlink_L = 1 +bs = EyeOut_R = Reye1.EyeOut_R = 1 +bs = LipsUpperUp_L = Mouth.LipsUpperUp = 0.49 +bs = MouthFrown_L = Mouth.MouthFrown_L = 1 +bs = EyeDown_R = Reye1.EyeDown_R = 1 +bs = BrowsD_R = Reye1.BrowsD_R = 1 +bs = EyeBlink_R = Reye1.EyeBlink_R = 1 +bs = LipsUpperUp_R = Mouth.LipsUpperUp = 0.47 +bs = Sneer_L = Mouth.Sneer = 0.5 +jointIndex = headphone = 7 +jointIndex = LeftUpLeg = 15 +jointIndex = Spine = 20 +jointIndex = LeftArm = 32 +jointIndex = Head = 40 +jointIndex = RightUpLeg = 10 +jointIndex = hair = 5 +jointIndex = Spine1 = 21 +jointIndex = RightHandIndex1 = 27 +jointIndex = Spine2 = 22 +jointIndex = RightHandIndex2 = 28 +jointIndex = RightHandIndex3 = 29 +jointIndex = RightHandIndex4 = 30 +jointIndex = RightToe_End = 14 +jointIndex = shield = 4 +jointIndex = LeftHandIndex1 = 35 +jointIndex = LeftHandIndex2 = 36 +jointIndex = RightHand = 26 +jointIndex = LeftHandIndex3 = 37 +jointIndex = LeftHandIndex4 = 38 +jointIndex = LeftShoulder = 31 +jointIndex = LeftHand = 34 +jointIndex = RightForeArm = 25 +jointIndex = RightLeg = 11 +jointIndex = RightFoot = 12 +jointIndex = mouth = 1 +jointIndex = LeftToe_End = 19 +jointIndex = Reye = 2 +jointIndex = Hips = 9 +jointIndex = RightToeBase = 13 +jointIndex = HeadTop_End = 41 +jointIndex = LeftFoot = 17 +jointIndex = RightShoulder = 23 +jointIndex = LeftLeg = 16 +jointIndex = Leye = 3 +jointIndex = LeftForeArm = 33 +jointIndex = face = 0 +jointIndex = body = 8 +jointIndex = LeftToeBase = 18 +jointIndex = RightArm = 24 +jointIndex = top1 = 6 +jointIndex = Neck = 39 +rx = 0 ry = 0 rz = 0 tx = 0 ty = 0 tz = 0 -rx = 0 diff --git a/interface/resources/meshes/defaultAvatar_full/defaultAvatar_full.fbx b/interface/resources/meshes/defaultAvatar_full/defaultAvatar_full.fbx index 71bc127c414abee528ef53ac122a377c0bf0a135..ff360f773c95987c169c0d4827bd125895bcebde 100644 GIT binary patch delta 366204 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¬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 z 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%0Avw^u*_=Rdi0YG=* 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

4vg&3Ny3Nb8R75cf|9(blJ`0)On2|+?D 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�eCuTUHjoviWr99}Bc& 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 mz}SZ1rClDva|d3Xm@h!oQrC4r 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 O$*&AXc#JXtm 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

f%7J`VzVM5h+rja}&uP4=gS1a~8U_1wM{ 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 z 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 azeBB^bGHAwXI1LOfxi_i!hH)ofBZkja8AGg diff --git a/interface/src/Menu.cpp b/interface/src/Menu.cpp index 48b6758474..c97e6a8ca4 100644 --- a/interface/src/Menu.cpp +++ b/interface/src/Menu.cpp @@ -432,7 +432,7 @@ Menu::Menu() { addCheckableActionToQMenuAndActionHash(avatarDebugMenu, MenuOption::RenderFocusIndicator, 0, false); addCheckableActionToQMenuAndActionHash(avatarDebugMenu, MenuOption::ShowWhosLookingAtMe, 0, false); addCheckableActionToQMenuAndActionHash(avatarDebugMenu, MenuOption::FixGaze, 0, false); - addCheckableActionToQMenuAndActionHash(avatarDebugMenu, MenuOption::EnableRigAnimations, 0, false, + addCheckableActionToQMenuAndActionHash(avatarDebugMenu, MenuOption::EnableRigAnimations, 0, true, avatar, SLOT(setEnableRigAnimations(bool))); addCheckableActionToQMenuAndActionHash(avatarDebugMenu, MenuOption::EnableAnimGraph, 0, false, avatar, SLOT(setEnableAnimGraph(bool))); diff --git a/libraries/animation/src/AnimationHandle.cpp b/libraries/animation/src/AnimationHandle.cpp index ad09e0736d..f2d12b398e 100644 --- a/libraries/animation/src/AnimationHandle.cpp +++ b/libraries/animation/src/AnimationHandle.cpp @@ -173,10 +173,9 @@ void AnimationHandle::applyFrame(float frameIndex) { const FBXAnimationFrame& floorFrame = animationGeometry.animationFrames.at((int)glm::floor(frameIndex) % frameCount); const FBXAnimationFrame& ceilFrame = animationGeometry.animationFrames.at((int)glm::ceil(frameIndex) % frameCount); float frameFraction = glm::fract(frameIndex); - assert(_rig->getJointStateCount() >= _jointMappings.size()); for (int i = 0; i < _jointMappings.size(); i++) { int mapping = _jointMappings.at(i); - if (mapping != -1) { + if (mapping != -1) { // allow missing bones _rig->setJointRotationInConstrainedFrame(mapping, safeMix(floorFrame.rotations.at(i), ceilFrame.rotations.at(i), From b63e15f2e9caf928ffbc81f7999295a93727af7e Mon Sep 17 00:00:00 2001 From: Brad Hefta-Gaub Date: Fri, 4 Sep 2015 15:06:56 -0700 Subject: [PATCH 12/37] fix a bug in bad PPS calculation --- interface/src/Application.cpp | 8 +++----- 1 file changed, 3 insertions(+), 5 deletions(-) diff --git a/interface/src/Application.cpp b/interface/src/Application.cpp index 7321be5ac1..928b4a0684 100644 --- a/interface/src/Application.cpp +++ b/interface/src/Application.cpp @@ -3053,9 +3053,8 @@ void Application::queryOctree(NodeType_t serverType, PacketType::Value packetTyp voxelDetailsForCode(rootCode, rootDetails); AACube serverBounds(glm::vec3(rootDetails.x * TREE_SCALE, rootDetails.y * TREE_SCALE, - rootDetails.z * TREE_SCALE), + rootDetails.z * TREE_SCALE) - glm::vec3(HALF_TREE_SCALE), rootDetails.s * TREE_SCALE); - ViewFrustum::location serverFrustumLocation = _viewFrustum.cubeInFrustum(serverBounds); if (serverFrustumLocation != ViewFrustum::OUTSIDE) { @@ -3120,11 +3119,10 @@ void Application::queryOctree(NodeType_t serverType, PacketType::Value packetTyp voxelDetailsForCode(rootCode, rootDetails); AACube serverBounds(glm::vec3(rootDetails.x * TREE_SCALE, rootDetails.y * TREE_SCALE, - rootDetails.z * TREE_SCALE), + rootDetails.z * TREE_SCALE) - glm::vec3(HALF_TREE_SCALE), rootDetails.s * TREE_SCALE); - ViewFrustum::location serverFrustumLocation = _viewFrustum.cubeInFrustum(serverBounds); if (serverFrustumLocation != ViewFrustum::OUTSIDE) { inView = true; @@ -3143,7 +3141,7 @@ void Application::queryOctree(NodeType_t serverType, PacketType::Value packetTyp } else if (unknownView) { if (wantExtraDebugging) { qCDebug(interfaceapp) << "no known jurisdiction for node " << *node << ", give it budget of " - << perUnknownServer << " to send us jurisdiction."; + << perUnknownServer << " to send us jurisdiction."; } // set the query's position/orientation to be degenerate in a manner that will get the scene quickly From c9cf426dba909010a8e55d0778ce40ac923d7600 Mon Sep 17 00:00:00 2001 From: David Rowe Date: Fri, 4 Sep 2015 15:31:21 -0700 Subject: [PATCH 13/37] Fix EntityPropertyList merge --- libraries/entities/src/EntityPropertyFlags.h | 8 +++++--- 1 file changed, 5 insertions(+), 3 deletions(-) diff --git a/libraries/entities/src/EntityPropertyFlags.h b/libraries/entities/src/EntityPropertyFlags.h index 4cf8b4064a..7ea471d851 100644 --- a/libraries/entities/src/EntityPropertyFlags.h +++ b/libraries/entities/src/EntityPropertyFlags.h @@ -138,9 +138,6 @@ enum EntityPropertyList { // used by particles PROP_VELOCITY_SPREAD, PROP_ACCELERATION_SPREAD, - PROP_RADIUS_SPREAD, - PROP_RADIUS_START, - PROP_RADIUS_FINISH, PROP_X_N_NEIGHBOR_ID, // used by PolyVox PROP_Y_N_NEIGHBOR_ID, // used by PolyVox @@ -149,6 +146,11 @@ enum EntityPropertyList { PROP_Y_P_NEIGHBOR_ID, // used by PolyVox PROP_Z_P_NEIGHBOR_ID, // used by PolyVox + // Used by particles + PROP_RADIUS_SPREAD, + PROP_RADIUS_START, + PROP_RADIUS_FINISH, + //////////////////////////////////////////////////////////////////////////////////////////////////// // ATTENTION: add new properties to end of list just ABOVE this line PROP_AFTER_LAST_ITEM, From 5684e13400bffee13ca6152e4a46d28fcea8efc1 Mon Sep 17 00:00:00 2001 From: James Pollack Date: Fri, 4 Sep 2015 15:49:12 -0700 Subject: [PATCH 14/37] updates for cleaner PR --- examples/toys/bubblewand/bubble.js | 33 +++-- examples/toys/bubblewand/createWand.js | 27 +++- examples/toys/bubblewand/wand.js | 163 ++++++++++++------------- 3 files changed, 123 insertions(+), 100 deletions(-) diff --git a/examples/toys/bubblewand/bubble.js b/examples/toys/bubblewand/bubble.js index 7076430eaa..05b625c124 100644 --- a/examples/toys/bubblewand/bubble.js +++ b/examples/toys/bubblewand/bubble.js @@ -1,18 +1,33 @@ +// bubble.js +// part of bubblewand +// +// Created by James B. Pollack @imgntn -- 09/03/2015 +// Copyright 2015 High Fidelity, Inc. +// +// example of a nested entity. it doesn't do much now besides delete itself if it collides with something (bubbles are fragile! it would be cool if it sometimes merged with other bubbbles it hit) +// todo: play bubble sounds from the bubble itself instead of the wand. +// blocker: needs some sound fixes and a way to find its own position before unload for spatialization +// +// Distributed under the Apache License, Version 2.0. +// See the accompanying file LICENSE or http://www.apache.org/licenses/LICENSE-2.0.html + + (function() { -//example of a nested entity. it doesn't do much now besides delete itself if it collides with something (bubbles are fragile! it would be cool if it sometimes merged with other bubbbles it hit) -//todo: play bubble sounds from the bubble itself instead of the wand. needs some sound fixes and a way to find its own position before unload for spatialization - var popSound; + // Script.include("https://raw.githubusercontent.com/highfidelity/hifi/master/examples/utilities.js"); + // Script.include("https://raw.githubusercontent.com/highfidelity/hifi/master/examples/libraries/utils.js"); + + //var popSound; this.preload = function(entityID) { // print('bubble preload') this.entityID = entityID; - popSound = SoundCache.getSound("http://hifi-public.s3.amazonaws.com/james/bubblewand/sounds/pop.wav"); + // popSound = SoundCache.getSound("http://hifi-public.s3.amazonaws.com/james/bubblewand/sounds/pop.wav"); } this.collisionWithEntity = function(myID, otherID, collision) { //if(Entites.getEntityProperties(otherID).userData.objectType==='') { merge bubbles?} Entities.deleteEntity(myID); - this.burstBubbleSound(collision.contactPoint) + // this.burstBubbleSound(collision.contactPoint) }; @@ -26,10 +41,10 @@ this.burstBubbleSound = function(location) { - var audioOptions = { - volume: 0.5, - position: location - } + // var audioOptions = { + // volume: 0.5, + // position: location + // } //Audio.playSound(popSound, audioOptions); diff --git a/examples/toys/bubblewand/createWand.js b/examples/toys/bubblewand/createWand.js index 065a93e84e..d5204c8075 100644 --- a/examples/toys/bubblewand/createWand.js +++ b/examples/toys/bubblewand/createWand.js @@ -1,11 +1,25 @@ -function randInt(min, max) { - return Math.floor(Math.random() * (max - min)) + min; -} +// createWand.js +// part of bubblewand +// +// Created by James B. Pollack @imgntn -- 09/03/2015 +// Copyright 2015 High Fidelity, Inc. +// +// Loads a wand model and attaches the bubble wand behavior. +// Distributed under the Apache License, Version 2.0. +// See the accompanying file LICENSE or http://www.apache.org/licenses/LICENSE-2.0.html + + + +Script.include("https://raw.githubusercontent.com/highfidelity/hifi/master/examples/utilities.js"); +Script.include("https://raw.githubusercontent.com/highfidelity/hifi/master/examples/libraries/utils.js"); var wandModel = "http://hifi-public.s3.amazonaws.com/james/bubblewand/models/wand/wand.fbx?" + randInt(0, 10000); -var scriptURL = "http://hifi-public.s3.amazonaws.com/james/bubblewand/scripts/wand.js?" + randInt(1, 10048) +var scriptURL = "http://hifi-public.s3.amazonaws.com/james/bubblewand/scripts/wand.js?" + randInt(1, 100500) + + +//create the wand in front of the avatar var center = Vec3.sum(MyAvatar.position, Vec3.multiply(3, Quat.getFront(Camera.getOrientation()))); -var paintGun = Entities.addEntity({ +var wand = Entities.addEntity({ type: "Model", modelURL: wandModel, position: center, @@ -14,13 +28,14 @@ var paintGun = Entities.addEntity({ y: 1, z: 0.1 }, + //must be enabled to be grabbable in the physics engine collisionsWillMove: true, shapeType: 'box', script: scriptURL }); function cleanup() { - Entities.deleteEntity(paintGun); + //Entities.deleteEntity(wand); } diff --git a/examples/toys/bubblewand/wand.js b/examples/toys/bubblewand/wand.js index 3bc67537ff..be1042ab79 100644 --- a/examples/toys/bubblewand/wand.js +++ b/examples/toys/bubblewand/wand.js @@ -11,66 +11,37 @@ // Distributed under the Apache License, Version 2.0. // See the accompanying file LICENSE or http://www.apache.org/licenses/LICENSE-2.0.html -function randInt(min, max) { - return Math.floor(Math.random() * (max - min)) + min; -} - - function convertRange(value, r1, r2) { return (value - r1[0]) * (r2[1] - r2[0]) / (r1[1] - r1[0]) + r2[0]; } -// helpers -- @zappoman -// Computes the penetration between a point and a sphere (centered at the origin) -// if point is inside sphere: returns true and stores the result in 'penetration' -// (the vector that would move the point outside the sphere) -// otherwise returns false -function findSphereHit(point, sphereRadius) { - var EPSILON = 0.000001; //smallish positive number - used as margin of error for some computations - var vectorLength = Vec3.length(point); - if (vectorLength < EPSILON) { - return true; - } - var distance = vectorLength - sphereRadius; - if (distance < 0.0) { - return true; - } - return false; -} - -function findSpherePointHit(sphereCenter, sphereRadius, point) { - return findSphereHit(Vec3.subtract(point, sphereCenter), sphereRadius); -} - -function findSphereSphereHit(firstCenter, firstRadius, secondCenter, secondRadius) { - return findSpherePointHit(firstCenter, firstRadius + secondRadius, secondCenter); -} - (function() { + Script.include("https://raw.githubusercontent.com/highfidelity/hifi/master/examples/utilities.js"); + Script.include("https://raw.githubusercontent.com/highfidelity/hifi/master/examples/libraries/utils.js"); var bubbleModel = "http://hifi-public.s3.amazonaws.com/james/bubblewand/models/bubble/bubble.fbx"; - var bubbleScript = 'http://hifi-public.s3.amazonaws.com/james/bubblewand/scripts/bubble.js?' + randInt(2, 5096); + var bubbleScript = 'http://hifi-public.s3.amazonaws.com/james/bubblewand/scripts/bubble.js?' + randInt(1, 10000); var popSound = SoundCache.getSound("http://hifi-public.s3.amazonaws.com/james/bubblewand/sounds/pop.wav"); - var targetSize = 0.4; - var targetColor = { + var TARGET_SIZE = 0.4; + var TARGET_COLOR = { red: 128, green: 128, blue: 128 }; - var targetColorHit = { + var TARGET_COLOR_HIT = { red: 0, green: 255, blue: 0 }; - var handSize = 0.25; + var HAND_SIZE = 0.25; var leftCubePosition = MyAvatar.getLeftPalmPosition(); var rightCubePosition = MyAvatar.getRightPalmPosition(); var leftHand = Overlays.addOverlay("cube", { position: leftCubePosition, - size: handSize, + size: HAND_SIZE, color: { red: 0, green: 0, @@ -82,7 +53,7 @@ function findSphereSphereHit(firstCenter, firstRadius, secondCenter, secondRadiu var rightHand = Overlays.addOverlay("cube", { position: rightCubePosition, - size: handSize, + size: HAND_SIZE, color: { red: 255, green: 0, @@ -94,14 +65,15 @@ function findSphereSphereHit(firstCenter, firstRadius, secondCenter, secondRadiu var gustZoneOverlay = Overlays.addOverlay("cube", { position: getGustDetectorPosition(), - size: targetSize, - color: targetColor, + size: TARGET_SIZE, + color: TARGET_COLOR, alpha: 1, solid: false }); function getGustDetectorPosition() { + //put the zone in front of your avatar's face var DISTANCE_IN_FRONT = 0.2; var DISTANCE_UP = 0.5; var DISTANCE_TO_SIDE = 0.0; @@ -127,24 +99,27 @@ function findSphereSphereHit(firstCenter, firstRadius, secondCenter, secondRadiu } - var thisEntity = this; + var wandEntity = this; this.preload = function(entityID) { // print('PRELOAD') this.entityID = entityID; this.properties = Entities.getEntityProperties(this.entityID); - BubbleWand.lastPosition = this.properties.position; } this.unload = function(entityID) { Overlays.deleteOverlay(leftHand); Overlays.deleteOverlay(rightHand); - Overlays.deleteOverlay(rightFront) + Overlays.deleteOverlay(gustZoneOverlay) Entities.editEntity(entityID, { name: "" }); Script.update.disconnect(BubbleWand.update); - collectGarbage(); + Entities.deleteEntity(BubbleWand.currentBubble); + while (BubbleWand.bubbles.length > 0) { + Entities.deleteEntity(BubbleWand.bubbles.pop()); + } + }; @@ -152,10 +127,15 @@ function findSphereSphereHit(firstCenter, firstRadius, secondCenter, secondRadiu bubbles: [], currentBubble: null, update: function() { + BubbleWand.internalUpdate(); + }, + internalUpdate: function() { var _t = this; - var properties = Entities.getEntityProperties(thisEntity.entityID); + //get the current position of the wand + var properties = Entities.getEntityProperties(wandEntity.entityID); var wandPosition = properties.position; + //debug overlays for mouth mode var leftHandPos = MyAvatar.getLeftPalmPosition(); var rightHandPos = MyAvatar.getRightPalmPosition(); @@ -166,62 +146,74 @@ function findSphereSphereHit(firstCenter, firstRadius, secondCenter, secondRadiu position: rightHandPos }); - //not really a sphere... - var hitTargetWithWand = findSphereSphereHit(wandPosition, handSize / 2, getGustDetectorPosition(), targetSize / 2) + //if the wand is in the gust detector, activate mouth mode and change the overlay color + var hitTargetWithWand = findSphereSphereHit(wandPosition, HAND_SIZE / 2, getGustDetectorPosition(), TARGET_SIZE / 2) var mouthMode; if (hitTargetWithWand) { Overlays.editOverlay(gustZoneOverlay, { position: getGustDetectorPosition(), - color: targetColorHit + color: TARGET_COLOR_HIT }) mouthMode = true; } else { Overlays.editOverlay(gustZoneOverlay, { position: getGustDetectorPosition(), - color: targetColor + color: TARGET_COLOR }) mouthMode = false; } + var volumeLevel = MyAvatar.audioAverageLoudness; + //volume numbers are pretty large, so lets scale them down. + var convertedVolume = convertRange(volumeLevel, [0, 5000], [0, 10]); + + // default is 'wave mode', where waving the object around grows the bubbles var velocity = Vec3.subtract(wandPosition, BubbleWand.lastPosition) - - + //store the last position of the wand for velocity calculations _t.lastPosition = wandPosition; - //print('VELOCITY:::'+JSON.stringify(velocity)) + // velocity numbers are pretty small, so lets make them a bit bigger var velocityStrength = Vec3.length(velocity) * 100; - // print('velocityStrength::' + velocityStrength); - //todo: angular velocity without the controller - // var angularVelocity = Controller.getSpatialControlRawAngularVelocity(hands.leftHand.tip); + + if (velocityStrength > 10) { + velocityStrength = 10 + } + + //actually grow the bubble var dimensions = Entities.getEntityProperties(_t.currentBubble).dimensions; - var volumeLevel = MyAvatar.audioAverageLoudness; - var convertedVolume = convertRange(volumeLevel, [0, 5000], [0, 10]); - // print('CONVERTED VOLUME:' + convertedVolume); - - var growthFactor = convertedVolume + velocityStrength; - // print('growthFactor::' + growthFactor); if (velocityStrength > 1 || convertedVolume > 1) { - var bubbleSize = randInt(1, 5) + + //add some variation in bubble sizes + var bubbleSize = randInt(1, 5); bubbleSize = bubbleSize / 10; + + //release the bubble if its dimensions are bigger than the bubble size if (dimensions.x > bubbleSize) { - // print('RELEASE BUBBLE') + //bubbles pop after existing for a bit -- so set a random lifetime var lifetime = randInt(3, 8); - //sound is somewhat unstable at the moment + + //sound is somewhat unstable at the moment so this is commented out. really audio should be played by the bubbles, but there's a blocker. // Script.setTimeout(function() { // _t.burstBubbleSound(_t.currentBubble) // }, lifetime * 1000) - //need to add some kind of forward velocity for bubble that you blow + + + //todo: angular velocity without the controller -- forward velocity for mouth mode bubbles + // var angularVelocity = Controller.getSpatialControlRawAngularVelocity(hands.leftHand.tip); + Entities.editEntity(_t.currentBubble, { velocity: Vec3.normalize(velocity), // angularVelocity: Controller.getSpatialControlRawAngularVelocity(hands.leftHand.tip), lifetime: lifetime }); - _t.spawnBubble(); + //release the bubble -- when we create a new bubble, it will carry on and this update loop will affect the new bubble + BubbleWand.spawnBubble(); + return } else { if (mouthMode) { @@ -236,7 +228,6 @@ function findSphereSphereHit(firstCenter, firstRadius, secondCenter, secondRadiu } } - } else { } else { if (dimensions.x >= 0.02) { dimensions.x -= 0.001; @@ -246,6 +237,7 @@ function findSphereSphereHit(firstCenter, firstRadius, secondCenter, secondRadiu } + //update the bubble to stay with the wand tip Entities.editEntity(_t.currentBubble, { position: _t.wandTipPosition, dimensions: dimensions @@ -253,29 +245,33 @@ function findSphereSphereHit(firstCenter, firstRadius, secondCenter, secondRadiu }, burstBubbleSound: function(bubble) { + //we want to play the sound at the same location and orientation as the bubble var position = Entities.getEntityProperties(bubble).position; var orientation = Entities.getEntityProperties(bubble).orientation; - //print('bubble position at pop: ' + JSON.stringify(position)); + + //set the options for the audio injector var audioOptions = { volume: 0.5, position: position, orientation: orientation } - //Audio.playSound(popSound, audioOptions); - //remove this bubble from the array + //var audioInjector = Audio.playSound(popSound, audioOptions); + + //remove this bubble from the array to keep things clean var i = BubbleWand.bubbles.indexOf(bubble); - if (i != -1) { BubbleWand.bubbles.splice(i, 1); } }, spawnBubble: function() { - // print('spawning bubble') var _t = this; - var properties = Entities.getEntityProperties(thisEntity.entityID); + //create a new bubble at the tip of the wand + //the tip of the wand is going to be in a different place than the center, so we move in space relative to the model to find that position + + var properties = Entities.getEntityProperties(wandEntity.entityID); var wandPosition = properties.position; var upVector = Quat.getUp(properties.rotation); var frontVector = Quat.getFront(properties.rotation); @@ -284,6 +280,11 @@ function findSphereSphereHit(firstCenter, firstRadius, secondCenter, secondRadiu var offsetVector = Vec3.sum(upOffset, forwardOffset); var wandTipPosition = Vec3.sum(wandPosition, offsetVector); _t.wandTipPosition = wandTipPosition; + + //store the position of the tip on spawn for use in velocity calculations + _t.lastPosition = wandTipPosition; + + //create a bubble at the wand tip _t.currentBubble = Entities.addEntity({ type: 'Model', modelURL: bubbleModel, @@ -300,25 +301,17 @@ function findSphereSphereHit(firstCenter, firstRadius, secondCenter, secondRadiu shapeType: "sphere", script: bubbleScript, }); + + //add this bubble to an array of bubbles so we can keep track of them _t.bubbles.push(_t.currentBubble) + }, init: function() { - var _t = this; - _t.spawnBubble(); + this.spawnBubble(); Script.update.connect(BubbleWand.update); } } - function collectGarbage() { - // print('COLLECTING GARBAGE!!!') - Entities.deleteEntity(BubbleWand.currentBubble); - while (BubbleWand.bubbles.length > 0) { - Entities.deleteEntity(BubbleWand.bubbles.pop()); - } - } - BubbleWand.init(); - - }) \ No newline at end of file From 644e81e20b4c8b15cd53e7be0a9910668ac592a0 Mon Sep 17 00:00:00 2001 From: Brad Davis Date: Fri, 4 Sep 2015 15:26:50 -0700 Subject: [PATCH 15/37] Toggle mute while holding the hydras --- interface/src/Application.cpp | 9 +++++++++ .../input-plugins/src/input-plugins/SixenseManager.cpp | 4 ++++ .../input-plugins/src/input-plugins/UserInputMapper.h | 3 +++ 3 files changed, 16 insertions(+) diff --git a/interface/src/Application.cpp b/interface/src/Application.cpp index 7321be5ac1..990e93c854 100644 --- a/interface/src/Application.cpp +++ b/interface/src/Application.cpp @@ -612,6 +612,15 @@ Application::Application(int& argc, char** argv, QElapsedTimer &startup_time) : // Setup the userInputMapper with the actions auto userInputMapper = DependencyManager::get(); connect(userInputMapper.data(), &UserInputMapper::actionEvent, &_controllerScriptingInterface, &AbstractControllerScriptingInterface::actionEvent); + connect(userInputMapper.data(), &UserInputMapper::actionEvent, [this](int action, float state) { + if (state) { + switch (action) { + case UserInputMapper::Action::TOGGLE_MUTE: + DependencyManager::get()->toggleMute(); + break; + } + } + }); // Setup the keyboardMouseDevice and the user input mapper with the default bindings _keyboardMouseDevice->registerToUserInputMapper(*userInputMapper); diff --git a/libraries/input-plugins/src/input-plugins/SixenseManager.cpp b/libraries/input-plugins/src/input-plugins/SixenseManager.cpp index f090db7959..9bc3a71fd5 100644 --- a/libraries/input-plugins/src/input-plugins/SixenseManager.cpp +++ b/libraries/input-plugins/src/input-plugins/SixenseManager.cpp @@ -595,6 +595,10 @@ void SixenseManager::assignDefaultInputMapping(UserInputMapper& mapper) { mapper.addInputChannel(UserInputMapper::LEFT_HAND_CLICK, makeInput(BACK_TRIGGER, 0)); mapper.addInputChannel(UserInputMapper::RIGHT_HAND_CLICK, makeInput(BACK_TRIGGER, 1)); + // TODO find a mechanism to allow users to navigate the context menu via + mapper.addInputChannel(UserInputMapper::CONTEXT_MENU, makeInput(BUTTON_0, 0)); + mapper.addInputChannel(UserInputMapper::TOGGLE_MUTE, makeInput(BUTTON_0, 1)); + } UserInputMapper::Input SixenseManager::makeInput(unsigned int button, int index) { diff --git a/libraries/input-plugins/src/input-plugins/UserInputMapper.h b/libraries/input-plugins/src/input-plugins/UserInputMapper.h index 464c39b64c..2657f335a0 100755 --- a/libraries/input-plugins/src/input-plugins/UserInputMapper.h +++ b/libraries/input-plugins/src/input-plugins/UserInputMapper.h @@ -162,6 +162,9 @@ public: ACTION1, ACTION2, + CONTEXT_MENU, + TOGGLE_MUTE, + NUM_ACTIONS, }; From 10585a1b30224a6bb45e87a1d09b415e72630944 Mon Sep 17 00:00:00 2001 From: Brad Hefta-Gaub Date: Fri, 4 Sep 2015 16:20:12 -0700 Subject: [PATCH 16/37] have breakdance entity script use the model and location of the entity --- examples/entityScripts/breakdanceEntity.js | 3 ++- examples/toys/breakdanceCore.js | 16 +++++++++++----- 2 files changed, 13 insertions(+), 6 deletions(-) diff --git a/examples/entityScripts/breakdanceEntity.js b/examples/entityScripts/breakdanceEntity.js index 77980c0d13..40918bd65f 100644 --- a/examples/entityScripts/breakdanceEntity.js +++ b/examples/entityScripts/breakdanceEntity.js @@ -49,7 +49,8 @@ if (!_this.beingGrabbed) { // remember we're being grabbed so we can detect being released _this.beingGrabbed = true; - breakdanceStart(); + var props = Entities.getEntityProperties(entityID); + breakdanceStart(props.modelURL, props.position); print("I'm was grabbed..."); } else { breakdanceUpdate(); diff --git a/examples/toys/breakdanceCore.js b/examples/toys/breakdanceCore.js index 9bf63850ab..dd7f989c1c 100644 --- a/examples/toys/breakdanceCore.js +++ b/examples/toys/breakdanceCore.js @@ -358,13 +358,19 @@ var NATURAL_DIMENSIONS = { x: 1.63, y: 1.67, z: 0.31 }; var DIMENSIONS = Vec3.multiply(NATURAL_DIMENSIONS, 0.3); var puppetEntityID; -function createPuppet() { +function createPuppet(model, location) { + if (model === undefined) { + model = "https://hifi-public.s3.amazonaws.com/models/Bboys/bboy1/bboy1.fbx"; + } + if (location == undefined) { + location = getPositionPuppet(); + } puppetEntityID = Entities.addEntity({ type: "Model", - modelURL: "https://hifi-public.s3.amazonaws.com/models/Bboys/bboy1/bboy1.fbx", + modelURL: model, animationURL: "http://s3.amazonaws.com/hifi-public/animations/Breakdancing/breakdance_ready.fbx", animationSettings: ANIMATION_SETTINGS, - position: getPositionPuppet(), + position: location, ignoreForCollisions: true, dimensions: DIMENSIONS, lifetime: TEMPORARY_LIFETIME @@ -452,10 +458,10 @@ poses[LEFT_SIDE + RIGHT_FRONT ] = { name: "Left Side + Right Front", poses[LEFT_FRONT + RIGHT_FRONT ] = { name: "Left Front + Right Front", animation: "http://s3.amazonaws.com/hifi-public/animations/Breakdancing/breakdance_uprock_var_1_end.fbx" }; -breakdanceStart = function() { +breakdanceStart = function(model, location) { print("breakdanceStart..."); createOverlays(); - createPuppet(); + createPuppet(model, location); } breakdanceUpdate = function(deltaTime) { From 68a4f4ac5ebed788948e9e17058f8a618e0132b8 Mon Sep 17 00:00:00 2001 From: Seiji Emery Date: Fri, 4 Sep 2015 17:36:09 -0700 Subject: [PATCH 17/37] Added js benchmark scripts Adds a small declarative benchmarking library and some sample tests to examples/utils/tests. --- examples/utilities/tests/allPerfTests.js | 11 ++ examples/utilities/tests/entityPerfTest.js | 107 ++++++++++++++ examples/utilities/tests/forLoopPerfTest.js | 140 ++++++++++++++++++ examples/utilities/tests/mathPerfTest.js | 127 ++++++++++++++++ examples/utilities/tests/perfTest.js | 155 ++++++++++++++++++++ 5 files changed, 540 insertions(+) create mode 100644 examples/utilities/tests/allPerfTests.js create mode 100644 examples/utilities/tests/entityPerfTest.js create mode 100644 examples/utilities/tests/forLoopPerfTest.js create mode 100644 examples/utilities/tests/mathPerfTest.js create mode 100644 examples/utilities/tests/perfTest.js diff --git a/examples/utilities/tests/allPerfTests.js b/examples/utilities/tests/allPerfTests.js new file mode 100644 index 0000000000..d389d78104 --- /dev/null +++ b/examples/utilities/tests/allPerfTests.js @@ -0,0 +1,11 @@ +// +// Created by Seiji Emery on 9/4/15 +// Copyright 2015 High Fidelity, Inc. +// +// Distributed under the Apache License, Version 2.0. +// See the accompanying file LICENSE or http://www.apache.org/licenses/LICENSE-2.0.html +// + +Script.include("entityPerfTest.js"); +Script.include("mathPerfTest.js"); +Script.include("forLoopPerfTest.js"); \ No newline at end of file diff --git a/examples/utilities/tests/entityPerfTest.js b/examples/utilities/tests/entityPerfTest.js new file mode 100644 index 0000000000..181afcf360 --- /dev/null +++ b/examples/utilities/tests/entityPerfTest.js @@ -0,0 +1,107 @@ +// +// Created by Seiji Emery on 9/4/15 +// Copyright 2015 High Fidelity, Inc. +// +// Distributed under the Apache License, Version 2.0. +// See the accompanying file LICENSE or http://www.apache.org/licenses/LICENSE-2.0.html +// + +Script.include("perfTest.js"); + +function makeEntity () { + return Entities.addEntity({ + type: "Box", + position: Vec3.sum(MyAvatar.position, { + x: 0.0, y: 0.0, z: 1.0 + }), + dimensions: { x: 0.1, y: 0.1, z: 0.1 }, + userData: "fooooooooooooooooooooooo" + }); +} + +// Create + run tests +(function () { + var entityTests = new TestRunner(); + + entityTests.addTestCase('getEntityProperties') + .before(function () { + this.entity = makeEntity(); + }) + .after(function() { + Entities.deleteEntity(this.entity); + }) + .run(function() { + var properties = Entities.getEntityProperties(this.entity); + var foo = properties.userData; + }); + + entityTests.addTestCase('add + delete entity') + .run(function() { + var entity = makeEntity(); + Entities.deleteEntity(entity); + }); + entityTests.addTestCase('update entity') + .before(function () { + this.entity = makeEntity(); + }) + .after(function () { + Entities.deleteEntity(this.entity); + }) + .run(function() { + Entities.editEntity(this.entity, { userData: "barrrrrrr" }); + }); + + TestCase.prototype.withEntityOp = function(op) { + this.before(function(){ + this.entity = makeEntity(); + }) + this.after(function(){ + Entities.deleteEntity(this.entity); + }) + this.run(op); + } + entityTests.addTestCase('find closest entity') + .withEntityOp(function() { + Entities.findClosestEntity(this.entity, MyAvatar.position, 100.0); + }) + entityTests.addTestCase('findEntities') + .withEntityOp(function(){ + Entities.findEntities(this.entity, MyAvatar.position, 10.0); + }) + entityTests.addTestCase('findEntitiesInBox') + .withEntityOp(function(){ + Entities.findEntitiesInBox(this.entity, MyAvatar.position, {x: 10.0, y: 10.0, z: 10.0}); + }) + + TestCase.prototype.withRay = function(op) { + this.before(function(){ + this.ray = Camera.computePickRay(500, 200); + }); + this.run(op); + } + entityTests.addTestCase('findRayIntersection, precisionPicking=true') + .withRay(function(){ + Entities.findRayIntersection(this.ray, true); + }) + entityTests.addTestCase('findRayIntersection, precisionPicking=false') + .withRay(function(){ + Entities.findRayIntersection(this.ray, false); + }); + entityTests.addTestCase('findRayIntersectionBlocking, precisionPicking=true') + .withRay(function(){ + Entities.findRayIntersectionBlocking(this.ray, true); + }) + entityTests.addTestCase('findRayIntersectionBlocking, precisionPicking=false') + .withRay(function(){ + Entities.findRayIntersectionBlocking(this.ray, false); + }) + entityTests.addTestCase('no-op') + .run(function(){}); + + print("Running entity tests"); + entityTests.runAllTestsWithIterations([10, 100, 1000], 1e3, 10); + entityTests.writeResultsToLog(); +})(); + + + diff --git a/examples/utilities/tests/forLoopPerfTest.js b/examples/utilities/tests/forLoopPerfTest.js new file mode 100644 index 0000000000..4d960ac2a5 --- /dev/null +++ b/examples/utilities/tests/forLoopPerfTest.js @@ -0,0 +1,140 @@ +// +// Created by Seiji Emery on 9/4/15 +// Copyright 2015 High Fidelity, Inc. +// +// Distributed under the Apache License, Version 2.0. +// See the accompanying file LICENSE or http://www.apache.org/licenses/LICENSE-2.0.html +// +// Checks various types of js iteration (for loops, for/in loops, Array.forEach, and Object.keys) +// for speed + efficiency. Mostly a sanity check for my own code. +// + +Script.include("perfTest.js"); + +(function () { + var input1 = []; + var input2 = []; + var N = 1000; + for (var i = 0; i < N; ++i) { + input1.push(Math.random()); + input2.push(Math.random()); + } + TestCase.prototype.withArray = function(n, func) { + this.before(function () { + this.array = []; + for (var i = 0; i < n; ++i) { + this.array.push(0); + } + }); + this.run(fcn); + } + + print("For loop test -- prelim tests"); + var prelimTests = new TestRunner(); + prelimTests.addTestCase('Array.push (test component)') + .before(function () { + this.array = []; + }) + .run(function () { + this.array.push(1); + }); + prelimTests.addTestCase('Array.push with mul op (test component)') + .before(function() { + this.array = []; + }) + .run(function (i) { + this.array.push(input1[i] * Math.PI); + }) + prelimTests.runAllTestsWithIterations([1e4, 1e5, 1e6], 1e6, 10); + + print("For loop test (n = " + N + ")"); + var loopTests = new TestRunner(); + loopTests.addTestCase('for (var i = 0; i < n; ++i) { ... }') + .before(function () { + this.array = []; + }) + .run(function () { + for (var i = 0; i < N; ++i) { + this.array.push(input1[i] * Math.PI); + } + }) + loopTests.addTestCase('while (n --> 0) { ... } (reversed)') + .before(function () { + this.array = []; + }) + .run(function () { + var n = N; + while (n --> 0) { + this.array.push(input1[n] * Math.PI); + } + }) + loopTests.addTestCase('Array.forEach(function(v, i) { ... })') + .before(function () { + this.array = []; + }) + .run(function () { + input1.forEach(function(v) { + this.array.push(v * Math.PI); + }, this); + }) + loopTests.addTestCase('Array.map(function(v, i) { ... })') + .run(function () { + this.array = input1.map(function (v) { + return v * Math.PI; + }, this); + }); + loopTests.runAllTestsWithIterations([10, 100, 1000], 1e3, 10); + + + // Test iteration on object keys + + // http://stackoverflow.com/questions/10726909/random-alpha-numeric-string-in-javascript + function makeRandomString(length, chars) { + var result = ''; + for (var i = length; i > 0; --i) result += chars[Math.round(Math.random() * (chars.length - 1))]; + return result; + } + function randomString () { + var n = Math.floor(Math.random() * 18) + 12; + return makeRandomString(n, '0123456789abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ'); + } + + var obj = {}, numKeys = 1000; + while (numKeys --> 0) { + obj[randomString()] = Math.floor(Math.random() * 255); + } + print("Object iter tests (object has " + Object.keys(obj).length + " keys)"); + var iterTests = new TestRunner(); + iterTests.addTestCase('for (var k in obj) { foo(obj[k]); }') + .before(function () { + this.x = 0; + }) + .run(function () { + for (var k in obj) { + this.x = (this.x + obj[k]) % 256; + } + }); + iterTests.addTestCase('for (var k in obj) { if (Object.hasOwnProperty(obj, k)) { foo(obj[k]); } }') + .before(function () { + this.x = 0; + }) + .run(function () { + for (var k in obj) { + if (Object.hasOwnProperty(obj, k)) { + this.x = (this.x + obj[k]) % 256; + } + } + }) + iterTests.addTestCase('Object.keys(obj).forEach(function(k) { foo(obj[k]); }') + .before(function () { + this.x = 0; + }) + .run(function () { + Object.keys(obj).forEach(function (k) { + this.x = (this.x + obj[k]) % 256; + }) + }) + + iterTests.runAllTestsWithIterations([10, 100, 1000], 1e3, 10); +})(); + diff --git a/examples/utilities/tests/mathPerfTest.js b/examples/utilities/tests/mathPerfTest.js new file mode 100644 index 0000000000..b4df45aa41 --- /dev/null +++ b/examples/utilities/tests/mathPerfTest.js @@ -0,0 +1,127 @@ +// +// Created by Seiji Emery on 9/4/15 +// Copyright 2015 High Fidelity, Inc. +// +// Distributed under the Apache License, Version 2.0. +// See the accompanying file LICENSE or http://www.apache.org/licenses/LICENSE-2.0.html +// + +Script.include("perfTest.js"); + +// Native vec3 (for comparison) +var Native = {}; +(function () { + Native.Vec3 = function (x, y, z) { + this.x = x || 0.0; + this.y = y || 0.0; + this.z = z || 0.0; + } + Native.Vec3.prototype.add = function (other) { + this.x += other.x; + this.y += other.y; + this.z += other.z; + } + Native.Vec3.prototype.distance = function (other) { + var rx = this.x - other.x; + var ry = this.y - other.y; + var rz = this.z - other.z; + return Math.sqrt(rx * rx + ry * ry + rz * rz); + } + Native.Vec3.prototype.dist2 = function (other) { + var rx = this.x - other.x; + var ry = this.y - other.y; + var rz = this.z - other.z; + return rx * rx + ry * ry + rz * rz; + } + + Native.Quaternion = function (x, y, z, w) { + this.x = x || 0.0; + this.y = y || 0.0; + this.z = z || 0.0; + this.w = w || 0.0; + } + // Pulled from THREE.js + Native.Quaternion.prototype.multiply = function(quat2) { + var qax = this.x, qay = this.y, qaz = this.z, qaw = this.w, + qbx = quat2.x, qby = quat2.y, qbz = quat2.z, qbw = quat2.w; + this.x = qax * qbw + qaw * qbx + qay * qbz - qaz * qby; + this.y = qay * qbw + qaw * qby + qaz * qbx - qax * qbz; + this.z = qaz * qbw + qaw * qbz + qax * qby - qay * qbx; + this.w = qaw * qbw - qax * qbx - qay * qby - qaz * qbz; + return this; + } +})(); + +// Create + run tests +(function () { + var mathTests = new TestRunner(); + var foo; + + print("math tests:"); + var iterations = [ 1000, 10000, 100000, 1000000 ]; + + print("builtin Vec3 + Quat (wrapped glm::vec3 + glm::quat)"); + var builtinTests = new TestRunner(); + builtinTests.addTestCase('Vec3.sum') + .run(function () { + foo = Vec3.sum({x: 10, y: 12, z: 3}, {x: 1, y: 2, z: 4}); + }) + builtinTests.addTestCase('Vec3.distance') + .run(function () { + foo = Vec3.distance({x: 1209, y: 298, z: 238}, {x: 239, y: 20, z: 23}) + }) + builtinTests.addTestCase('Quat.multiply') + .run(function () { + foo = Quat.multiply({x: 2190.0, y: 2109.0, z: 1209.0, w: 829.0}, {x: -1293.0, y: 1029.1, z: 2190.1, w: 129.0}) + }); + builtinTests.runAllTestsWithIterations([ 1e3, 1e4, 1e5 ], 1e3, 10); + + print(""); + print("native JS Vec3 + Quaternion"); + var nativeTests = new TestRunner(); + nativeTests.addTestCase('Native Vec3.sum') + .run(function () { + foo = new Native.Vec3(10, 12, 3).add(new Native.Vec3(1, 2, 4)); + }) + nativeTests.addTestCase('Native Vec3.distance') + .run(function () { + foo = new Native.Vec3(1209, 298, 238).distance(new Native.Vec3(239, 20, 23)); + }) + nativeTests.addTestCase('Native Vec3.dist2') + .run(function () { + foo = new Native.Vec3(1209, 298, 238).dist2(new Native.Vec3(239, 20, 23)); + }) + nativeTests.addTestCase('Native Quat.multiply') + .run(function () { + foo = new Native.Quaternion(2190.0, 2109.0, 1209.0, 829.0).multiply(new Native.Quaternion(-1293.0, 1029.1, 2190.1, 129.0)); + }); + nativeTests.runAllTestsWithIterations([ 1e3, 1e4, 1e5, 1e6 ], 1e6, 10); + + print(""); + print("no-ops (for test assignment / construction overhead)") + mathTests.addTestCase('no-op') + .run(function(){}); + mathTests.addTestCase('assign null') + .run(function () { + foo = null; + }); + mathTests.addTestCase('assign object') + .run(function () { + foo = { x: 1902, y: 129, z: 21 }; + }); + mathTests.addTestCase('Native Vec3.construct -- 3 args') + .run(function () { + foo = new Native.Vec3(1209, 298, 238); + }); + mathTests.addTestCase('Native Vec3.construct -- 2 args') + .run(function () { + foo = new Native.Vec3(1209, 298); + }); + mathTests.addTestCase('Native Vec3.construct -- no args') + .run(function() { + foo = new Native.Vec3(); + }); + + mathTests.runAllTestsWithIterations([1e3, 1e4, 1e5, 1e6], 1e6, 10); + mathTests.writeResultsToLog(); +})(); \ No newline at end of file diff --git a/examples/utilities/tests/perfTest.js b/examples/utilities/tests/perfTest.js new file mode 100644 index 0000000000..814cee8ac0 --- /dev/null +++ b/examples/utilities/tests/perfTest.js @@ -0,0 +1,155 @@ +// +// Created by Seiji Emery on 9/4/15 +// Copyright 2015 High Fidelity, Inc. +// +// Distributed under the Apache License, Version 2.0. +// See the accompanying file LICENSE or http://www.apache.org/licenses/LICENSE-2.0.html +// +// Simple benchmarking library. See the test scripts for example usage. +// + +(function () { + // Runs multiple 'test cases' (benchmarks that get invoked w/ varying iteration counts) + function TestRunner () { + this._testCases = {}; + this._testResults = []; + } + this.TestRunner = TestRunner; + + // Add a test case. Define behavior by declaratively calling .before, .after, and .run w/ impls. + TestRunner.prototype.addTestCase = function (name) { + var testcase = new TestCase(name); + this._testCases[name] = testcase; + return testcase; + } + + // Runs a function n times. Uses context object so it runs sandboxed. + function runTimedWithIterations (f, context, numIterations) { + var start = new Date().getTime(); + while (numIterations --> 0) { + f.apply(context); + } + var end = new Date().getTime(); + return end - start; + } + + function fmtSecs (secs) { + if (secs >= 1.0) { + return ""+secs.toFixed(3)+" secs"; + } else if (secs >= 1e-3) { + return ""+(secs * 1e3).toFixed(3)+" ms"; + } else if (secs >= 1e-6) { + return ""+(secs * 1e6).toFixed(3)+" µs"; + } else { + return ""+(secs * 1e9).toFixed(3)+" ns"; + } + } + function avg(samples) { + return samples.length ? + samples.reduce(function(a, b){return a+b;}, 0.0) / samples.length : 0.0; + } + + // Runs a named performance test for multiple iterations, and optionally calculates an average. + // @param name: the test name registered with addTest + // @param iterations: a list of iteration sequences. eg. [10, 100, 1000] => runs for 10, then 100, then 1000 iterations + // and prints the timing info for each (in ms) + // @param iterationsForAvg: optional + // @param samplesForAvg: optional + // After running iterations, will compute an average if iterationsForAvg and samplesForAvg are both set: + // average := + // collects n samples by running the testcase n times with i iterations + // where n = samplesForAvg, i = iterationsForAvg + // we then average the samples, and print that. + // + TestRunner.prototype.runPerfTestWithIterations = function (name, iterations, iterationsForAvg, samplesForAvg) { + if (!this._testCases[name]) { + print("No test case with name '" + name + "'!"); + } + var testcase = this._testCases[name]; + + var runAverages = []; // secs + + var noErrors = true; + iterations.forEach(function(n, i) { + var sandbox = {}; + try { + if (testcase.setupFunction) { + testcase.setupFunction.apply(sandbox); + } + + var dt = runTimedWithIterations(testcase.runFunction, sandbox, n); + + if (testcase.teardownFunction) { + testcase.teardownFunction.apply(sandbox); + } + + this._testResults.push(""+name+" with "+n+" iterations: "+dt+" ms"); + } catch (e) { + this._testResults.push("Testcase '"+name+"':"+i+" ("+n+") failed with error: "+e); + noErrors = false; + } + }, this); + this.writeResultsToLog(); + if (noErrors && iterationsForAvg && samplesForAvg) { + try { + var samples = []; + for (var n = samplesForAvg; n --> 0; ) { + var sandbox = {}; + if (testcase.setupFunction) { + testcase.setupFunction.apply(sandbox); + } + + var dt = runTimedWithIterations(testcase.runFunction, sandbox, iterationsForAvg); + + if (testcase.teardownFunction) { + testcase.teardownFunction.apply(sandbox); + } + samples.push(dt / iterationsForAvg * 1e-3); // dt in ms + } + print(" average: " + ((avg(samples) * 1e6).toFixed(3)) + " µs") + // print("\t(" + samplesForAvg + " samples with " + iterationsForAvg + " iterations)"); + } catch (e) { + print("Error while calculating average: " + e); + return; + } + } + } + // Runs all registered tests w/ iteration + average parameters + TestRunner.prototype.runAllTestsWithIterations = function (iterations, iterationsForAvg, samplesForAvg) { + Object.keys(this._testCases).forEach(function(name) { + this.runPerfTestWithIterations(name, iterations, iterationsForAvg, samplesForAvg); + }, this); + } + + // Dump results to the debug log. You don't need to call this. + TestRunner.prototype.writeResultsToLog = function () { + var s = ' ' + this._testResults.join('\n '); + this._testResults = []; + // print(s); + s.split('\n').forEach(function(line) { + print(line); + }); + } + + // Implements a benchmark test case, that has optional setup = teardown code, and a (non-optional) run function. + // setup + teardown get called once, and run gets called for n sequential iterations (see TestRunner.runTestWithIterations) + // setup, run, and teardown all get applied to the same sandboxed this object, so use that for storing test data for each run. + function TestCase (name) { + this.name = name; + this.setupFunction = null; + this.runFunction = null; + this.teardownFunction = null; + } + this.TestCase = TestCase; + TestCase.prototype.before = function (f) { + this.setupFunction = f; + return this; + } + TestCase.prototype.after = function (f) { + this.teardownFunction = f; + return this; + } + TestCase.prototype.run = function (f) { + this.runFunction = f; + } +})(); \ No newline at end of file From 12b8a5a1d52c478feb6c88b2eb308e15e948f6e9 Mon Sep 17 00:00:00 2001 From: David Rowe Date: Sat, 5 Sep 2015 10:23:27 -0700 Subject: [PATCH 18/37] Add alpha property support to ParticleEffect entities Add at same "level" as color so that it's available for other entity types to use in the future. --- examples/example/entities/particlesTest.js | 18 +++++++++-- .../RenderableParticleEffectEntityItem.cpp | 32 +++++++++---------- .../entities/src/EntityItemProperties.cpp | 8 ++++- libraries/entities/src/EntityItemProperties.h | 2 ++ .../src/EntityItemPropertiesDefaults.h | 1 + libraries/entities/src/EntityPropertyFlags.h | 2 ++ .../entities/src/ParticleEffectEntityItem.cpp | 13 +++++++- .../entities/src/ParticleEffectEntityItem.h | 5 +++ .../networking/src/udt/PacketHeaders.cpp | 2 +- libraries/networking/src/udt/PacketHeaders.h | 3 +- 10 files changed, 63 insertions(+), 23 deletions(-) diff --git a/examples/example/entities/particlesTest.js b/examples/example/entities/particlesTest.js index 48d5ca246a..88e1c8d919 100644 --- a/examples/example/entities/particlesTest.js +++ b/examples/example/entities/particlesTest.js @@ -15,7 +15,7 @@ var box, particles, particleExample = -1, - NUM_PARTICLE_EXAMPLES = 6, + NUM_PARTICLE_EXAMPLES = 7, PARTICLE_RADIUS = 0.04; function onClickDownOnEntity(entityID) { @@ -24,7 +24,7 @@ switch (particleExample) { case 0: - print("Simple animation"); + print("Simple emitter"); Entities.editEntity(particles, { velocitySpread: { x: 0.0, y: 0.0, z: 0.0 }, accelerationSpread: { x: 0.0, y: 0.0, z: 0.0 }, @@ -71,12 +71,24 @@ }); break; case 5: - print("Stop animation"); + print("Alpha 0.5"); Entities.editEntity(particles, { velocitySpread: { x: 0.0, y: 0.0, z: 0.0 }, accelerationSpread: { x: 0.0, y: 0.0, z: 0.0 }, radiusStart: PARTICLE_RADIUS, radiusFinish: PARTICLE_RADIUS, + alpha: 0.5, + animationIsPlaying: true + }); + break; + case 6: + print("Stop emitting"); + Entities.editEntity(particles, { + velocitySpread: { x: 0.0, y: 0.0, z: 0.0 }, + accelerationSpread: { x: 0.0, y: 0.0, z: 0.0 }, + radiusStart: PARTICLE_RADIUS, + radiusFinish: PARTICLE_RADIUS, + alpha: 1.0, animationIsPlaying: false }); break; diff --git a/libraries/entities-renderer/src/RenderableParticleEffectEntityItem.cpp b/libraries/entities-renderer/src/RenderableParticleEffectEntityItem.cpp index 424ea2b810..be9c28a80d 100644 --- a/libraries/entities-renderer/src/RenderableParticleEffectEntityItem.cpp +++ b/libraries/entities-renderer/src/RenderableParticleEffectEntityItem.cpp @@ -172,16 +172,17 @@ uint32_t toRGBA(uint8_t r, uint8_t g, uint8_t b, uint8_t a) { return ((uint32_t)r | (uint32_t)g << 8 | (uint32_t)b << 16 | (uint32_t)a << 24); } -class PositionAndRadius { +class ParticleDetails { public: - PositionAndRadius(glm::vec3 position, float radius) : position(position), radius(radius) { } + ParticleDetails(glm::vec3 position, float radius, uint32_t rgba) : position(position), radius(radius), rgba(rgba) { } glm::vec3 position; float radius; + uint32_t rgba; }; static glm::vec3 zSortAxis; -static bool zSort(const PositionAndRadius& rhs, const PositionAndRadius& lhs) { +static bool zSort(const ParticleDetails& rhs, const ParticleDetails& lhs) { return glm::dot(rhs.position, ::zSortAxis) > glm::dot(lhs.position, ::zSortAxis); } @@ -190,22 +191,21 @@ void RenderableParticleEffectEntityItem::updateRenderItem() { return; } + // make a copy of each particle's details + std::vector particleDetails; + particleDetails.reserve(getLivingParticleCount()); auto xcolor = getXColor(); - auto alpha = (uint8_t)(glm::clamp(getLocalRenderAlpha(), 0.0f, 1.0f) * 255.0f); - auto rgba = toRGBA(xcolor.red, xcolor.green, xcolor.blue, alpha); - - // make a copy of each particle position and radius - std::vector positionsAndRadiuses; - positionsAndRadiuses.reserve(getLivingParticleCount()); for (quint32 i = _particleHeadIndex; i != _particleTailIndex; i = (i + 1) % _maxParticles) { - positionsAndRadiuses.push_back(PositionAndRadius(_particlePositions[i], _particleRadiuses[i])); + auto alpha = (uint8_t)(glm::clamp(_particleAlphas[i] * getLocalRenderAlpha(), 0.0f, 1.0f) * 255.0f); + auto rgba = toRGBA(xcolor.red, xcolor.green, xcolor.blue, alpha); + particleDetails.push_back(ParticleDetails(_particlePositions[i], _particleRadiuses[i], rgba)); } // sort particles back to front // NOTE: this is view frustum might be one frame out of date. auto frustum = AbstractViewStateInterface::instance()->getCurrentViewFrustum(); ::zSortAxis = frustum->getDirection(); - qSort(positionsAndRadiuses.begin(), positionsAndRadiuses.end(), zSort); + qSort(particleDetails.begin(), particleDetails.end(), zSort); // allocate vertices _vertices.clear(); @@ -213,14 +213,14 @@ void RenderableParticleEffectEntityItem::updateRenderItem() { // build vertices from particle positions and radiuses const glm::vec3 up = frustum->getUp(); const glm::vec3 right = frustum->getRight(); - for (auto&& particle : positionsAndRadiuses) { + for (auto&& particle : particleDetails) { glm::vec3 upOffset = up * particle.radius; glm::vec3 rightOffset = right * particle.radius; // generate corners of quad aligned to face the camera. - _vertices.emplace_back(particle.position + rightOffset + upOffset, glm::vec2(1.0f, 1.0f), rgba); - _vertices.emplace_back(particle.position - rightOffset + upOffset, glm::vec2(0.0f, 1.0f), rgba); - _vertices.emplace_back(particle.position - rightOffset - upOffset, glm::vec2(0.0f, 0.0f), rgba); - _vertices.emplace_back(particle.position + rightOffset - upOffset, glm::vec2(1.0f, 0.0f), rgba); + _vertices.emplace_back(particle.position + rightOffset + upOffset, glm::vec2(1.0f, 1.0f), particle.rgba); + _vertices.emplace_back(particle.position - rightOffset + upOffset, glm::vec2(0.0f, 1.0f), particle.rgba); + _vertices.emplace_back(particle.position - rightOffset - upOffset, glm::vec2(0.0f, 0.0f), particle.rgba); + _vertices.emplace_back(particle.position + rightOffset - upOffset, glm::vec2(1.0f, 0.0f), particle.rgba); } render::PendingChanges pendingChanges; diff --git a/libraries/entities/src/EntityItemProperties.cpp b/libraries/entities/src/EntityItemProperties.cpp index a07eaacdb9..f838b7a17e 100644 --- a/libraries/entities/src/EntityItemProperties.cpp +++ b/libraries/entities/src/EntityItemProperties.cpp @@ -55,6 +55,7 @@ CONSTRUCT_PROPERTY(script, ENTITY_ITEM_DEFAULT_SCRIPT), CONSTRUCT_PROPERTY(scriptTimestamp, ENTITY_ITEM_DEFAULT_SCRIPT_TIMESTAMP), CONSTRUCT_PROPERTY(collisionSoundURL, ENTITY_ITEM_DEFAULT_COLLISION_SOUND_URL), CONSTRUCT_PROPERTY(color, ), +CONSTRUCT_PROPERTY(alpha, ENTITY_ITEM_DEFAULT_ALPHA), CONSTRUCT_PROPERTY(modelURL, ""), CONSTRUCT_PROPERTY(compoundShapeURL, ""), CONSTRUCT_PROPERTY(animationURL, ""), @@ -331,6 +332,7 @@ EntityPropertyFlags EntityItemProperties::getChangedProperties() const { CHECK_PROPERTY_CHANGE(PROP_SCRIPT_TIMESTAMP, scriptTimestamp); CHECK_PROPERTY_CHANGE(PROP_COLLISION_SOUND_URL, collisionSoundURL); CHECK_PROPERTY_CHANGE(PROP_COLOR, color); + CHECK_PROPERTY_CHANGE(PROP_ALPHA, alpha); CHECK_PROPERTY_CHANGE(PROP_MODEL_URL, modelURL); CHECK_PROPERTY_CHANGE(PROP_COMPOUND_SHAPE_URL, compoundShapeURL); CHECK_PROPERTY_CHANGE(PROP_ANIMATION_URL, animationURL); @@ -445,6 +447,7 @@ QScriptValue EntityItemProperties::copyToScriptValue(QScriptEngine* engine, bool COPY_PROPERTY_TO_QSCRIPTVALUE(angularDamping); COPY_PROPERTY_TO_QSCRIPTVALUE(visible); COPY_PROPERTY_TO_QSCRIPTVALUE(color); + COPY_PROPERTY_TO_QSCRIPTVALUE(alpha); COPY_PROPERTY_TO_QSCRIPTVALUE(modelURL); COPY_PROPERTY_TO_QSCRIPTVALUE(compoundShapeURL); COPY_PROPERTY_TO_QSCRIPTVALUE(animationURL); @@ -578,6 +581,7 @@ void EntityItemProperties::copyFromScriptValue(const QScriptValue& object, bool COPY_PROPERTY_FROM_QSCRIPTVALUE(angularDamping, float, setAngularDamping); COPY_PROPERTY_FROM_QSCRIPTVALUE(visible, bool, setVisible); COPY_PROPERTY_FROM_QSCRIPTVALUE(color, xColor, setColor); + COPY_PROPERTY_FROM_QSCRIPTVALUE(alpha, float, setAlpha); COPY_PROPERTY_FROM_QSCRIPTVALUE(modelURL, QString, setModelURL); COPY_PROPERTY_FROM_QSCRIPTVALUE(compoundShapeURL, QString, setCompoundShapeURL); COPY_PROPERTY_FROM_QSCRIPTVALUE(animationURL, QString, setAnimationURL); @@ -915,11 +919,11 @@ bool EntityItemProperties::encodeEntityEditPacket(PacketType::Value command, Ent APPEND_ENTITY_PROPERTY(PROP_STROKE_WIDTHS, properties.getStrokeWidths()); } - APPEND_ENTITY_PROPERTY(PROP_MARKETPLACE_ID, properties.getMarketplaceID()); APPEND_ENTITY_PROPERTY(PROP_NAME, properties.getName()); APPEND_ENTITY_PROPERTY(PROP_COLLISION_SOUND_URL, properties.getCollisionSoundURL()); APPEND_ENTITY_PROPERTY(PROP_ACTION_DATA, properties.getActionData()); + APPEND_ENTITY_PROPERTY(PROP_ALPHA, properties.getAlpha()); } if (propertyCount > 0) { int endOfEntityItemData = packetData->getUncompressedByteOffset(); @@ -1192,6 +1196,7 @@ bool EntityItemProperties::decodeEntityEditPacket(const unsigned char* data, int READ_ENTITY_PROPERTY_TO_PROPERTIES(PROP_NAME, QString, setName); READ_ENTITY_PROPERTY_TO_PROPERTIES(PROP_COLLISION_SOUND_URL, QString, setCollisionSoundURL); READ_ENTITY_PROPERTY_TO_PROPERTIES(PROP_ACTION_DATA, QByteArray, setActionData); + READ_ENTITY_PROPERTY_TO_PROPERTIES(PROP_ALPHA, float, setAlpha); return valid; } @@ -1248,6 +1253,7 @@ void EntityItemProperties::markAllChanged() { _nameChanged = true; _visibleChanged = true; _colorChanged = true; + _alphaChanged = true; _modelURLChanged = true; _compoundShapeURLChanged = true; _animationURLChanged = true; diff --git a/libraries/entities/src/EntityItemProperties.h b/libraries/entities/src/EntityItemProperties.h index 95f9757f20..520e2c1224 100644 --- a/libraries/entities/src/EntityItemProperties.h +++ b/libraries/entities/src/EntityItemProperties.h @@ -103,6 +103,7 @@ public: DEFINE_PROPERTY(PROP_SCRIPT_TIMESTAMP, ScriptTimestamp, scriptTimestamp, quint64); DEFINE_PROPERTY_REF(PROP_COLLISION_SOUND_URL, CollisionSoundURL, collisionSoundURL, QString); DEFINE_PROPERTY_REF(PROP_COLOR, Color, color, xColor); + DEFINE_PROPERTY(PROP_ALPHA, Alpha, alpha, float); DEFINE_PROPERTY_REF(PROP_MODEL_URL, ModelURL, modelURL, QString); DEFINE_PROPERTY_REF(PROP_COMPOUND_SHAPE_URL, CompoundShapeURL, compoundShapeURL, QString); DEFINE_PROPERTY_REF(PROP_ANIMATION_URL, AnimationURL, animationURL, QString); @@ -294,6 +295,7 @@ inline QDebug operator<<(QDebug debug, const EntityItemProperties& properties) { DEBUG_PROPERTY_IF_CHANGED(debug, properties, ScriptTimestamp, scriptTimestamp, ""); DEBUG_PROPERTY_IF_CHANGED(debug, properties, CollisionSoundURL, collisionSoundURL, ""); DEBUG_PROPERTY_IF_CHANGED(debug, properties, Color, color, ""); + DEBUG_PROPERTY_IF_CHANGED(debug, properties, Alpha, alpha, ""); DEBUG_PROPERTY_IF_CHANGED(debug, properties, ModelURL, modelURL, ""); DEBUG_PROPERTY_IF_CHANGED(debug, properties, CompoundShapeURL, compoundShapeURL, ""); DEBUG_PROPERTY_IF_CHANGED(debug, properties, AnimationURL, animationURL, ""); diff --git a/libraries/entities/src/EntityItemPropertiesDefaults.h b/libraries/entities/src/EntityItemPropertiesDefaults.h index 0cdfe73040..a4aca0b344 100644 --- a/libraries/entities/src/EntityItemPropertiesDefaults.h +++ b/libraries/entities/src/EntityItemPropertiesDefaults.h @@ -27,6 +27,7 @@ const QString ENTITY_ITEM_DEFAULT_USER_DATA = QString(""); const QString ENTITY_ITEM_DEFAULT_MARKETPLACE_ID = QString(""); const QUuid ENTITY_ITEM_DEFAULT_SIMULATOR_ID = QUuid(); +const float ENTITY_ITEM_DEFAULT_ALPHA = 1.0f; const float ENTITY_ITEM_DEFAULT_LOCAL_RENDER_ALPHA = 1.0f; const float ENTITY_ITEM_DEFAULT_GLOW_LEVEL = 0.0f; const bool ENTITY_ITEM_DEFAULT_VISIBLE = true; diff --git a/libraries/entities/src/EntityPropertyFlags.h b/libraries/entities/src/EntityPropertyFlags.h index 7ea471d851..bfef04ab57 100644 --- a/libraries/entities/src/EntityPropertyFlags.h +++ b/libraries/entities/src/EntityPropertyFlags.h @@ -151,6 +151,8 @@ enum EntityPropertyList { PROP_RADIUS_START, PROP_RADIUS_FINISH, + PROP_ALPHA, // Supported by some derived classes + //////////////////////////////////////////////////////////////////////////////////////////////////// // ATTENTION: add new properties to end of list just ABOVE this line PROP_AFTER_LAST_ITEM, diff --git a/libraries/entities/src/ParticleEffectEntityItem.cpp b/libraries/entities/src/ParticleEffectEntityItem.cpp index ff534ff03b..0f8df954bf 100644 --- a/libraries/entities/src/ParticleEffectEntityItem.cpp +++ b/libraries/entities/src/ParticleEffectEntityItem.cpp @@ -85,6 +85,7 @@ ParticleEffectEntityItem::ParticleEffectEntityItem(const EntityItemID& entityIte _textures(DEFAULT_TEXTURES), _texturesChangedFlag(false), _shapeType(SHAPE_TYPE_NONE), + _alpha(ENTITY_ITEM_DEFAULT_ALPHA), _particleLifetimes(DEFAULT_MAX_PARTICLES, 0.0f), _particlePositions(DEFAULT_MAX_PARTICLES, glm::vec3(0.0f, 0.0f, 0.0f)), _particleVelocities(DEFAULT_MAX_PARTICLES, glm::vec3(0.0f, 0.0f, 0.0f)), @@ -93,6 +94,7 @@ ParticleEffectEntityItem::ParticleEffectEntityItem(const EntityItemID& entityIte _radiusStarts(DEFAULT_MAX_PARTICLES, DEFAULT_PARTICLE_RADIUS), _radiusMiddles(DEFAULT_MAX_PARTICLES, DEFAULT_PARTICLE_RADIUS), _radiusFinishes(DEFAULT_MAX_PARTICLES, DEFAULT_PARTICLE_RADIUS), + _particleAlphas(DEFAULT_MAX_PARTICLES, ENTITY_ITEM_DEFAULT_ALPHA), _timeUntilNextEmit(0.0f), _particleHeadIndex(0), _particleTailIndex(0), @@ -155,6 +157,7 @@ EntityItemProperties ParticleEffectEntityItem::getProperties() const { EntityItemProperties properties = EntityItem::getProperties(); // get the properties from our base class COPY_ENTITY_PROPERTY_TO_PROPERTIES(color, getXColor); + COPY_ENTITY_PROPERTY_TO_PROPERTIES(alpha, getAlpha); COPY_ENTITY_PROPERTY_TO_PROPERTIES(animationIsPlaying, getAnimationIsPlaying); COPY_ENTITY_PROPERTY_TO_PROPERTIES(animationFrameIndex, getAnimationFrameIndex); COPY_ENTITY_PROPERTY_TO_PROPERTIES(animationFPS, getAnimationFPS); @@ -181,6 +184,7 @@ bool ParticleEffectEntityItem::setProperties(const EntityItemProperties& propert bool somethingChanged = EntityItem::setProperties(properties); // set the properties in our base class SET_ENTITY_PROPERTY_FROM_PROPERTIES(color, setColor); + SET_ENTITY_PROPERTY_FROM_PROPERTIES(alpha, setAlpha); SET_ENTITY_PROPERTY_FROM_PROPERTIES(animationIsPlaying, setAnimationIsPlaying); SET_ENTITY_PROPERTY_FROM_PROPERTIES(animationFrameIndex, setAnimationFrameIndex); SET_ENTITY_PROPERTY_FROM_PROPERTIES(animationFPS, setAnimationFPS); @@ -266,10 +270,11 @@ int ParticleEffectEntityItem::readEntitySubclassDataFromBuffer(const unsigned ch READ_ENTITY_PROPERTY(PROP_TEXTURES, QString, setTextures); } - if (args.bitstreamVersion >= VERSION_ENTITIES_PARTICLE_RADIUS_ADDITIONS) { + if (args.bitstreamVersion >= VERSION_ENTITIES_PARTICLE_RADIUS_PROPERTIES) { READ_ENTITY_PROPERTY(PROP_RADIUS_SPREAD, float, setRadiusSpread); READ_ENTITY_PROPERTY(PROP_RADIUS_START, float, setRadiusStart); READ_ENTITY_PROPERTY(PROP_RADIUS_FINISH, float, setRadiusFinish); + READ_ENTITY_PROPERTY(PROP_ALPHA, float, setAlpha); } return bytesRead; @@ -298,6 +303,7 @@ EntityPropertyFlags ParticleEffectEntityItem::getEntityProperties(EncodeBitstrea requestedProperties += PROP_RADIUS_SPREAD; requestedProperties += PROP_RADIUS_START; requestedProperties += PROP_RADIUS_FINISH; + requestedProperties += PROP_ALPHA; return requestedProperties; } @@ -329,6 +335,7 @@ void ParticleEffectEntityItem::appendSubclassData(OctreePacketData* packetData, APPEND_ENTITY_PROPERTY(PROP_RADIUS_SPREAD, getRadiusSpread()); APPEND_ENTITY_PROPERTY(PROP_RADIUS_START, getRadiusStart()); APPEND_ENTITY_PROPERTY(PROP_RADIUS_FINISH, getRadiusFinish()); + APPEND_ENTITY_PROPERTY(PROP_ALPHA, getAlpha()); } bool ParticleEffectEntityItem::isAnimatingSomething() const { @@ -584,6 +591,9 @@ void ParticleEffectEntityItem::stepSimulation(float deltaTime) { integrateParticle(i, timeLeftInFrame); extendBounds(_particlePositions[i]); + // Alpha + _particleAlphas[i] = _alpha; + _particleTailIndex = (_particleTailIndex + 1) % _maxParticles; // overflow! move head forward by one. @@ -612,6 +622,7 @@ void ParticleEffectEntityItem::setMaxParticles(quint32 maxParticles) { _radiusStarts.resize(_maxParticles); _radiusMiddles.resize(_maxParticles); _radiusFinishes.resize(_maxParticles); + _particleAlphas.resize(_maxParticles); // effectively clear all particles and start emitting new ones from scratch. _particleHeadIndex = 0; diff --git a/libraries/entities/src/ParticleEffectEntityItem.h b/libraries/entities/src/ParticleEffectEntityItem.h index cac0af39a4..81d88e5a41 100644 --- a/libraries/entities/src/ParticleEffectEntityItem.h +++ b/libraries/entities/src/ParticleEffectEntityItem.h @@ -56,6 +56,9 @@ public: _color[BLUE_INDEX] = value.blue; } + void setAlpha(float alpha) { _alpha = alpha; } + float getAlpha() const { return _alpha; } + void updateShapeType(ShapeType type); virtual ShapeType getShapeType() const { return _shapeType; } @@ -160,6 +163,7 @@ protected: // the properties of this entity rgbColor _color; + float _alpha; quint32 _maxParticles; float _lifespan; float _emitRate; @@ -187,6 +191,7 @@ protected: QVector _radiusStarts; QVector _radiusMiddles; QVector _radiusFinishes; + QVector _particleAlphas; float _timeUntilNextEmit; diff --git a/libraries/networking/src/udt/PacketHeaders.cpp b/libraries/networking/src/udt/PacketHeaders.cpp index 8ac183da6f..3a2013d367 100644 --- a/libraries/networking/src/udt/PacketHeaders.cpp +++ b/libraries/networking/src/udt/PacketHeaders.cpp @@ -67,7 +67,7 @@ PacketVersion versionForPacketType(PacketType::Value packetType) { case EntityAdd: case EntityEdit: case EntityData: - return VERSION_ENTITIES_PARTICLE_RADIUS_ADDITIONS; + return VERSION_ENTITIES_PARTICLE_ALPHA_PROPERTIES; case AvatarData: return 13; default: diff --git a/libraries/networking/src/udt/PacketHeaders.h b/libraries/networking/src/udt/PacketHeaders.h index a68d3adbad..e63f7f410b 100644 --- a/libraries/networking/src/udt/PacketHeaders.h +++ b/libraries/networking/src/udt/PacketHeaders.h @@ -145,6 +145,7 @@ const PacketVersion VERSION_ENTITIES_POLYLINE = 37; const PacketVersion VERSION_OCTREE_CENTERED_ORIGIN = 38; const PacketVersion VERSION_ENTITIES_PARTICLE_MODIFICATIONS = 39; const PacketVersion VERSION_ENTITIES_POLYVOX_NEIGHBORS = 40; -const PacketVersion VERSION_ENTITIES_PARTICLE_RADIUS_ADDITIONS = 41; +const PacketVersion VERSION_ENTITIES_PARTICLE_RADIUS_PROPERTIES = 41; +const PacketVersion VERSION_ENTITIES_PARTICLE_ALPHA_PROPERTIES = 42; #endif // hifi_PacketHeaders_h From 8d85309925fd5d04b06dcc664bc268a628b26e82 Mon Sep 17 00:00:00 2001 From: David Rowe Date: Sat, 5 Sep 2015 10:50:05 -0700 Subject: [PATCH 19/37] Use cubic interpolation instead of cosine --- .../entities/src/ParticleEffectEntityItem.cpp | 29 ++++++++++++++----- .../entities/src/ParticleEffectEntityItem.h | 2 +- 2 files changed, 22 insertions(+), 9 deletions(-) diff --git a/libraries/entities/src/ParticleEffectEntityItem.cpp b/libraries/entities/src/ParticleEffectEntityItem.cpp index 0f8df954bf..1b58e92ef1 100644 --- a/libraries/entities/src/ParticleEffectEntityItem.cpp +++ b/libraries/entities/src/ParticleEffectEntityItem.cpp @@ -507,11 +507,22 @@ QString ParticleEffectEntityItem::getAnimationSettings() const { void ParticleEffectEntityItem::updateRadius(quint32 index) { float age = 2.0f * (1.0f - _particleLifetimes[index] / _lifespan); // 0.0 .. 2.0 + float y0, y1, y2, y3; + if (age < 1.0f) { - _particleRadiuses[index] = cosineInterpolate(_radiusStarts[index], _radiusMiddles[index], age); + y1 = _radiusStarts[index]; + y2 = _radiusMiddles[index]; + y3 = _radiusFinishes[index]; + y0 = 2.0f * y1 - y2; } else { - _particleRadiuses[index] = cosineInterpolate(_radiusMiddles[index], _radiusFinishes[index], age - 1.0f); + y0 = _radiusStarts[index]; + y1 = _radiusMiddles[index]; + y2 = _radiusFinishes[index]; + 2.0f * y2 - y1; + age -= 1.0f; } + + _particleRadiuses[index] = cubicInterpolate(y0, y1, y2, y3, age); } void ParticleEffectEntityItem::extendBounds(const glm::vec3& point) { @@ -640,11 +651,13 @@ quint32 ParticleEffectEntityItem::getLivingParticleCount() const { } } -float ParticleEffectEntityItem::cosineInterpolate(float y1, float y2, float u) { - if (y1 == y2) { - return y1; - } +float ParticleEffectEntityItem::cubicInterpolate(float y0, float y1, float y2, float y3, float u) { + float a0, a1, a2, a3, uu; + uu = u * u; + a0 = y3 - y2 - y0 + y1; + a1 = y0 - y1 - a0; + a2 = y2 - y0; + a3 = y1; - float uy = (1 - cos(u * PI)) / 2; - return y1 * (1 - uy) + y2 * uy; + return (a0 * u * uu + a1 * uu + a2 * u + a3); } diff --git a/libraries/entities/src/ParticleEffectEntityItem.h b/libraries/entities/src/ParticleEffectEntityItem.h index 81d88e5a41..5d751d7b1c 100644 --- a/libraries/entities/src/ParticleEffectEntityItem.h +++ b/libraries/entities/src/ParticleEffectEntityItem.h @@ -205,7 +205,7 @@ protected: glm::vec3 _particleMinBound; private: - float cosineInterpolate(float y1, float y2, float u); + float cubicInterpolate(float y0, float y1, float y2, float y3, float u); }; #endif // hifi_ParticleEffectEntityItem_h From 8b296f53e612a95be36467c8c2c83693b5ccee4d Mon Sep 17 00:00:00 2001 From: David Rowe Date: Sat, 5 Sep 2015 11:13:48 -0700 Subject: [PATCH 20/37] Short-circuit radius values and interpolation when can --- .../entities/src/ParticleEffectEntityItem.cpp | 48 +++++++++++-------- 1 file changed, 29 insertions(+), 19 deletions(-) diff --git a/libraries/entities/src/ParticleEffectEntityItem.cpp b/libraries/entities/src/ParticleEffectEntityItem.cpp index 1b58e92ef1..b3859f10f0 100644 --- a/libraries/entities/src/ParticleEffectEntityItem.cpp +++ b/libraries/entities/src/ParticleEffectEntityItem.cpp @@ -506,23 +506,27 @@ QString ParticleEffectEntityItem::getAnimationSettings() const { } void ParticleEffectEntityItem::updateRadius(quint32 index) { - float age = 2.0f * (1.0f - _particleLifetimes[index] / _lifespan); // 0.0 .. 2.0 - float y0, y1, y2, y3; - - if (age < 1.0f) { - y1 = _radiusStarts[index]; - y2 = _radiusMiddles[index]; - y3 = _radiusFinishes[index]; - y0 = 2.0f * y1 - y2; + if (_radiusStarts[index] == _radiusMiddles[index] && _radiusMiddles[index] == _radiusFinishes[index]) { + _particleRadiuses[index] = _radiusMiddles[index]; } else { - y0 = _radiusStarts[index]; - y1 = _radiusMiddles[index]; - y2 = _radiusFinishes[index]; - 2.0f * y2 - y1; - age -= 1.0f; - } + float age = 2.0f * (1.0f - _particleLifetimes[index] / _lifespan); // 0.0 .. 2.0 + float y0, y1, y2, y3; - _particleRadiuses[index] = cubicInterpolate(y0, y1, y2, y3, age); + if (age < 1.0f) { + y1 = _radiusStarts[index]; + y2 = _radiusMiddles[index]; + y3 = _radiusFinishes[index]; + y0 = 2.0f * y1 - y2; + } else { + y0 = _radiusStarts[index]; + y1 = _radiusMiddles[index]; + y2 = _radiusFinishes[index]; + y3 = 2.0f * y2 - y1; + age -= 1.0f; + } + + _particleRadiuses[index] = cubicInterpolate(y0, y1, y2, y3, age); + } } void ParticleEffectEntityItem::extendBounds(const glm::vec3& point) { @@ -577,10 +581,16 @@ void ParticleEffectEntityItem::stepSimulation(float deltaTime) { _particleLifetimes[i] = _lifespan; // Radius - float spreadMultiplier = 1.0 + (2.0f * randFloat() - 1) * _radiusSpread / _particleRadius; - _radiusStarts[i] = spreadMultiplier * getRadiusStart(); - _radiusMiddles[i] = spreadMultiplier * _particleRadius; - _radiusFinishes[i] = spreadMultiplier * getRadiusFinish(); + if (_radiusSpread == 0.0f) { + _radiusStarts[i] = getRadiusStart(); + _radiusMiddles[i] =_particleRadius; + _radiusFinishes[i] = getRadiusFinish(); + } else { + float spreadMultiplier = 1.0 + (2.0f * randFloat() - 1) * _radiusSpread / _particleRadius; + _radiusStarts[i] = spreadMultiplier * getRadiusStart(); + _radiusMiddles[i] = spreadMultiplier * _particleRadius; + _radiusFinishes[i] = spreadMultiplier * getRadiusFinish(); + } updateRadius(i); // Velocity and acceleration From e8435b6218c6e9ce61a5a079c6b486392a9359fd Mon Sep 17 00:00:00 2001 From: Brad Davis Date: Wed, 2 Sep 2015 23:35:52 -0700 Subject: [PATCH 21/37] Procedural rendering for box entities --- examples/shaders/grid.fs | 102 ++++++ examples/shaders/hex.fs | 48 +++ examples/shaders/test.fs | 48 +++ examples/toys/proceduralEdit.js | 12 + examples/toys/proceduralEdit/ui.html | 29 ++ .../src/RenderableBoxEntityItem.cpp | 21 +- .../src/RenderableBoxEntityItem.h | 4 +- .../src/RenderableProceduralItem.cpp | 142 ++++++++ .../src/RenderableProceduralItem.h | 51 +++ .../src/RenderableProceduralItemShader.h | 329 ++++++++++++++++++ .../src/RenderableSphereEntityItem.cpp | 30 +- .../src/RenderableSphereEntityItem.h | 5 +- libraries/entities/src/EntityItem.h | 2 +- libraries/render-utils/src/ShaderCache.cpp | 32 ++ libraries/render-utils/src/ShaderCache.h | 34 ++ 15 files changed, 875 insertions(+), 14 deletions(-) create mode 100644 examples/shaders/grid.fs create mode 100644 examples/shaders/hex.fs create mode 100644 examples/shaders/test.fs create mode 100644 examples/toys/proceduralEdit.js create mode 100644 examples/toys/proceduralEdit/ui.html create mode 100644 libraries/entities-renderer/src/RenderableProceduralItem.cpp create mode 100644 libraries/entities-renderer/src/RenderableProceduralItem.h create mode 100644 libraries/entities-renderer/src/RenderableProceduralItemShader.h create mode 100644 libraries/render-utils/src/ShaderCache.cpp create mode 100644 libraries/render-utils/src/ShaderCache.h diff --git a/examples/shaders/grid.fs b/examples/shaders/grid.fs new file mode 100644 index 0000000000..57dcb7ad5d --- /dev/null +++ b/examples/shaders/grid.fs @@ -0,0 +1,102 @@ +#line 2 + +// https://www.shadertoy.com/view/lss3WS + +// srtuss, 2013 + +// collecting some design ideas for a new game project. +// no raymarching is used. + +// if i could add a custom soundtrack, it'd use this one (essential for desired sensation) +// http://www.youtube.com/watch?v=1uFAu65tZpo + +//#define GREEN_VERSION + +// ** improved camera shaking +// ** cleaned up code +// ** added stuff to the gates + +// srtuss, 2013 +float time = iGlobalTime; + +// some noise functions for fast developing +float rand11(float p) { + return fract(sin(p * 591.32) * 43758.5357); +} + +float rand12(vec2 p) { + return fract(sin(dot(p.xy, vec2(12.9898, 78.233))) * 43758.5357); +} + +vec2 rand21(float p) { + return fract(vec2(sin(p * 591.32), cos(p * 391.32))); +} + +vec2 rand22(in vec2 p) +{ + return fract(vec2(sin(p.x * 591.32 + p.y * 154.077), + cos(p.x * 391.32 + p.y * 49.077))); +} + +vec3 voronoi(in vec2 x) { + vec2 n = floor(x); // grid cell id + vec2 f = fract(x);// grid internal position + vec2 mg;// shortest distance... + vec2 mr;// ..and second shortest distance + float md = 8.0, md2 = 8.0; + for(int j = -1; j <= 1; j ++) + { + for(int i = -1; i <= 1; i ++) + { + vec2 g = vec2(float(i), float(j)); // cell id + vec2 o = rand22(n + g);// offset to edge point + vec2 r = g + o - f; + + float d = max(abs(r.x), abs(r.y));// distance to the edge + + if(d < md) + { md2 = md; md = d; mr = r; mg = g;} + else if(d < md2) + { md2 = d;} + } + } + return vec3(n + mg, md2 - md); +} + + +vec4 getProceduralColor() { + float inten = 0.0; + vec3 its; + float v, g; + // voronoi floor layers + for (int i = 0; i < 4; i++) { + float layer = float(i); + vec2 pos = _position.xz * 100.0; + if (i == 2) { + pos.x += time * 0.05; + } else if (i == 1) { + pos.y += time * 0.07; + } + vec3 vo = voronoi(pos + 8.0 * rand21(float(i))); + + v = exp(-100.0 * (vo.z - 0.02)); + float fx = 0.0; + + // add some special fx to lowest layer + if (i == 3) { + float crd = 0.0; //fract(time * 0.2) * 50.0 - 25.0; + float fxi = cos(vo.x * 0.2 + time * 0.5); //abs(crd - vo.x); + fx = clamp(smoothstep(0.9, 1.0, fxi), 0.0, 0.9) * 1.0 * rand12(vo.xy); + fx *= exp(-3.0 * vo.z) * 2.0; + } + inten += v * 0.1 + fx; + } + inten *= 0.4 + (sin(time) * 0.5 + 0.5) * 0.6; + vec3 cr = vec3(0.15, 2.0, 9.0); + vec3 cg = vec3(2.0, 0.15, 9.0); + vec3 cb = vec3(9.0, 2.0, 0.15); + vec3 ct = vec3(9.0, 0.25, 0.3); + vec3 cy = vec3(0.25, 0.3, 9.3); + vec3 col = pow(vec3(inten), 1.5 * cy); + return vec4(col, 1.0); +} diff --git a/examples/shaders/hex.fs b/examples/shaders/hex.fs new file mode 100644 index 0000000000..2264d4bf05 --- /dev/null +++ b/examples/shaders/hex.fs @@ -0,0 +1,48 @@ +#line 2 +// Created by inigo quilez - iq/2014 +// License Creative Commons Attribution-NonCommercial-ShareAlike 3.0 Unported License. + +// { 2d cell id, distance to border, distnace to center ) +vec4 hexagon(vec2 p) { + vec2 q = vec2(p.x * 2.0 * 0.5773503, p.y + p.x * 0.5773503); + + vec2 pi = floor(q); + vec2 pf = fract(q); + + float v = mod(pi.x + pi.y, 3.0); + + float ca = step(1.0, v); + float cb = step(2.0, v); + vec2 ma = step(pf.xy, pf.yx); + + // distance to borders + float e = dot(ma, + 1.0 - pf.yx + ca * (pf.x + pf.y - 1.0) + cb * (pf.yx - 2.0 * pf.xy)); + + // distance to center + p = vec2(q.x + floor(0.5 + p.y / 1.5), 4.0 * p.y / 3.0) * 0.5 + 0.5; + float f = length((fract(p) - 0.5) * vec2(1.0, 0.85)); + + return vec4(pi + ca - cb * ma, e, f); +} + + +float hash1(vec2 p) { + float n = dot(p, vec2(127.1, 311.7)); + return fract(sin(n) * 43758.5453); +} + +vec4 getProceduralColor() { + vec2 uv = _position.xz + 0.5; + vec2 pos = _position.xz * iWorldScale.xz; + // gray + vec4 h = hexagon(8.0 * pos + 0.5); + float n = snoise(vec3(0.3 * h.xy + iGlobalTime * 0.1, iGlobalTime)); + vec3 col = 0.15 + 0.15 * hash1(h.xy + 1.2) * vec3(1.0); + col *= smoothstep(0.10, 0.11, h.z); + col *= smoothstep(0.10, 0.11, h.w); + col *= 1.0 + 0.15 * sin(40.0 * h.z); + col *= 0.75 + 0.5 * h.z * n; + col *= pow(16.0 * uv.x * (1.0 - uv.x) * uv.y * (1.0 - uv.y), 0.1); + return vec4(col, 1.0); +} diff --git a/examples/shaders/test.fs b/examples/shaders/test.fs new file mode 100644 index 0000000000..07db8f409e --- /dev/null +++ b/examples/shaders/test.fs @@ -0,0 +1,48 @@ +#line 2 +// Created by inigo quilez - iq/2014 +// License Creative Commons Attribution-NonCommercial-ShareAlike 3.0 Unported License. + +// { 2d cell id, distance to border, distnace to center ) +vec4 hexagon(vec2 p) { + vec2 q = vec2(p.x * 2.0 * 0.5773503, p.y + p.x * 0.5773503); + + vec2 pi = floor(q); + vec2 pf = fract(q); + + float v = mod(pi.x + pi.y, 3.0); + + float ca = step(1.0, v); + float cb = step(2.0, v); + vec2 ma = step(pf.xy, pf.yx); + + // distance to borders + float e = dot(ma, + 1.0 - pf.yx + ca * (pf.x + pf.y - 1.0) + cb * (pf.yx - 2.0 * pf.xy)); + + // distance to center + p = vec2(q.x + floor(0.5 + p.y / 1.5), 4.0 * p.y / 3.0) * 0.5 + 0.5; + float f = length((fract(p) - 0.5) * vec2(1.0, 0.85)); + + return vec4(pi + ca - cb * ma, e, f); +} + + +float hash1(vec2 p) { + float n = dot(p, vec2(127.1, 311.7)); + return fract(sin(n) * 43758.5453); +} + +vec4 getProceduralColor() { + vec2 uv = _position.xz + 0.5; + vec2 pos = _position.xz * 40.0; + // gray + vec4 h = hexagon(8.0 * pos + 0.5); + float n = snoise(vec3(0.3 * h.xy + iGlobalTime * 0.1, iGlobalTime)); + vec3 col = 0.15 + 0.15 * hash1(h.xy + 1.2) * vec3(1.0); + col *= smoothstep(0.10, 0.11, h.z); + col *= smoothstep(0.10, 0.11, h.w); + col *= 1.0 + 0.15 * sin(40.0 * h.z); + col *= 0.75 + 0.5 * h.z * n; + col *= pow(16.0 * uv.x * (1.0 - uv.x) * uv.y * (1.0 - uv.y), 0.1); + return vec4(col, 1.0); +} diff --git a/examples/toys/proceduralEdit.js b/examples/toys/proceduralEdit.js new file mode 100644 index 0000000000..0792344063 --- /dev/null +++ b/examples/toys/proceduralEdit.js @@ -0,0 +1,12 @@ +Script.include("../toys/magBalls/constants.js"); + +OmniToolModuleType = "ProceduralEdit" + +OmniToolModules.ProceduralEdit = function(omniTool, entityId) { + this.omniTool = omniTool; + this.entityId = entityId; + + var window = new WebWindow('Procedural', "file:///C:/Users/bdavis/Git/hifi/examples/toys/proceduralEdit/ui.html", 640, 480, false); + window.setVisible(true); + +} diff --git a/examples/toys/proceduralEdit/ui.html b/examples/toys/proceduralEdit/ui.html new file mode 100644 index 0000000000..04d4417912 --- /dev/null +++ b/examples/toys/proceduralEdit/ui.html @@ -0,0 +1,29 @@ + + + +ACE in Action + + + + +

+ + + + + \ No newline at end of file diff --git a/libraries/entities-renderer/src/RenderableBoxEntityItem.cpp b/libraries/entities-renderer/src/RenderableBoxEntityItem.cpp index 774a371726..f73b99d059 100644 --- a/libraries/entities-renderer/src/RenderableBoxEntityItem.cpp +++ b/libraries/entities-renderer/src/RenderableBoxEntityItem.cpp @@ -16,6 +16,7 @@ #include #include +#include #include #include @@ -25,15 +26,29 @@ EntityItemPointer RenderableBoxEntityItem::factory(const EntityItemID& entityID, return std::make_shared(entityID, properties); } +void RenderableBoxEntityItem::setUserData(const QString& value) { + BoxEntityItem::setUserData(value); + _procedural.reset(); +} + void RenderableBoxEntityItem::render(RenderArgs* args) { PerformanceTimer perfTimer("RenderableBoxEntityItem::render"); Q_ASSERT(getType() == EntityTypes::Box); - glm::vec4 cubeColor(toGlm(getXColor()), getLocalRenderAlpha()); - Q_ASSERT(args->_batch); gpu::Batch& batch = *args->_batch; batch.setModelTransform(getTransformToCenter()); // we want to include the scale as well - DependencyManager::get()->renderSolidCube(batch, 1.0f, cubeColor); + + if (!_procedural) { + _procedural.reset(new ProceduralInfo(this)); + } + + if (_procedural->ready()) { + _procedural->prepare(batch); + DependencyManager::get()->renderUnitCube(batch); + } else { + glm::vec4 cubeColor(toGlm(getXColor()), getLocalRenderAlpha()); + DependencyManager::get()->renderSolidCube(batch, 1.0f, cubeColor); + } RenderableDebugableEntityItem::render(this, args); }; diff --git a/libraries/entities-renderer/src/RenderableBoxEntityItem.h b/libraries/entities-renderer/src/RenderableBoxEntityItem.h index b14da9ee22..e317163683 100644 --- a/libraries/entities-renderer/src/RenderableBoxEntityItem.h +++ b/libraries/entities-renderer/src/RenderableBoxEntityItem.h @@ -14,8 +14,9 @@ #include #include "RenderableEntityItem.h" +#include "RenderableProceduralItem.h" -class RenderableBoxEntityItem : public BoxEntityItem { +class RenderableBoxEntityItem : public BoxEntityItem, RenderableProceduralItem { public: static EntityItemPointer factory(const EntityItemID& entityID, const EntityItemProperties& properties); @@ -24,6 +25,7 @@ public: { } virtual void render(RenderArgs* args); + virtual void setUserData(const QString& value); SIMPLE_RENDERABLE() }; diff --git a/libraries/entities-renderer/src/RenderableProceduralItem.cpp b/libraries/entities-renderer/src/RenderableProceduralItem.cpp new file mode 100644 index 0000000000..6b0a3db1da --- /dev/null +++ b/libraries/entities-renderer/src/RenderableProceduralItem.cpp @@ -0,0 +1,142 @@ +// +// Created by Bradley Austin Davis on 2015/09/05 +// Copyright 2013-2015 High Fidelity, Inc. +// +// Distributed under the Apache License, Version 2.0. +// See the accompanying file LICENSE or http://www.apache.org/licenses/LICENSE-2.0.html +// + +#include "RenderableProceduralItem.h" + +#include +#include +#include +#include + +#include +#include +#include +#include +#include + +#include "RenderableProceduralItemShader.h" +#include "../render-utils/simple_vert.h" + +static const char* const UNIFORM_TIME_NAME= "iGlobalTime"; +static const char* const UNIFORM_SCALE_NAME = "iWorldScale"; +static const QString PROCEDURAL_USER_DATA_KEY = "ProceduralEntity"; + +RenderableProceduralItem::ProceduralInfo::ProceduralInfo(EntityItem* entity) : _entity(entity) { + QJsonObject userData; + { + const QString& userDataJson = entity->getUserData(); + if (userDataJson.isEmpty()) { + return; + } + QJsonParseError parseError; + auto doc = QJsonDocument::fromJson(userDataJson.toUtf8(), &parseError); + if (parseError.error != QJsonParseError::NoError) { + return; + } + qDebug() << "Found JSON user data: " << userDataJson; + userData = doc.object(); + } + + // Example + //{ + // "ProceduralEntity": { + // "shaderUrl": "file:///C:/Users/bdavis/Git/hifi/examples/shaders/test.fs", + // "color" : "#FFFFFF" + // } + //} + + auto proceduralData = userData[PROCEDURAL_USER_DATA_KEY]; + if (proceduralData.isNull()) { + return; + } + + auto proceduralDataObject = proceduralData.toObject(); + foreach(auto key, proceduralDataObject) { + qDebug() << key; + } + qDebug() << "Procedural data object " << proceduralDataObject; + QString shaderUrl = proceduralDataObject["shaderUrl"].toString(); + qDebug() << "Shader url: " << shaderUrl; + _shaderUrl = QUrl(shaderUrl); + if (!_shaderUrl.isValid()) { + return; + } + + if (_shaderUrl.isLocalFile()) { + _shaderPath = _shaderUrl.toLocalFile(); + qDebug() << "Shader path: " << _shaderPath; + if (!QFile(_shaderPath).exists()) { + return; + } + } else { + _networkShader = ShaderCache::instance().getShader(_shaderUrl); + } + + _enabled = true; +} + +bool RenderableProceduralItem::ProceduralInfo::ready() { + if (!_enabled) { + return false; + } + + if (!_shaderPath.isEmpty()) { + return true; + } + + if (_networkShader) { + return _networkShader->isLoaded(); + } + + return false; +} + +void RenderableProceduralItem::ProceduralInfo::prepare(gpu::Batch& batch) { + if (_shaderUrl.isLocalFile()) { + auto lastModified = QFileInfo(_shaderPath).lastModified().toMSecsSinceEpoch(); + if (lastModified > _shaderModified) { + QFile file(_shaderPath); + file.open(QIODevice::ReadOnly); + _shaderSource = QTextStream(&file).readAll(); + _pipelineDirty = true; + _shaderModified = lastModified; + } + } else if (_networkShader && _networkShader->isLoaded()) { + _shaderSource = _networkShader->_source; + } + + if (!_pipeline || _pipelineDirty) { + _pipelineDirty = false; + if (!_vertexShader) { + _vertexShader = gpu::ShaderPointer(gpu::Shader::createVertex(std::string(simple_vert))); + } + QString framentShaderSource = SHADER_TEMPLATE.arg(_shaderSource); + _fragmentShader = gpu::ShaderPointer(gpu::Shader::createPixel(std::string(framentShaderSource.toLocal8Bit().data()))); + _shader = gpu::ShaderPointer(gpu::Shader::createProgram(_vertexShader, _fragmentShader)); + gpu::Shader::BindingSet slotBindings; + slotBindings.insert(gpu::Shader::Binding(std::string("normalFittingMap"), DeferredLightingEffect::NORMAL_FITTING_MAP_SLOT)); + gpu::Shader::makeProgram(*_shader, slotBindings); + auto state = std::make_shared(); + state->setCullMode(gpu::State::CULL_NONE); + state->setDepthTest(true, true, gpu::LESS_EQUAL); + state->setBlendFunction(false, + gpu::State::SRC_ALPHA, gpu::State::BLEND_OP_ADD, gpu::State::INV_SRC_ALPHA, + gpu::State::FACTOR_ALPHA, gpu::State::BLEND_OP_ADD, gpu::State::ONE); + _pipeline = gpu::PipelinePointer(gpu::Pipeline::create(_shader, state)); + _timeSlot = _shader->getUniforms().findLocation(UNIFORM_TIME_NAME); + _scaleSlot = _shader->getUniforms().findLocation(UNIFORM_SCALE_NAME); + _start = usecTimestampNow(); + } + + batch.setPipeline(_pipeline); + float time = (float)((usecTimestampNow() - _start) / USECS_PER_MSEC) / MSECS_PER_SECOND; + batch._glUniform1f(_timeSlot, time); + auto scale = _entity->getDimensions(); + batch._glUniform3f(_scaleSlot, scale.x, scale.y, scale.z); + batch.setResourceTexture(DeferredLightingEffect::NORMAL_FITTING_MAP_SLOT, DependencyManager::get()->getNormalFittingTexture()); +} diff --git a/libraries/entities-renderer/src/RenderableProceduralItem.h b/libraries/entities-renderer/src/RenderableProceduralItem.h new file mode 100644 index 0000000000..e42cc81b64 --- /dev/null +++ b/libraries/entities-renderer/src/RenderableProceduralItem.h @@ -0,0 +1,51 @@ +// +// Created by Bradley Austin Davis on 2015/09/05 +// Copyright 2013-2015 High Fidelity, Inc. +// +// Distributed under the Apache License, Version 2.0. +// See the accompanying file LICENSE or http://www.apache.org/licenses/LICENSE-2.0.html +// + +#pragma once +#ifndef hifi_RenderableProcedrualItem_h +#define hifi_RenderableProcedrualItem_h + +#include +#include +#include + +#include +#include +#include +#include + +class EntityItem; + +class RenderableProceduralItem { +protected: + struct ProceduralInfo { + ProceduralInfo(EntityItem* entity); + bool ready(); + void prepare(gpu::Batch& batch); + + bool _enabled{ false }; + gpu::PipelinePointer _pipeline; + gpu::ShaderPointer _vertexShader; + gpu::ShaderPointer _fragmentShader; + gpu::ShaderPointer _shader; + QString _shaderSource; + QString _shaderPath; + QUrl _shaderUrl; + quint64 _shaderModified{ 0 }; + bool _pipelineDirty{ true }; + int32_t _timeSlot{ gpu::Shader::INVALID_LOCATION }; + int32_t _scaleSlot{ gpu::Shader::INVALID_LOCATION }; + uint64_t _start{ 0 }; + NetworkShaderPointer _networkShader; + EntityItem* _entity; + }; + + QSharedPointer _procedural; +}; + +#endif diff --git a/libraries/entities-renderer/src/RenderableProceduralItemShader.h b/libraries/entities-renderer/src/RenderableProceduralItemShader.h new file mode 100644 index 0000000000..82ba91cc42 --- /dev/null +++ b/libraries/entities-renderer/src/RenderableProceduralItemShader.h @@ -0,0 +1,329 @@ +// +// Created by Bradley Austin Davis on 2015/09/05 +// Copyright 2013-2015 High Fidelity, Inc. +// +// Distributed under the Apache License, Version 2.0. +// See the accompanying file LICENSE or http://www.apache.org/licenses/LICENSE-2.0.html +// + +// Shader includes portions of webgl-noise: +// Description : Array and textureless GLSL 2D/3D/4D simplex +// noise functions. +// Author : Ian McEwan, Ashima Arts. +// Maintainer : ijm +// Lastmod : 20110822 (ijm) +// License : Copyright (C) 2011 Ashima Arts. All rights reserved. +// Distributed under the MIT License. See LICENSE file. +// https://github.com/ashima/webgl-noise +// +const QString SHADER_TEMPLATE = R"SCRIBE(#version 410 core +layout(location = 0) out vec4 _fragColor0; +layout(location = 1) out vec4 _fragColor1; +layout(location = 2) out vec4 _fragColor2; + +// the glow intensity +uniform float glowIntensity; + +// the alpha threshold +uniform float alphaThreshold; + +uniform sampler2D normalFittingMap; + +vec3 bestFitNormal(vec3 normal) { + vec3 absNorm = abs(normal); + float maxNAbs = max(absNorm.z, max(absNorm.x, absNorm.y)); + + vec2 texcoord = (absNorm.z < maxNAbs ? + (absNorm.y < maxNAbs ? absNorm.yz : absNorm.xz) : + absNorm.xy); + texcoord = (texcoord.x < texcoord.y ? texcoord.yx : texcoord.xy); + texcoord.y /= texcoord.x; + vec3 cN = normal / maxNAbs; + float fittingScale = texture(normalFittingMap, texcoord).a; + cN *= fittingScale; + return (cN * 0.5 + 0.5); +} + + +const vec3 DEFAULT_SPECULAR = vec3(0.1); +const float DEFAULT_SHININESS = 10; + +void packDeferredFragmentLightmap(vec3 normal, float alpha, vec3 diffuse, vec3 specular, float shininess, vec3 emissive) { + if (alpha != glowIntensity) { + discard; + } + + _fragColor0 = vec4(diffuse.rgb, alpha); + _fragColor1 = vec4(bestFitNormal(normal), 0.5); + _fragColor2 = vec4(emissive, shininess / 128.0); +} + +float mod289(float x) { + return x - floor(x * (1.0 / 289.0)) * 289.0; +} + +vec2 mod289(vec2 x) { + return x - floor(x * (1.0 / 289.0)) * 289.0; +} + +vec3 mod289(vec3 x) { + return x - floor(x * (1.0 / 289.0)) * 289.0; +} + +vec4 mod289(vec4 x) { + return x - floor(x * (1.0 / 289.0)) * 289.0; +} + +float permute(float x) { + return mod289(((x*34.0)+1.0)*x); +} + +vec3 permute(vec3 x) { + return mod289(((x*34.0)+1.0)*x); +} + +vec4 permute(vec4 x) { + return mod289(((x*34.0)+1.0)*x); +} + +float taylorInvSqrt(float r) { + return 1.79284291400159 - 0.85373472095314 * r; +} + +vec4 taylorInvSqrt(vec4 r) { + return 1.79284291400159 - 0.85373472095314 * r; +} + +vec4 grad4(float j, vec4 ip) { + const vec4 ones = vec4(1.0, 1.0, 1.0, -1.0); + vec4 p, s; + + p.xyz = floor(fract(vec3(j) * ip.xyz) * 7.0) * ip.z - 1.0; + p.w = 1.5 - dot(abs(p.xyz), ones.xyz); + s = vec4(lessThan(p, vec4(0.0))); + p.xyz = p.xyz + (s.xyz * 2.0 - 1.0) * s.www; + + return p; +} + +// (sqrt(5) - 1)/4 = F4, used once below +#define F4 0.309016994374947451 + +float snoise(vec4 v) { + const vec4 C = vec4(0.138196601125011, // (5 - sqrt(5))/20 G4 + 0.276393202250021, // 2 * G4 + 0.414589803375032, // 3 * G4 + -0.447213595499958); // -1 + 4 * G4 + + // First corner + vec4 i = floor(v + dot(v, vec4(F4))); + vec4 x0 = v - i + dot(i, C.xxxx); + + // Other corners + + // Rank sorting originally contributed by Bill Licea-Kane, AMD (formerly ATI) + vec4 i0; + vec3 isX = step(x0.yzw, x0.xxx); + vec3 isYZ = step(x0.zww, x0.yyz); + i0.x = isX.x + isX.y + isX.z; + i0.yzw = 1.0 - isX; + i0.y += isYZ.x + isYZ.y; + i0.zw += 1.0 - isYZ.xy; + i0.z += isYZ.z; + i0.w += 1.0 - isYZ.z; + + // i0 now contains the unique values 0,1,2,3 in each channel + vec4 i3 = clamp(i0, 0.0, 1.0); + vec4 i2 = clamp(i0 - 1.0, 0.0, 1.0); + vec4 i1 = clamp(i0 - 2.0, 0.0, 1.0); + + vec4 x1 = x0 - i1 + C.xxxx; + vec4 x2 = x0 - i2 + C.yyyy; + vec4 x3 = x0 - i3 + C.zzzz; + vec4 x4 = x0 + C.wwww; + + // Permutations + i = mod289(i); + float j0 = permute(permute(permute(permute(i.w) + i.z) + i.y) + i.x); + vec4 j1 = permute( + permute( + permute( + permute(i.w + vec4(i1.w, i2.w, i3.w, 1.0)) + i.z + + vec4(i1.z, i2.z, i3.z, 1.0)) + i.y + + vec4(i1.y, i2.y, i3.y, 1.0)) + i.x + + vec4(i1.x, i2.x, i3.x, 1.0)); + + // Gradients: 7x7x6 points over a cube, mapped onto a 4-cross polytope + // 7*7*6 = 294, which is close to the ring size 17*17 = 289. + vec4 ip = vec4(1.0 / 294.0, 1.0 / 49.0, 1.0 / 7.0, 0.0); + + vec4 p0 = grad4(j0, ip); + vec4 p1 = grad4(j1.x, ip); + vec4 p2 = grad4(j1.y, ip); + vec4 p3 = grad4(j1.z, ip); + vec4 p4 = grad4(j1.w, ip); + + // Normalise gradients + vec4 norm = taylorInvSqrt( + vec4(dot(p0, p0), dot(p1, p1), dot(p2, p2), dot(p3, p3))); + p0 *= norm.x; + p1 *= norm.y; + p2 *= norm.z; + p3 *= norm.w; + p4 *= taylorInvSqrt(dot(p4, p4)); + + // Mix contributions from the five corners + vec3 m0 = max(0.6 - vec3(dot(x0, x0), dot(x1, x1), dot(x2, x2)), 0.0); + vec2 m1 = max(0.6 - vec2(dot(x3, x3), dot(x4, x4)), 0.0); + m0 = m0 * m0; + m1 = m1 * m1; + return 49.0 + * (dot(m0 * m0, vec3(dot(p0, x0), dot(p1, x1), dot(p2, x2))) + + dot(m1 * m1, vec2(dot(p3, x3), dot(p4, x4)))); + +} + +float snoise(vec3 v) { + const vec2 C = vec2(1.0 / 6.0, 1.0 / 3.0); + const vec4 D = vec4(0.0, 0.5, 1.0, 2.0); + + // First corner + vec3 i = floor(v + dot(v, C.yyy)); + vec3 x0 = v - i + dot(i, C.xxx); + + // Other corners + vec3 g = step(x0.yzx, x0.xyz); + vec3 l = 1.0 - g; + vec3 i1 = min(g.xyz, l.zxy); + vec3 i2 = max(g.xyz, l.zxy); + + vec3 x1 = x0 - i1 + C.xxx; + vec3 x2 = x0 - i2 + C.yyy; // 2.0*C.x = 1/3 = C.y + vec3 x3 = x0 - D.yyy; // -1.0+3.0*C.x = -0.5 = -D.y + + // Permutations + i = mod289(i); + vec4 p = permute( + permute( + permute(i.z + vec4(0.0, i1.z, i2.z, 1.0)) + i.y + + vec4(0.0, i1.y, i2.y, 1.0)) + i.x + + vec4(0.0, i1.x, i2.x, 1.0)); + + // Gradients: 7x7 points over a square, mapped onto an octahedron. + // The ring size 17*17 = 289 is close to a multiple of 49 (49*6 = 294) + float n_ = 0.142857142857; // 1.0/7.0 + vec3 ns = n_ * D.wyz - D.xzx; + + vec4 j = p - 49.0 * floor(p * ns.z * ns.z); // mod(p,7*7) + + vec4 x_ = floor(j * ns.z); + vec4 y_ = floor(j - 7.0 * x_); // mod(j,N) + + vec4 x = x_ * ns.x + ns.yyyy; + vec4 y = y_ * ns.x + ns.yyyy; + vec4 h = 1.0 - abs(x) - abs(y); + + vec4 b0 = vec4(x.xy, y.xy); + vec4 b1 = vec4(x.zw, y.zw); + + //vec4 s0 = vec4(lessThan(b0,0.0))*2.0 - 1.0; + //vec4 s1 = vec4(lessThan(b1,0.0))*2.0 - 1.0; + vec4 s0 = floor(b0) * 2.0 + 1.0; + vec4 s1 = floor(b1) * 2.0 + 1.0; + vec4 sh = -step(h, vec4(0.0)); + + vec4 a0 = b0.xzyw + s0.xzyw * sh.xxyy; + vec4 a1 = b1.xzyw + s1.xzyw * sh.zzww; + + vec3 p0 = vec3(a0.xy, h.x); + vec3 p1 = vec3(a0.zw, h.y); + vec3 p2 = vec3(a1.xy, h.z); + vec3 p3 = vec3(a1.zw, h.w); + + //Normalise gradients + vec4 norm = taylorInvSqrt( + vec4(dot(p0, p0), dot(p1, p1), dot(p2, p2), dot(p3, p3))); + p0 *= norm.x; + p1 *= norm.y; + p2 *= norm.z; + p3 *= norm.w; + + // Mix final noise value + vec4 m = max(0.6 - vec4(dot(x0, x0), dot(x1, x1), dot(x2, x2), dot(x3, x3)), + 0.0); + m = m * m; + return 42.0 + * dot(m * m, vec4(dot(p0, x0), dot(p1, x1), dot(p2, x2), dot(p3, x3))); +} + +float snoise(vec2 v) { + const vec4 C = vec4(0.211324865405187, // (3.0-sqrt(3.0))/6.0 + 0.366025403784439, // 0.5*(sqrt(3.0)-1.0) + -0.577350269189626, // -1.0 + 2.0 * C.x + 0.024390243902439); // 1.0 / 41.0 + // First corner + vec2 i = floor(v + dot(v, C.yy)); + vec2 x0 = v - i + dot(i, C.xx); + + // Other corners + vec2 i1; + i1 = (x0.x > x0.y) ? vec2(1.0, 0.0) : vec2(0.0, 1.0); + vec4 x12 = x0.xyxy + C.xxzz; + x12.xy -= i1; + + // Permutations + i = mod289(i); // Avoid truncation effects in permutation + vec3 p = permute( + permute(i.y + vec3(0.0, i1.y, 1.0)) + i.x + vec3(0.0, i1.x, 1.0)); + + vec3 m = max(0.5 - vec3(dot(x0, x0), dot(x12.xy, x12.xy), dot(x12.zw, x12.zw)), + 0.0); + m = m * m; + m = m * m; + + // Gradients: 41 points uniformly over a line, mapped onto a diamond. + // The ring size 17*17 = 289 is close to a multiple of 41 (41*7 = 287) + + vec3 x = 2.0 * fract(p * C.www) - 1.0; + vec3 h = abs(x) - 0.5; + vec3 ox = floor(x + 0.5); + vec3 a0 = x - ox; + + // Normalise gradients implicitly by scaling m + // Approximation of: m *= inversesqrt( a0*a0 + h*h ); + m *= 1.79284291400159 - 0.85373472095314 * (a0 * a0 + h * h); + + // Compute final noise value at P + vec3 g; + g.x = a0.x * x0.x + h.x * x0.y; + g.yz = a0.yz * x12.xz + h.yz * x12.yw; + return 130.0 * dot(m, g); +} + +// the interpolated normal +in vec3 _normal; +in vec3 _color; +in vec2 _texCoord0; +in vec4 _position; + +// TODO add more uniforms +uniform float iGlobalTime; // shader playback time (in seconds) +uniform vec3 iWorldScale; // the dimensions of the object being rendered + +// TODO add support for textures +// TODO document available inputs other than the uniforms +// TODO provide world scale in addition to the untransformed position + +%1 + +void main(void) { + vec4 texel = getProceduralColor(); + + packDeferredFragmentLightmap( + normalize(_normal), + glowIntensity * texel.a, + _color.rgb, + DEFAULT_SPECULAR, DEFAULT_SHININESS, + texel.rgb); +} +)SCRIBE"; diff --git a/libraries/entities-renderer/src/RenderableSphereEntityItem.cpp b/libraries/entities-renderer/src/RenderableSphereEntityItem.cpp index 50d46f4527..da7832f103 100644 --- a/libraries/entities-renderer/src/RenderableSphereEntityItem.cpp +++ b/libraries/entities-renderer/src/RenderableSphereEntityItem.cpp @@ -17,6 +17,7 @@ #include #include +#include #include #include "RenderableDebugableEntityItem.h" @@ -25,21 +26,36 @@ EntityItemPointer RenderableSphereEntityItem::factory(const EntityItemID& entity return std::make_shared(entityID, properties); } +void RenderableSphereEntityItem::setUserData(const QString& value) { + SphereEntityItem::setUserData(value); + _procedural.reset(); +} + void RenderableSphereEntityItem::render(RenderArgs* args) { PerformanceTimer perfTimer("RenderableSphereEntityItem::render"); Q_ASSERT(getType() == EntityTypes::Sphere); - glm::vec4 sphereColor(toGlm(getXColor()), getLocalRenderAlpha()); - + Q_ASSERT(args->_batch); + gpu::Batch& batch = *args->_batch; + batch.setModelTransform(getTransformToCenter()); // use a transform with scale, rotation, registration point and translation + // TODO: it would be cool to select different slices/stacks geometry based on the size of the sphere // and the distance to the viewer. This would allow us to reduce the triangle count for smaller spheres // that aren't close enough to see the tessellation and use larger triangle count for spheres that would // expose that effect - const int SLICES = 15, STACKS = 15; + static const int SLICES = 15, STACKS = 15; - Q_ASSERT(args->_batch); - gpu::Batch& batch = *args->_batch; - batch.setModelTransform(getTransformToCenter()); // use a transform with scale, rotation, registration point and translation - DependencyManager::get()->renderSolidSphere(batch, 0.5f, SLICES, STACKS, sphereColor); + if (!_procedural) { + _procedural.reset(new ProceduralInfo(this)); + } + + if (_procedural->ready()) { + _procedural->prepare(batch); + DependencyManager::get()->renderSphere(batch, 0.5f, SLICES, STACKS, vec3(1)); + } else { + glm::vec4 sphereColor(toGlm(getXColor()), getLocalRenderAlpha()); + DependencyManager::get()->renderSolidSphere(batch, 0.5f, SLICES, STACKS, sphereColor); + } + RenderableDebugableEntityItem::render(this, args); }; diff --git a/libraries/entities-renderer/src/RenderableSphereEntityItem.h b/libraries/entities-renderer/src/RenderableSphereEntityItem.h index 6331b35706..5036354c04 100644 --- a/libraries/entities-renderer/src/RenderableSphereEntityItem.h +++ b/libraries/entities-renderer/src/RenderableSphereEntityItem.h @@ -13,10 +13,10 @@ #define hifi_RenderableSphereEntityItem_h #include - #include "RenderableEntityItem.h" +#include "RenderableProceduralItem.h" -class RenderableSphereEntityItem : public SphereEntityItem { +class RenderableSphereEntityItem : public SphereEntityItem, RenderableProceduralItem { public: static EntityItemPointer factory(const EntityItemID& entityID, const EntityItemProperties& properties); @@ -25,6 +25,7 @@ public: { } virtual void render(RenderArgs* args); + virtual void setUserData(const QString& value); SIMPLE_RENDERABLE(); }; diff --git a/libraries/entities/src/EntityItem.h b/libraries/entities/src/EntityItem.h index e420d08709..54a524b5a2 100644 --- a/libraries/entities/src/EntityItem.h +++ b/libraries/entities/src/EntityItem.h @@ -334,7 +334,7 @@ public: void setLocked(bool value) { _locked = value; } const QString& getUserData() const { return _userData; } - void setUserData(const QString& value) { _userData = value; } + virtual void setUserData(const QString& value) { _userData = value; } const SimulationOwner& getSimulationOwner() const { return _simulationOwner; } void setSimulationOwner(const QUuid& id, quint8 priority); diff --git a/libraries/render-utils/src/ShaderCache.cpp b/libraries/render-utils/src/ShaderCache.cpp new file mode 100644 index 0000000000..e4ef8250b9 --- /dev/null +++ b/libraries/render-utils/src/ShaderCache.cpp @@ -0,0 +1,32 @@ +// +// Created by Bradley Austin Davis on 2015/05/26 +// Copyright 2015 High Fidelity, Inc. +// +// Distributed under the Apache License, Version 2.0. +// See the accompanying file LICENSE or http://www.apache.org/licenses/LICENSE-2.0.html +// +#include "ShaderCache.h" + +NetworkShader::NetworkShader(const QUrl& url, bool delayLoad) + : Resource(url, delayLoad) {}; + +void NetworkShader::downloadFinished(QNetworkReply* reply) { + if (reply) { + _source = reply->readAll(); + reply->deleteLater(); + } +} + +ShaderCache& ShaderCache::instance() { + static ShaderCache _instance; + return _instance; +} + +NetworkShaderPointer ShaderCache::getShader(const QUrl& url) { + return ResourceCache::getResource(url, QUrl(), false, nullptr).staticCast(); +} + +QSharedPointer ShaderCache::createResource(const QUrl& url, const QSharedPointer& fallback, bool delayLoad, const void* extra) { + return QSharedPointer(new NetworkShader(url, delayLoad), &Resource::allReferencesCleared); +} + diff --git a/libraries/render-utils/src/ShaderCache.h b/libraries/render-utils/src/ShaderCache.h new file mode 100644 index 0000000000..7698252924 --- /dev/null +++ b/libraries/render-utils/src/ShaderCache.h @@ -0,0 +1,34 @@ +// +// Created by Bradley Austin Davis on 2015/05/26 +// Copyright 2015 High Fidelity, Inc. +// +// Distributed under the Apache License, Version 2.0. +// See the accompanying file LICENSE or http://www.apache.org/licenses/LICENSE-2.0.html +// +#pragma once +#ifndef hifi_ShaderCache_h +#define hifi_ShaderCache_h + +#include + +class NetworkShader : public Resource { +public: + NetworkShader(const QUrl& url, bool delayLoad); + virtual void downloadFinished(QNetworkReply* reply) override; + + QByteArray _source; +}; + +using NetworkShaderPointer = QSharedPointer; + +class ShaderCache : public ResourceCache { +public: + static ShaderCache& instance(); + + NetworkShaderPointer getShader(const QUrl& url); + +protected: + virtual QSharedPointer createResource(const QUrl& url, const QSharedPointer& fallback, bool delayLoad, const void* extra) override; +}; + +#endif From d8e5945d1425f056348536f95262d1c1a16bad6a Mon Sep 17 00:00:00 2001 From: Brad Davis Date: Sat, 5 Sep 2015 12:17:36 -0700 Subject: [PATCH 22/37] Removing procedural edit work in progress for now --- examples/toys/proceduralEdit.js | 12 ------------ examples/toys/proceduralEdit/ui.html | 29 ---------------------------- 2 files changed, 41 deletions(-) delete mode 100644 examples/toys/proceduralEdit.js delete mode 100644 examples/toys/proceduralEdit/ui.html diff --git a/examples/toys/proceduralEdit.js b/examples/toys/proceduralEdit.js deleted file mode 100644 index 0792344063..0000000000 --- a/examples/toys/proceduralEdit.js +++ /dev/null @@ -1,12 +0,0 @@ -Script.include("../toys/magBalls/constants.js"); - -OmniToolModuleType = "ProceduralEdit" - -OmniToolModules.ProceduralEdit = function(omniTool, entityId) { - this.omniTool = omniTool; - this.entityId = entityId; - - var window = new WebWindow('Procedural', "file:///C:/Users/bdavis/Git/hifi/examples/toys/proceduralEdit/ui.html", 640, 480, false); - window.setVisible(true); - -} diff --git a/examples/toys/proceduralEdit/ui.html b/examples/toys/proceduralEdit/ui.html deleted file mode 100644 index 04d4417912..0000000000 --- a/examples/toys/proceduralEdit/ui.html +++ /dev/null @@ -1,29 +0,0 @@ - - - -ACE in Action - - - - -
function foo(items) { - var x = "All this is syntax highlighted"; - return x; -}
- - - - - \ No newline at end of file From 9289a4611241fa92b8ed746beef739fc608dd119 Mon Sep 17 00:00:00 2001 From: Brad Davis Date: Sat, 5 Sep 2015 12:20:28 -0700 Subject: [PATCH 23/37] Guarding against frequent userdata calls with no change. --- libraries/entities-renderer/src/RenderableBoxEntityItem.cpp | 6 ++++-- .../entities-renderer/src/RenderableSphereEntityItem.cpp | 6 ++++-- 2 files changed, 8 insertions(+), 4 deletions(-) diff --git a/libraries/entities-renderer/src/RenderableBoxEntityItem.cpp b/libraries/entities-renderer/src/RenderableBoxEntityItem.cpp index f73b99d059..000a8a5f96 100644 --- a/libraries/entities-renderer/src/RenderableBoxEntityItem.cpp +++ b/libraries/entities-renderer/src/RenderableBoxEntityItem.cpp @@ -27,8 +27,10 @@ EntityItemPointer RenderableBoxEntityItem::factory(const EntityItemID& entityID, } void RenderableBoxEntityItem::setUserData(const QString& value) { - BoxEntityItem::setUserData(value); - _procedural.reset(); + if (value != getUserData()) { + BoxEntityItem::setUserData(value); + _procedural.reset(); + } } void RenderableBoxEntityItem::render(RenderArgs* args) { diff --git a/libraries/entities-renderer/src/RenderableSphereEntityItem.cpp b/libraries/entities-renderer/src/RenderableSphereEntityItem.cpp index da7832f103..5a93a418f7 100644 --- a/libraries/entities-renderer/src/RenderableSphereEntityItem.cpp +++ b/libraries/entities-renderer/src/RenderableSphereEntityItem.cpp @@ -27,8 +27,10 @@ EntityItemPointer RenderableSphereEntityItem::factory(const EntityItemID& entity } void RenderableSphereEntityItem::setUserData(const QString& value) { - SphereEntityItem::setUserData(value); - _procedural.reset(); + if (value != getUserData()) { + SphereEntityItem::setUserData(value); + _procedural.reset(); + } } void RenderableSphereEntityItem::render(RenderArgs* args) { From c4b1e6ecd30655541d9f271ba838d85d0f76125c Mon Sep 17 00:00:00 2001 From: Brad Davis Date: Sat, 5 Sep 2015 12:22:25 -0700 Subject: [PATCH 24/37] Reducing debug spam --- .../entities-renderer/src/RenderableProceduralItem.cpp | 9 ++------- 1 file changed, 2 insertions(+), 7 deletions(-) diff --git a/libraries/entities-renderer/src/RenderableProceduralItem.cpp b/libraries/entities-renderer/src/RenderableProceduralItem.cpp index 6b0a3db1da..bec2b57a71 100644 --- a/libraries/entities-renderer/src/RenderableProceduralItem.cpp +++ b/libraries/entities-renderer/src/RenderableProceduralItem.cpp @@ -38,7 +38,6 @@ RenderableProceduralItem::ProceduralInfo::ProceduralInfo(EntityItem* entity) : _ if (parseError.error != QJsonParseError::NoError) { return; } - qDebug() << "Found JSON user data: " << userDataJson; userData = doc.object(); } @@ -54,16 +53,11 @@ RenderableProceduralItem::ProceduralInfo::ProceduralInfo(EntityItem* entity) : _ if (proceduralData.isNull()) { return; } - auto proceduralDataObject = proceduralData.toObject(); - foreach(auto key, proceduralDataObject) { - qDebug() << key; - } - qDebug() << "Procedural data object " << proceduralDataObject; QString shaderUrl = proceduralDataObject["shaderUrl"].toString(); - qDebug() << "Shader url: " << shaderUrl; _shaderUrl = QUrl(shaderUrl); if (!_shaderUrl.isValid()) { + qWarning() << "Invalid shader URL: " << shaderUrl; return; } @@ -74,6 +68,7 @@ RenderableProceduralItem::ProceduralInfo::ProceduralInfo(EntityItem* entity) : _ return; } } else { + qDebug() << "Shader url: " << _shaderUrl; _networkShader = ShaderCache::instance().getShader(_shaderUrl); } From 1b3d125cb33ebdcfe9dc7937e07e03426335afb1 Mon Sep 17 00:00:00 2001 From: David Rowe Date: Sat, 5 Sep 2015 14:39:10 -0700 Subject: [PATCH 25/37] Add alphaSpread entity particle property --- examples/example/entities/particlesTest.js | 37 +++++++------------ .../entities/src/EntityItemProperties.cpp | 7 ++++ libraries/entities/src/EntityItemProperties.h | 2 + libraries/entities/src/EntityPropertyFlags.h | 3 ++ .../entities/src/ParticleEffectEntityItem.cpp | 14 ++++++- .../entities/src/ParticleEffectEntityItem.h | 5 +++ 6 files changed, 43 insertions(+), 25 deletions(-) diff --git a/examples/example/entities/particlesTest.js b/examples/example/entities/particlesTest.js index 88e1c8d919..d6406b18ca 100644 --- a/examples/example/entities/particlesTest.js +++ b/examples/example/entities/particlesTest.js @@ -15,7 +15,7 @@ var box, particles, particleExample = -1, - NUM_PARTICLE_EXAMPLES = 7, + NUM_PARTICLE_EXAMPLES = 8, PARTICLE_RADIUS = 0.04; function onClickDownOnEntity(entityID) { @@ -35,10 +35,7 @@ case 1: print("Velocity spread"); Entities.editEntity(particles, { - velocitySpread: { x: 0.1, y: 0.0, z: 0.1 }, - accelerationSpread: { x: 0.0, y: 0.0, z: 0.0 }, - radiusSpread: 0.0, - animationIsPlaying: true + velocitySpread: { x: 0.1, y: 0.0, z: 0.1 } }); break; case 2: @@ -46,49 +43,43 @@ Entities.editEntity(particles, { velocitySpread: { x: 0.0, y: 0.0, z: 0.0 }, accelerationSpread: { x: 0.0, y: 0.1, z: 0.0 }, - radiusSpread: 0.0, - animationIsPlaying: true }); break; case 3: print("Radius spread"); Entities.editEntity(particles, { - velocitySpread: { x: 0.0, y: 0.0, z: 0.0 }, accelerationSpread: { x: 0.0, y: 0.0, z: 0.0 }, - radiusSpread: 0.035, - animationIsPlaying: true + radiusSpread: 0.035 }); break; case 4: print("Radius start and finish"); Entities.editEntity(particles, { - velocitySpread: { x: 0.0, y: 0.0, z: 0.0 }, - accelerationSpread: { x: 0.0, y: 0.0, z: 0.0 }, - radiusStart: 0.0, - radiusFinish: 0.0, radiusSpread: 0.0, - animationIsPlaying: true + radiusStart: 0.0, + radiusFinish: 0.0 }); break; case 5: print("Alpha 0.5"); Entities.editEntity(particles, { - velocitySpread: { x: 0.0, y: 0.0, z: 0.0 }, - accelerationSpread: { x: 0.0, y: 0.0, z: 0.0 }, radiusStart: PARTICLE_RADIUS, radiusFinish: PARTICLE_RADIUS, - alpha: 0.5, - animationIsPlaying: true + alpha: 0.5 }); break; case 6: + print("Alpha spread"); + Entities.editEntity(particles, { + alpha: 0.5, + alphaSpread: 0.5 + }); + break; + case 7: print("Stop emitting"); Entities.editEntity(particles, { - velocitySpread: { x: 0.0, y: 0.0, z: 0.0 }, - accelerationSpread: { x: 0.0, y: 0.0, z: 0.0 }, - radiusStart: PARTICLE_RADIUS, - radiusFinish: PARTICLE_RADIUS, alpha: 1.0, + alphaSpread: 0.0, animationIsPlaying: false }); break; diff --git a/libraries/entities/src/EntityItemProperties.cpp b/libraries/entities/src/EntityItemProperties.cpp index f838b7a17e..d633ed787a 100644 --- a/libraries/entities/src/EntityItemProperties.cpp +++ b/libraries/entities/src/EntityItemProperties.cpp @@ -56,6 +56,7 @@ CONSTRUCT_PROPERTY(scriptTimestamp, ENTITY_ITEM_DEFAULT_SCRIPT_TIMESTAMP), CONSTRUCT_PROPERTY(collisionSoundURL, ENTITY_ITEM_DEFAULT_COLLISION_SOUND_URL), CONSTRUCT_PROPERTY(color, ), CONSTRUCT_PROPERTY(alpha, ENTITY_ITEM_DEFAULT_ALPHA), +CONSTRUCT_PROPERTY(alphaSpread, ParticleEffectEntityItem::DEFAULT_ALPHA_SPREAD), CONSTRUCT_PROPERTY(modelURL, ""), CONSTRUCT_PROPERTY(compoundShapeURL, ""), CONSTRUCT_PROPERTY(animationURL, ""), @@ -333,6 +334,7 @@ EntityPropertyFlags EntityItemProperties::getChangedProperties() const { CHECK_PROPERTY_CHANGE(PROP_COLLISION_SOUND_URL, collisionSoundURL); CHECK_PROPERTY_CHANGE(PROP_COLOR, color); CHECK_PROPERTY_CHANGE(PROP_ALPHA, alpha); + CHECK_PROPERTY_CHANGE(PROP_ALPHA_SPREAD, alphaSpread); CHECK_PROPERTY_CHANGE(PROP_MODEL_URL, modelURL); CHECK_PROPERTY_CHANGE(PROP_COMPOUND_SHAPE_URL, compoundShapeURL); CHECK_PROPERTY_CHANGE(PROP_ANIMATION_URL, animationURL); @@ -448,6 +450,7 @@ QScriptValue EntityItemProperties::copyToScriptValue(QScriptEngine* engine, bool COPY_PROPERTY_TO_QSCRIPTVALUE(visible); COPY_PROPERTY_TO_QSCRIPTVALUE(color); COPY_PROPERTY_TO_QSCRIPTVALUE(alpha); + COPY_PROPERTY_TO_QSCRIPTVALUE(alphaSpread); COPY_PROPERTY_TO_QSCRIPTVALUE(modelURL); COPY_PROPERTY_TO_QSCRIPTVALUE(compoundShapeURL); COPY_PROPERTY_TO_QSCRIPTVALUE(animationURL); @@ -582,6 +585,7 @@ void EntityItemProperties::copyFromScriptValue(const QScriptValue& object, bool COPY_PROPERTY_FROM_QSCRIPTVALUE(visible, bool, setVisible); COPY_PROPERTY_FROM_QSCRIPTVALUE(color, xColor, setColor); COPY_PROPERTY_FROM_QSCRIPTVALUE(alpha, float, setAlpha); + COPY_PROPERTY_FROM_QSCRIPTVALUE(alphaSpread, float, setAlphaSpread); COPY_PROPERTY_FROM_QSCRIPTVALUE(modelURL, QString, setModelURL); COPY_PROPERTY_FROM_QSCRIPTVALUE(compoundShapeURL, QString, setCompoundShapeURL); COPY_PROPERTY_FROM_QSCRIPTVALUE(animationURL, QString, setAnimationURL); @@ -869,6 +873,7 @@ bool EntityItemProperties::encodeEntityEditPacket(PacketType::Value command, Ent APPEND_ENTITY_PROPERTY(PROP_RADIUS_START, properties.getRadiusStart()); APPEND_ENTITY_PROPERTY(PROP_RADIUS_FINISH, properties.getRadiusFinish()); APPEND_ENTITY_PROPERTY(PROP_RADIUS_SPREAD, properties.getRadiusSpread()); + APPEND_ENTITY_PROPERTY(PROP_ALPHA_SPREAD, properties.getAlphaSpread()); } if (properties.getType() == EntityTypes::Zone) { @@ -1147,6 +1152,7 @@ bool EntityItemProperties::decodeEntityEditPacket(const unsigned char* data, int READ_ENTITY_PROPERTY_TO_PROPERTIES(PROP_RADIUS_START, float, setRadiusStart); READ_ENTITY_PROPERTY_TO_PROPERTIES(PROP_RADIUS_FINISH, float, setRadiusFinish); READ_ENTITY_PROPERTY_TO_PROPERTIES(PROP_RADIUS_SPREAD, float, setRadiusSpread); + READ_ENTITY_PROPERTY_TO_PROPERTIES(PROP_ALPHA_SPREAD, float, setAlphaSpread); } if (properties.getType() == EntityTypes::Zone) { @@ -1290,6 +1296,7 @@ void EntityItemProperties::markAllChanged() { _radiusStartChanged = true; _radiusFinishChanged = true; _radiusSpreadChanged = true; + _alphaSpreadChanged = true; _marketplaceIDChanged = true; diff --git a/libraries/entities/src/EntityItemProperties.h b/libraries/entities/src/EntityItemProperties.h index 520e2c1224..6cd735149e 100644 --- a/libraries/entities/src/EntityItemProperties.h +++ b/libraries/entities/src/EntityItemProperties.h @@ -104,6 +104,7 @@ public: DEFINE_PROPERTY_REF(PROP_COLLISION_SOUND_URL, CollisionSoundURL, collisionSoundURL, QString); DEFINE_PROPERTY_REF(PROP_COLOR, Color, color, xColor); DEFINE_PROPERTY(PROP_ALPHA, Alpha, alpha, float); + DEFINE_PROPERTY(PROP_ALPHA_SPREAD, AlphaSpread, alphaSpread, float); DEFINE_PROPERTY_REF(PROP_MODEL_URL, ModelURL, modelURL, QString); DEFINE_PROPERTY_REF(PROP_COMPOUND_SHAPE_URL, CompoundShapeURL, compoundShapeURL, QString); DEFINE_PROPERTY_REF(PROP_ANIMATION_URL, AnimationURL, animationURL, QString); @@ -296,6 +297,7 @@ inline QDebug operator<<(QDebug debug, const EntityItemProperties& properties) { DEBUG_PROPERTY_IF_CHANGED(debug, properties, CollisionSoundURL, collisionSoundURL, ""); DEBUG_PROPERTY_IF_CHANGED(debug, properties, Color, color, ""); DEBUG_PROPERTY_IF_CHANGED(debug, properties, Alpha, alpha, ""); + DEBUG_PROPERTY_IF_CHANGED(debug, properties, AlphaSpread, alphaSpread, ""); DEBUG_PROPERTY_IF_CHANGED(debug, properties, ModelURL, modelURL, ""); DEBUG_PROPERTY_IF_CHANGED(debug, properties, CompoundShapeURL, compoundShapeURL, ""); DEBUG_PROPERTY_IF_CHANGED(debug, properties, AnimationURL, animationURL, ""); diff --git a/libraries/entities/src/EntityPropertyFlags.h b/libraries/entities/src/EntityPropertyFlags.h index bfef04ab57..e8763cf565 100644 --- a/libraries/entities/src/EntityPropertyFlags.h +++ b/libraries/entities/src/EntityPropertyFlags.h @@ -153,6 +153,9 @@ enum EntityPropertyList { PROP_ALPHA, // Supported by some derived classes + //Used by particles + PROP_ALPHA_SPREAD, + //////////////////////////////////////////////////////////////////////////////////////////////////// // ATTENTION: add new properties to end of list just ABOVE this line PROP_AFTER_LAST_ITEM, diff --git a/libraries/entities/src/ParticleEffectEntityItem.cpp b/libraries/entities/src/ParticleEffectEntityItem.cpp index b3859f10f0..8ab31aa0c4 100644 --- a/libraries/entities/src/ParticleEffectEntityItem.cpp +++ b/libraries/entities/src/ParticleEffectEntityItem.cpp @@ -43,6 +43,7 @@ #include "ParticleEffectEntityItem.h" const xColor ParticleEffectEntityItem::DEFAULT_COLOR = { 255, 255, 255 }; +const float ParticleEffectEntityItem::DEFAULT_ALPHA_SPREAD = 0.0f; const float ParticleEffectEntityItem::DEFAULT_ANIMATION_FRAME_INDEX = 0.0f; const bool ParticleEffectEntityItem::DEFAULT_ANIMATION_IS_PLAYING = false; const float ParticleEffectEntityItem::DEFAULT_ANIMATION_FPS = 30.0f; @@ -79,6 +80,7 @@ ParticleEffectEntityItem::ParticleEffectEntityItem(const EntityItemID& entityIte _radiusStart(DEFAULT_RADIUS_START), _radiusFinish(DEFAULT_RADIUS_FINISH), _radiusSpread(DEFAULT_RADIUS_SPREAD), + _alphaSpread(DEFAULT_ALPHA_SPREAD), _lastAnimated(usecTimestampNow()), _animationLoop(), _animationSettings(), @@ -175,6 +177,7 @@ EntityItemProperties ParticleEffectEntityItem::getProperties() const { COPY_ENTITY_PROPERTY_TO_PROPERTIES(radiusStart, getRadiusStart); COPY_ENTITY_PROPERTY_TO_PROPERTIES(radiusFinish, getRadiusFinish); COPY_ENTITY_PROPERTY_TO_PROPERTIES(radiusSpread, getRadiusSpread); + COPY_ENTITY_PROPERTY_TO_PROPERTIES(alphaSpread, getAlphaSpread); COPY_ENTITY_PROPERTY_TO_PROPERTIES(textures, getTextures); return properties; @@ -202,6 +205,7 @@ bool ParticleEffectEntityItem::setProperties(const EntityItemProperties& propert SET_ENTITY_PROPERTY_FROM_PROPERTIES(radiusStart, setRadiusStart); SET_ENTITY_PROPERTY_FROM_PROPERTIES(radiusFinish, setRadiusFinish); SET_ENTITY_PROPERTY_FROM_PROPERTIES(radiusSpread, setRadiusSpread); + SET_ENTITY_PROPERTY_FROM_PROPERTIES(alphaSpread, setAlphaSpread); SET_ENTITY_PROPERTY_FROM_PROPERTIES(textures, setTextures); if (somethingChanged) { @@ -304,6 +308,7 @@ EntityPropertyFlags ParticleEffectEntityItem::getEntityProperties(EncodeBitstrea requestedProperties += PROP_RADIUS_START; requestedProperties += PROP_RADIUS_FINISH; requestedProperties += PROP_ALPHA; + requestedProperties += PROP_ALPHA_SPREAD; return requestedProperties; } @@ -586,7 +591,7 @@ void ParticleEffectEntityItem::stepSimulation(float deltaTime) { _radiusMiddles[i] =_particleRadius; _radiusFinishes[i] = getRadiusFinish(); } else { - float spreadMultiplier = 1.0 + (2.0f * randFloat() - 1) * _radiusSpread / _particleRadius; + float spreadMultiplier = 1.0f + (2.0f * randFloat() - 1) * _radiusSpread / _particleRadius; _radiusStarts[i] = spreadMultiplier * getRadiusStart(); _radiusMiddles[i] = spreadMultiplier * _particleRadius; _radiusFinishes[i] = spreadMultiplier * getRadiusFinish(); @@ -613,7 +618,12 @@ void ParticleEffectEntityItem::stepSimulation(float deltaTime) { extendBounds(_particlePositions[i]); // Alpha - _particleAlphas[i] = _alpha; + if (_alphaSpread == 0.0f) { + _particleAlphas[i] = _alpha; + + } else { + _particleAlphas[i] = glm::clamp(_alpha + (2.0f * randFloat() - 1) * _alphaSpread, 0.0f, 1.0f); + } _particleTailIndex = (_particleTailIndex + 1) % _maxParticles; diff --git a/libraries/entities/src/ParticleEffectEntityItem.h b/libraries/entities/src/ParticleEffectEntityItem.h index 5d751d7b1c..55ae724fe6 100644 --- a/libraries/entities/src/ParticleEffectEntityItem.h +++ b/libraries/entities/src/ParticleEffectEntityItem.h @@ -59,6 +59,10 @@ public: void setAlpha(float alpha) { _alpha = alpha; } float getAlpha() const { return _alpha; } + static const float DEFAULT_ALPHA_SPREAD; + void setAlphaSpread(float alphaSpread) { _alphaSpread = alphaSpread; } + float getAlphaSpread() const { return _alphaSpread; } + void updateShapeType(ShapeType type); virtual ShapeType getShapeType() const { return _shapeType; } @@ -164,6 +168,7 @@ protected: // the properties of this entity rgbColor _color; float _alpha; + float _alphaSpread; quint32 _maxParticles; float _lifespan; float _emitRate; From 042384b5b08b8fb5e283f048ffa36b86acf535e2 Mon Sep 17 00:00:00 2001 From: David Rowe Date: Sat, 5 Sep 2015 14:51:48 -0700 Subject: [PATCH 26/37] Tidy and finish alpha and alphaSpread --- libraries/entities/src/ParticleEffectEntityItem.cpp | 9 ++++++--- libraries/entities/src/ParticleEffectEntityItem.h | 1 + 2 files changed, 7 insertions(+), 3 deletions(-) diff --git a/libraries/entities/src/ParticleEffectEntityItem.cpp b/libraries/entities/src/ParticleEffectEntityItem.cpp index 8ab31aa0c4..4e0ece15fc 100644 --- a/libraries/entities/src/ParticleEffectEntityItem.cpp +++ b/libraries/entities/src/ParticleEffectEntityItem.cpp @@ -43,6 +43,7 @@ #include "ParticleEffectEntityItem.h" const xColor ParticleEffectEntityItem::DEFAULT_COLOR = { 255, 255, 255 }; +const float ParticleEffectEntityItem::DEFAULT_ALPHA = 1.0f; const float ParticleEffectEntityItem::DEFAULT_ALPHA_SPREAD = 0.0f; const float ParticleEffectEntityItem::DEFAULT_ANIMATION_FRAME_INDEX = 0.0f; const bool ParticleEffectEntityItem::DEFAULT_ANIMATION_IS_PLAYING = false; @@ -80,14 +81,14 @@ ParticleEffectEntityItem::ParticleEffectEntityItem(const EntityItemID& entityIte _radiusStart(DEFAULT_RADIUS_START), _radiusFinish(DEFAULT_RADIUS_FINISH), _radiusSpread(DEFAULT_RADIUS_SPREAD), - _alphaSpread(DEFAULT_ALPHA_SPREAD), _lastAnimated(usecTimestampNow()), _animationLoop(), _animationSettings(), _textures(DEFAULT_TEXTURES), _texturesChangedFlag(false), _shapeType(SHAPE_TYPE_NONE), - _alpha(ENTITY_ITEM_DEFAULT_ALPHA), + _alpha(DEFAULT_ALPHA), + _alphaSpread(DEFAULT_ALPHA_SPREAD), _particleLifetimes(DEFAULT_MAX_PARTICLES, 0.0f), _particlePositions(DEFAULT_MAX_PARTICLES, glm::vec3(0.0f, 0.0f, 0.0f)), _particleVelocities(DEFAULT_MAX_PARTICLES, glm::vec3(0.0f, 0.0f, 0.0f)), @@ -96,7 +97,7 @@ ParticleEffectEntityItem::ParticleEffectEntityItem(const EntityItemID& entityIte _radiusStarts(DEFAULT_MAX_PARTICLES, DEFAULT_PARTICLE_RADIUS), _radiusMiddles(DEFAULT_MAX_PARTICLES, DEFAULT_PARTICLE_RADIUS), _radiusFinishes(DEFAULT_MAX_PARTICLES, DEFAULT_PARTICLE_RADIUS), - _particleAlphas(DEFAULT_MAX_PARTICLES, ENTITY_ITEM_DEFAULT_ALPHA), + _particleAlphas(DEFAULT_MAX_PARTICLES, DEFAULT_ALPHA), _timeUntilNextEmit(0.0f), _particleHeadIndex(0), _particleTailIndex(0), @@ -279,6 +280,7 @@ int ParticleEffectEntityItem::readEntitySubclassDataFromBuffer(const unsigned ch READ_ENTITY_PROPERTY(PROP_RADIUS_START, float, setRadiusStart); READ_ENTITY_PROPERTY(PROP_RADIUS_FINISH, float, setRadiusFinish); READ_ENTITY_PROPERTY(PROP_ALPHA, float, setAlpha); + READ_ENTITY_PROPERTY(PROP_ALPHA_SPREAD, float, setAlphaSpread); } return bytesRead; @@ -341,6 +343,7 @@ void ParticleEffectEntityItem::appendSubclassData(OctreePacketData* packetData, APPEND_ENTITY_PROPERTY(PROP_RADIUS_START, getRadiusStart()); APPEND_ENTITY_PROPERTY(PROP_RADIUS_FINISH, getRadiusFinish()); APPEND_ENTITY_PROPERTY(PROP_ALPHA, getAlpha()); + APPEND_ENTITY_PROPERTY(PROP_ALPHA_SPREAD, getAlphaSpread()); } bool ParticleEffectEntityItem::isAnimatingSomething() const { diff --git a/libraries/entities/src/ParticleEffectEntityItem.h b/libraries/entities/src/ParticleEffectEntityItem.h index 55ae724fe6..ad8ed8b386 100644 --- a/libraries/entities/src/ParticleEffectEntityItem.h +++ b/libraries/entities/src/ParticleEffectEntityItem.h @@ -56,6 +56,7 @@ public: _color[BLUE_INDEX] = value.blue; } + static const float DEFAULT_ALPHA; void setAlpha(float alpha) { _alpha = alpha; } float getAlpha() const { return _alpha; } From 47b27a32808196027704d923dc1ef237da92531b Mon Sep 17 00:00:00 2001 From: David Rowe Date: Sat, 5 Sep 2015 16:30:01 -0700 Subject: [PATCH 27/37] Add alphaStart and alphaFinish entity particle properties --- examples/example/entities/particlesTest.js | 16 +++- .../entities/src/EntityItemProperties.cpp | 14 +++ libraries/entities/src/EntityItemProperties.h | 4 + libraries/entities/src/EntityPropertyFlags.h | 2 + .../entities/src/ParticleEffectEntityItem.cpp | 89 +++++++++++++------ .../entities/src/ParticleEffectEntityItem.h | 19 +++- 6 files changed, 114 insertions(+), 30 deletions(-) diff --git a/examples/example/entities/particlesTest.js b/examples/example/entities/particlesTest.js index d6406b18ca..f1ae210373 100644 --- a/examples/example/entities/particlesTest.js +++ b/examples/example/entities/particlesTest.js @@ -15,7 +15,7 @@ var box, particles, particleExample = -1, - NUM_PARTICLE_EXAMPLES = 8, + NUM_PARTICLE_EXAMPLES = 9, PARTICLE_RADIUS = 0.04; function onClickDownOnEntity(entityID) { @@ -42,7 +42,7 @@ print("Acceleration spread"); Entities.editEntity(particles, { velocitySpread: { x: 0.0, y: 0.0, z: 0.0 }, - accelerationSpread: { x: 0.0, y: 0.1, z: 0.0 }, + accelerationSpread: { x: 0.0, y: 0.1, z: 0.0 } }); break; case 3: @@ -76,10 +76,20 @@ }); break; case 7: + print("Alpha start and finish"); + Entities.editEntity(particles, { + alphaSpread: 0.0, + alpha: 1.0, + alphaStart: 0.0, + alphaFinish: 0.0 + }); + break; + case 8: print("Stop emitting"); Entities.editEntity(particles, { alpha: 1.0, - alphaSpread: 0.0, + alphaStart: 1.0, + alphaFinish: 1.0, animationIsPlaying: false }); break; diff --git a/libraries/entities/src/EntityItemProperties.cpp b/libraries/entities/src/EntityItemProperties.cpp index d633ed787a..6d68483388 100644 --- a/libraries/entities/src/EntityItemProperties.cpp +++ b/libraries/entities/src/EntityItemProperties.cpp @@ -56,6 +56,8 @@ CONSTRUCT_PROPERTY(scriptTimestamp, ENTITY_ITEM_DEFAULT_SCRIPT_TIMESTAMP), CONSTRUCT_PROPERTY(collisionSoundURL, ENTITY_ITEM_DEFAULT_COLLISION_SOUND_URL), CONSTRUCT_PROPERTY(color, ), CONSTRUCT_PROPERTY(alpha, ENTITY_ITEM_DEFAULT_ALPHA), +CONSTRUCT_PROPERTY(alphaStart, ParticleEffectEntityItem::DEFAULT_ALPHA_START), +CONSTRUCT_PROPERTY(alphaFinish, ParticleEffectEntityItem::DEFAULT_ALPHA_FINISH), CONSTRUCT_PROPERTY(alphaSpread, ParticleEffectEntityItem::DEFAULT_ALPHA_SPREAD), CONSTRUCT_PROPERTY(modelURL, ""), CONSTRUCT_PROPERTY(compoundShapeURL, ""), @@ -334,6 +336,8 @@ EntityPropertyFlags EntityItemProperties::getChangedProperties() const { CHECK_PROPERTY_CHANGE(PROP_COLLISION_SOUND_URL, collisionSoundURL); CHECK_PROPERTY_CHANGE(PROP_COLOR, color); CHECK_PROPERTY_CHANGE(PROP_ALPHA, alpha); + CHECK_PROPERTY_CHANGE(PROP_ALPHA_START, alphaStart); + CHECK_PROPERTY_CHANGE(PROP_ALPHA_FINISH, alphaFinish); CHECK_PROPERTY_CHANGE(PROP_ALPHA_SPREAD, alphaSpread); CHECK_PROPERTY_CHANGE(PROP_MODEL_URL, modelURL); CHECK_PROPERTY_CHANGE(PROP_COMPOUND_SHAPE_URL, compoundShapeURL); @@ -450,6 +454,8 @@ QScriptValue EntityItemProperties::copyToScriptValue(QScriptEngine* engine, bool COPY_PROPERTY_TO_QSCRIPTVALUE(visible); COPY_PROPERTY_TO_QSCRIPTVALUE(color); COPY_PROPERTY_TO_QSCRIPTVALUE(alpha); + COPY_PROPERTY_TO_QSCRIPTVALUE(alphaStart); + COPY_PROPERTY_TO_QSCRIPTVALUE(alphaFinish); COPY_PROPERTY_TO_QSCRIPTVALUE(alphaSpread); COPY_PROPERTY_TO_QSCRIPTVALUE(modelURL); COPY_PROPERTY_TO_QSCRIPTVALUE(compoundShapeURL); @@ -585,6 +591,8 @@ void EntityItemProperties::copyFromScriptValue(const QScriptValue& object, bool COPY_PROPERTY_FROM_QSCRIPTVALUE(visible, bool, setVisible); COPY_PROPERTY_FROM_QSCRIPTVALUE(color, xColor, setColor); COPY_PROPERTY_FROM_QSCRIPTVALUE(alpha, float, setAlpha); + COPY_PROPERTY_FROM_QSCRIPTVALUE(alphaStart, float, setAlphaStart); + COPY_PROPERTY_FROM_QSCRIPTVALUE(alphaFinish, float, setAlphaFinish); COPY_PROPERTY_FROM_QSCRIPTVALUE(alphaSpread, float, setAlphaSpread); COPY_PROPERTY_FROM_QSCRIPTVALUE(modelURL, QString, setModelURL); COPY_PROPERTY_FROM_QSCRIPTVALUE(compoundShapeURL, QString, setCompoundShapeURL); @@ -873,6 +881,8 @@ bool EntityItemProperties::encodeEntityEditPacket(PacketType::Value command, Ent APPEND_ENTITY_PROPERTY(PROP_RADIUS_START, properties.getRadiusStart()); APPEND_ENTITY_PROPERTY(PROP_RADIUS_FINISH, properties.getRadiusFinish()); APPEND_ENTITY_PROPERTY(PROP_RADIUS_SPREAD, properties.getRadiusSpread()); + APPEND_ENTITY_PROPERTY(PROP_ALPHA_START, properties.getAlphaStart()); + APPEND_ENTITY_PROPERTY(PROP_ALPHA_FINISH, properties.getAlphaFinish()); APPEND_ENTITY_PROPERTY(PROP_ALPHA_SPREAD, properties.getAlphaSpread()); } @@ -1152,6 +1162,8 @@ bool EntityItemProperties::decodeEntityEditPacket(const unsigned char* data, int READ_ENTITY_PROPERTY_TO_PROPERTIES(PROP_RADIUS_START, float, setRadiusStart); READ_ENTITY_PROPERTY_TO_PROPERTIES(PROP_RADIUS_FINISH, float, setRadiusFinish); READ_ENTITY_PROPERTY_TO_PROPERTIES(PROP_RADIUS_SPREAD, float, setRadiusSpread); + READ_ENTITY_PROPERTY_TO_PROPERTIES(PROP_ALPHA_START, float, setAlphaStart); + READ_ENTITY_PROPERTY_TO_PROPERTIES(PROP_ALPHA_FINISH, float, setAlphaFinish); READ_ENTITY_PROPERTY_TO_PROPERTIES(PROP_ALPHA_SPREAD, float, setAlphaSpread); } @@ -1296,6 +1308,8 @@ void EntityItemProperties::markAllChanged() { _radiusStartChanged = true; _radiusFinishChanged = true; _radiusSpreadChanged = true; + _alphaStartChanged = true; + _alphaFinishChanged = true; _alphaSpreadChanged = true; _marketplaceIDChanged = true; diff --git a/libraries/entities/src/EntityItemProperties.h b/libraries/entities/src/EntityItemProperties.h index 6cd735149e..3721e0d9ca 100644 --- a/libraries/entities/src/EntityItemProperties.h +++ b/libraries/entities/src/EntityItemProperties.h @@ -104,6 +104,8 @@ public: DEFINE_PROPERTY_REF(PROP_COLLISION_SOUND_URL, CollisionSoundURL, collisionSoundURL, QString); DEFINE_PROPERTY_REF(PROP_COLOR, Color, color, xColor); DEFINE_PROPERTY(PROP_ALPHA, Alpha, alpha, float); + DEFINE_PROPERTY(PROP_ALPHA_START, AlphaStart, alphaStart, float); + DEFINE_PROPERTY(PROP_ALPHA_FINISH, AlphaFinish, alphaFinish, float); DEFINE_PROPERTY(PROP_ALPHA_SPREAD, AlphaSpread, alphaSpread, float); DEFINE_PROPERTY_REF(PROP_MODEL_URL, ModelURL, modelURL, QString); DEFINE_PROPERTY_REF(PROP_COMPOUND_SHAPE_URL, CompoundShapeURL, compoundShapeURL, QString); @@ -297,6 +299,8 @@ inline QDebug operator<<(QDebug debug, const EntityItemProperties& properties) { DEBUG_PROPERTY_IF_CHANGED(debug, properties, CollisionSoundURL, collisionSoundURL, ""); DEBUG_PROPERTY_IF_CHANGED(debug, properties, Color, color, ""); DEBUG_PROPERTY_IF_CHANGED(debug, properties, Alpha, alpha, ""); + DEBUG_PROPERTY_IF_CHANGED(debug, properties, AlphaStart, alphaStart, ""); + DEBUG_PROPERTY_IF_CHANGED(debug, properties, AlphaFinish, alphaFinish, ""); DEBUG_PROPERTY_IF_CHANGED(debug, properties, AlphaSpread, alphaSpread, ""); DEBUG_PROPERTY_IF_CHANGED(debug, properties, ModelURL, modelURL, ""); DEBUG_PROPERTY_IF_CHANGED(debug, properties, CompoundShapeURL, compoundShapeURL, ""); diff --git a/libraries/entities/src/EntityPropertyFlags.h b/libraries/entities/src/EntityPropertyFlags.h index e8763cf565..146f4126a7 100644 --- a/libraries/entities/src/EntityPropertyFlags.h +++ b/libraries/entities/src/EntityPropertyFlags.h @@ -155,6 +155,8 @@ enum EntityPropertyList { //Used by particles PROP_ALPHA_SPREAD, + PROP_ALPHA_START, + PROP_ALPHA_FINISH, //////////////////////////////////////////////////////////////////////////////////////////////////// // ATTENTION: add new properties to end of list just ABOVE this line diff --git a/libraries/entities/src/ParticleEffectEntityItem.cpp b/libraries/entities/src/ParticleEffectEntityItem.cpp index 4e0ece15fc..a85a83a4ac 100644 --- a/libraries/entities/src/ParticleEffectEntityItem.cpp +++ b/libraries/entities/src/ParticleEffectEntityItem.cpp @@ -44,6 +44,9 @@ const xColor ParticleEffectEntityItem::DEFAULT_COLOR = { 255, 255, 255 }; const float ParticleEffectEntityItem::DEFAULT_ALPHA = 1.0f; +const float ParticleEffectEntityItem::ALPHA_UNINITIALIZED = -1.0f; +const float ParticleEffectEntityItem::DEFAULT_ALPHA_START = ALPHA_UNINITIALIZED; +const float ParticleEffectEntityItem::DEFAULT_ALPHA_FINISH = ALPHA_UNINITIALIZED; const float ParticleEffectEntityItem::DEFAULT_ALPHA_SPREAD = 0.0f; const float ParticleEffectEntityItem::DEFAULT_ANIMATION_FRAME_INDEX = 0.0f; const bool ParticleEffectEntityItem::DEFAULT_ANIMATION_IS_PLAYING = false; @@ -88,6 +91,8 @@ ParticleEffectEntityItem::ParticleEffectEntityItem(const EntityItemID& entityIte _texturesChangedFlag(false), _shapeType(SHAPE_TYPE_NONE), _alpha(DEFAULT_ALPHA), + _alphaStart(DEFAULT_ALPHA_START), + _alphaFinish(DEFAULT_ALPHA_FINISH), _alphaSpread(DEFAULT_ALPHA_SPREAD), _particleLifetimes(DEFAULT_MAX_PARTICLES, 0.0f), _particlePositions(DEFAULT_MAX_PARTICLES, glm::vec3(0.0f, 0.0f, 0.0f)), @@ -97,6 +102,9 @@ ParticleEffectEntityItem::ParticleEffectEntityItem(const EntityItemID& entityIte _radiusStarts(DEFAULT_MAX_PARTICLES, DEFAULT_PARTICLE_RADIUS), _radiusMiddles(DEFAULT_MAX_PARTICLES, DEFAULT_PARTICLE_RADIUS), _radiusFinishes(DEFAULT_MAX_PARTICLES, DEFAULT_PARTICLE_RADIUS), + _alphaStarts(DEFAULT_MAX_PARTICLES, DEFAULT_PARTICLE_RADIUS), + _alphaMiddles(DEFAULT_MAX_PARTICLES, DEFAULT_ALPHA), + _alphaFinishes(DEFAULT_MAX_PARTICLES, DEFAULT_ALPHA), _particleAlphas(DEFAULT_MAX_PARTICLES, DEFAULT_ALPHA), _timeUntilNextEmit(0.0f), _particleHeadIndex(0), @@ -178,6 +186,8 @@ EntityItemProperties ParticleEffectEntityItem::getProperties() const { COPY_ENTITY_PROPERTY_TO_PROPERTIES(radiusStart, getRadiusStart); COPY_ENTITY_PROPERTY_TO_PROPERTIES(radiusFinish, getRadiusFinish); COPY_ENTITY_PROPERTY_TO_PROPERTIES(radiusSpread, getRadiusSpread); + COPY_ENTITY_PROPERTY_TO_PROPERTIES(alphaStart, getAlphaStart); + COPY_ENTITY_PROPERTY_TO_PROPERTIES(alphaFinish, getAlphaFinish); COPY_ENTITY_PROPERTY_TO_PROPERTIES(alphaSpread, getAlphaSpread); COPY_ENTITY_PROPERTY_TO_PROPERTIES(textures, getTextures); @@ -206,6 +216,8 @@ bool ParticleEffectEntityItem::setProperties(const EntityItemProperties& propert SET_ENTITY_PROPERTY_FROM_PROPERTIES(radiusStart, setRadiusStart); SET_ENTITY_PROPERTY_FROM_PROPERTIES(radiusFinish, setRadiusFinish); SET_ENTITY_PROPERTY_FROM_PROPERTIES(radiusSpread, setRadiusSpread); + SET_ENTITY_PROPERTY_FROM_PROPERTIES(alphaStart, setAlphaStart); + SET_ENTITY_PROPERTY_FROM_PROPERTIES(alphaFinish, setAlphaFinish); SET_ENTITY_PROPERTY_FROM_PROPERTIES(alphaSpread, setAlphaSpread); SET_ENTITY_PROPERTY_FROM_PROPERTIES(textures, setTextures); @@ -281,6 +293,8 @@ int ParticleEffectEntityItem::readEntitySubclassDataFromBuffer(const unsigned ch READ_ENTITY_PROPERTY(PROP_RADIUS_FINISH, float, setRadiusFinish); READ_ENTITY_PROPERTY(PROP_ALPHA, float, setAlpha); READ_ENTITY_PROPERTY(PROP_ALPHA_SPREAD, float, setAlphaSpread); + READ_ENTITY_PROPERTY(PROP_ALPHA_START, float, setAlphaStart); + READ_ENTITY_PROPERTY(PROP_ALPHA_FINISH, float, setAlphaFinish); } return bytesRead; @@ -311,6 +325,8 @@ EntityPropertyFlags ParticleEffectEntityItem::getEntityProperties(EncodeBitstrea requestedProperties += PROP_RADIUS_FINISH; requestedProperties += PROP_ALPHA; requestedProperties += PROP_ALPHA_SPREAD; + requestedProperties += PROP_ALPHA_START; + requestedProperties += PROP_ALPHA_FINISH; return requestedProperties; } @@ -344,6 +360,8 @@ void ParticleEffectEntityItem::appendSubclassData(OctreePacketData* packetData, APPEND_ENTITY_PROPERTY(PROP_RADIUS_FINISH, getRadiusFinish()); APPEND_ENTITY_PROPERTY(PROP_ALPHA, getAlpha()); APPEND_ENTITY_PROPERTY(PROP_ALPHA_SPREAD, getAlphaSpread()); + APPEND_ENTITY_PROPERTY(PROP_ALPHA_START, getAlphaStart()); + APPEND_ENTITY_PROPERTY(PROP_ALPHA_FINISH, getAlphaFinish()); } bool ParticleEffectEntityItem::isAnimatingSomething() const { @@ -513,28 +531,13 @@ QString ParticleEffectEntityItem::getAnimationSettings() const { return jsonByteString; } -void ParticleEffectEntityItem::updateRadius(quint32 index) { - if (_radiusStarts[index] == _radiusMiddles[index] && _radiusMiddles[index] == _radiusFinishes[index]) { - _particleRadiuses[index] = _radiusMiddles[index]; - } else { - float age = 2.0f * (1.0f - _particleLifetimes[index] / _lifespan); // 0.0 .. 2.0 - float y0, y1, y2, y3; +void ParticleEffectEntityItem::updateRadius(quint32 index, float age) { + _particleRadiuses[index] = interpolate(_radiusStarts[index], _radiusMiddles[index], _radiusFinishes[index], age); +} - if (age < 1.0f) { - y1 = _radiusStarts[index]; - y2 = _radiusMiddles[index]; - y3 = _radiusFinishes[index]; - y0 = 2.0f * y1 - y2; - } else { - y0 = _radiusStarts[index]; - y1 = _radiusMiddles[index]; - y2 = _radiusFinishes[index]; - y3 = 2.0f * y2 - y1; - age -= 1.0f; - } - - _particleRadiuses[index] = cubicInterpolate(y0, y1, y2, y3, age); - } +void ParticleEffectEntityItem::updateAlpha(quint32 index, float age) { + _particleAlphas[index] = glm::clamp(interpolate(_alphaStarts[index], _alphaMiddles[index], _alphaFinishes[index], age), + 0.0f, 1.0f); } void ParticleEffectEntityItem::extendBounds(const glm::vec3& point) { @@ -569,7 +572,9 @@ void ParticleEffectEntityItem::stepSimulation(float deltaTime) { _particleHeadIndex = (_particleHeadIndex + 1) % _maxParticles; } else { - updateRadius(i); + float age = (1.0f - _particleLifetimes[i] / _lifespan); // 0.0 .. 1.0 + updateRadius(i, age); + updateAlpha(i, age); integrateParticle(i, deltaTime); extendBounds(_particlePositions[i]); } @@ -599,7 +604,7 @@ void ParticleEffectEntityItem::stepSimulation(float deltaTime) { _radiusMiddles[i] = spreadMultiplier * _particleRadius; _radiusFinishes[i] = spreadMultiplier * getRadiusFinish(); } - updateRadius(i); + updateRadius(i, 0.0f); // Velocity and acceleration glm::vec3 spreadOffset; @@ -622,11 +627,16 @@ void ParticleEffectEntityItem::stepSimulation(float deltaTime) { // Alpha if (_alphaSpread == 0.0f) { - _particleAlphas[i] = _alpha; - + _alphaStarts[i] = getAlphaStart(); + _alphaMiddles[i] = _alpha; + _alphaFinishes[i] = getAlphaFinish(); } else { - _particleAlphas[i] = glm::clamp(_alpha + (2.0f * randFloat() - 1) * _alphaSpread, 0.0f, 1.0f); + float spreadMultiplier = 1.0f + (2.0f * randFloat() - 1) * _alphaSpread / _alpha; + _alphaStarts[i] = spreadMultiplier * getAlphaStart(); + _alphaMiddles[i] = spreadMultiplier * _alpha; + _alphaFinishes[i] = spreadMultiplier * getAlphaFinish(); } + updateAlpha(i, 0.0f); _particleTailIndex = (_particleTailIndex + 1) % _maxParticles; @@ -657,6 +667,9 @@ void ParticleEffectEntityItem::setMaxParticles(quint32 maxParticles) { _radiusMiddles.resize(_maxParticles); _radiusFinishes.resize(_maxParticles); _particleAlphas.resize(_maxParticles); + _alphaStarts.resize(_maxParticles); + _alphaMiddles.resize(_maxParticles); + _alphaFinishes.resize(_maxParticles); // effectively clear all particles and start emitting new ones from scratch. _particleHeadIndex = 0; @@ -684,3 +697,27 @@ float ParticleEffectEntityItem::cubicInterpolate(float y0, float y1, float y2, f return (a0 * u * uu + a1 * uu + a2 * u + a3); } + +float ParticleEffectEntityItem::interpolate(float start, float middle, float finish, float age) { + if (start == middle && middle == finish) { + return middle; + } else { + float y0, y1, y2, y3, u; + + if (age <= 0.5f) { + y1 = start; + y2 = middle; + y3 = finish; + y0 = 2.0f * y1 - y2; + u = 2.0f * age; + } else { + y0 = start; + y1 = middle; + y2 = finish; + y3 = 2.0f * y2 - y1; + u = 2.0f * age - 1.0f; + } + + return cubicInterpolate(y0, y1, y2, y3, u); + } +} diff --git a/libraries/entities/src/ParticleEffectEntityItem.h b/libraries/entities/src/ParticleEffectEntityItem.h index ad8ed8b386..efdedc715d 100644 --- a/libraries/entities/src/ParticleEffectEntityItem.h +++ b/libraries/entities/src/ParticleEffectEntityItem.h @@ -60,6 +60,16 @@ public: void setAlpha(float alpha) { _alpha = alpha; } float getAlpha() const { return _alpha; } + static const float ALPHA_UNINITIALIZED; + + static const float DEFAULT_ALPHA_START; + void setAlphaStart(float alphaStart) { _alphaStart = alphaStart; } + float getAlphaStart() const { return _alphaStart == ALPHA_UNINITIALIZED ? _alpha : _alphaStart; } + + static const float DEFAULT_ALPHA_FINISH; + void setAlphaFinish(float alphaFinish) { _alphaFinish = alphaFinish; } + float getAlphaFinish() const { return _alphaFinish == ALPHA_UNINITIALIZED ? _alpha : _alphaFinish; } + static const float DEFAULT_ALPHA_SPREAD; void setAlphaSpread(float alphaSpread) { _alphaSpread = alphaSpread; } float getAlphaSpread() const { return _alphaSpread; } @@ -161,7 +171,8 @@ protected: bool isAnimatingSomething() const; void stepSimulation(float deltaTime); - void updateRadius(quint32 index); + void updateRadius(quint32 index, float age); + void updateAlpha(quint32 index, float age); void extendBounds(const glm::vec3& point); void integrateParticle(quint32 index, float deltaTime); quint32 getLivingParticleCount() const; @@ -169,6 +180,8 @@ protected: // the properties of this entity rgbColor _color; float _alpha; + float _alphaStart; + float _alphaFinish; float _alphaSpread; quint32 _maxParticles; float _lifespan; @@ -198,6 +211,9 @@ protected: QVector _radiusMiddles; QVector _radiusFinishes; QVector _particleAlphas; + QVector _alphaStarts; + QVector _alphaMiddles; + QVector _alphaFinishes; float _timeUntilNextEmit; @@ -212,6 +228,7 @@ protected: private: float cubicInterpolate(float y0, float y1, float y2, float y3, float u); + float interpolate(float start, float middle, float finish, float age); }; #endif // hifi_ParticleEffectEntityItem_h From 16346dd7176e469bf89ed43b0671617035d12253 Mon Sep 17 00:00:00 2001 From: David Rowe Date: Sun, 6 Sep 2015 16:20:46 -0700 Subject: [PATCH 28/37] Fix some build warnings --- libraries/avatars/src/AvatarData.h | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/libraries/avatars/src/AvatarData.h b/libraries/avatars/src/AvatarData.h index af97180cbd..a6b88c1702 100644 --- a/libraries/avatars/src/AvatarData.h +++ b/libraries/avatars/src/AvatarData.h @@ -103,7 +103,7 @@ const char IS_FINGER_POINTING_FLAG = 4; static const float MAX_AVATAR_SCALE = 1000.0f; static const float MIN_AVATAR_SCALE = .005f; -const float MAX_AUDIO_LOUDNESS = 1000.0; // close enough for mouth animation +const float MAX_AUDIO_LOUDNESS = 1000.0f; // close enough for mouth animation const int AVATAR_IDENTITY_PACKET_SEND_INTERVAL_MSECS = 1000; const int AVATAR_BILLBOARD_PACKET_SEND_INTERVAL_MSECS = 5000; @@ -112,7 +112,7 @@ const int AVATAR_BILLBOARD_PACKET_SEND_INTERVAL_MSECS = 5000; const QString DEFAULT_FULL_AVATAR_MODEL_NAME = QString("Default"); // how often should we send a full report about joint rotations, even if they haven't changed? -const float AVATAR_SEND_FULL_UPDATE_RATIO = 0.02; +const float AVATAR_SEND_FULL_UPDATE_RATIO = 0.02f; // this controls how large a change in joint-rotation must be before the interface sends it to the avatar mixer const float AVATAR_MIN_ROTATION_DOT = 0.9999999f; From 6923e3ce709f83247d334c415ac2d045b481b8a3 Mon Sep 17 00:00:00 2001 From: David Rowe Date: Sun, 6 Sep 2015 16:28:55 -0700 Subject: [PATCH 29/37] Fix logging of intentionally crashing Interface --- interface/src/Application.cpp | 3 +-- 1 file changed, 1 insertion(+), 2 deletions(-) diff --git a/interface/src/Application.cpp b/interface/src/Application.cpp index 928b4a0684..d229073c30 100644 --- a/interface/src/Application.cpp +++ b/interface/src/Application.cpp @@ -5075,11 +5075,10 @@ void Application::emulateMouse(Hand* hand, float click, float shift, int index) } void Application::crashApplication() { + qCDebug(interfaceapp) << "Intentionally crashed Interface"; QObject* object = nullptr; bool value = object->isWindowType(); Q_UNUSED(value); - - qCDebug(interfaceapp) << "Intentionally crashed Interface"; } void Application::setActiveDisplayPlugin(const QString& pluginName) { From fe13d591464220b1bc34bd39777a4f3027e7f67b Mon Sep 17 00:00:00 2001 From: Rudi Chen Date: Sun, 6 Sep 2015 16:53:26 -0400 Subject: [PATCH 30/37] Troubleshooting tip for repeated build failures with cmake. --- BUILD.md | 2 ++ 1 file changed, 2 insertions(+) diff --git a/BUILD.md b/BUILD.md index ad365fcde2..ae4a67c2ee 100644 --- a/BUILD.md +++ b/BUILD.md @@ -53,6 +53,8 @@ Create a build directory in the root of your checkout and then run the CMake bui cd build cmake .. +If cmake gives you the same error message repeatedly after the build fails (e.g. you had a typo in the QT_CMAKE_PREFIX_PATH that you fixed but the `.cmake` files still cannot be found), try removing `CMakeCache.txt`. + ####Variables Any variables that need to be set for CMake to find dependencies can be set as ENV variables in your shell profile, or passed directly to CMake with a `-D` flag appended to the `cmake ..` command. From f2fdb97f1600f76fcfa7e8787fb0f54affa74641 Mon Sep 17 00:00:00 2001 From: Rudi Chen Date: Sun, 6 Sep 2015 17:31:37 -0400 Subject: [PATCH 31/37] Add additional linux dependencies. It is a dependency of libjack-dev but without manually specifying it, I would get the error message (on Linux Mint 17.2): ``` The following packages have unmet dependencies: libjack-dev : Depends: libjack0 (= 1:0.121.3+20120418git75e3e20b-2.1ubuntu1) but it is not going to be installed ``` libudev-dev is used in linking the interface executable. --- BUILD_LINUX.md | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/BUILD_LINUX.md b/BUILD_LINUX.md index 38f5628c64..55cd647f66 100644 --- a/BUILD_LINUX.md +++ b/BUILD_LINUX.md @@ -1,6 +1,6 @@ -Please read the [general build guide](BUILD.md) for information on dependencies required for all platforms. Only Linux specific instructions are found in this file. +Please read the [general build guide](BUILD.md) for information on dependencies required for all platforms. Only Linux specific instructions are found in this file. ###Qt5 Dependencies Should you choose not to install Qt5 via a package manager that handles dependencies for you, you may be missing some Qt5 dependencies. On Ubuntu, for example, the following additional packages are required: - libasound2 libxmu-dev libxi-dev freeglut3-dev libasound2-dev libjack-dev libxrandr-dev + libasound2 libxmu-dev libxi-dev freeglut3-dev libasound2-dev libjack0 libjack-dev libxrandr-dev libudev-dev From b703ce01fb61094d0c651ba9ef2148ae43106edf Mon Sep 17 00:00:00 2001 From: Rudi Chen Date: Sun, 6 Sep 2015 21:08:50 -0400 Subject: [PATCH 32/37] Make sure libdl is linked after libcrypto. Fixes a `undefined reference to symbol 'dlclose@@GLIBC_2.2.5' error I was running into on Linux Mint 17.2. --- assignment-client/CMakeLists.txt | 4 ---- domain-server/CMakeLists.txt | 5 +++++ libraries/networking/CMakeLists.txt | 5 +++++ 3 files changed, 10 insertions(+), 4 deletions(-) diff --git a/assignment-client/CMakeLists.txt b/assignment-client/CMakeLists.txt index c9fd769822..84a36c6c51 100644 --- a/assignment-client/CMakeLists.txt +++ b/assignment-client/CMakeLists.txt @@ -13,10 +13,6 @@ link_hifi_libraries( physics ) -if (UNIX) - target_link_libraries(${TARGET_NAME} ${CMAKE_DL_LIBS}) -endif (UNIX) - include_application_version() copy_dlls_beside_windows_executable() diff --git a/domain-server/CMakeLists.txt b/domain-server/CMakeLists.txt index e4fa1d874d..ce683df698 100644 --- a/domain-server/CMakeLists.txt +++ b/domain-server/CMakeLists.txt @@ -31,5 +31,10 @@ include_directories(SYSTEM "${OPENSSL_INCLUDE_DIR}") # append OpenSSL to our list of libraries to link target_link_libraries(${TARGET_NAME} ${OPENSSL_LIBRARIES}) +# libcrypto uses dlopen in libdl +if (UNIX) + target_link_libraries(${TARGET_NAME} ${CMAKE_DL_LIBS}) +endif (UNIX) + include_application_version() copy_dlls_beside_windows_executable() diff --git a/libraries/networking/CMakeLists.txt b/libraries/networking/CMakeLists.txt index 400fc5446a..274dae7420 100644 --- a/libraries/networking/CMakeLists.txt +++ b/libraries/networking/CMakeLists.txt @@ -27,6 +27,11 @@ include_directories(SYSTEM "${OPENSSL_INCLUDE_DIR}") # append OpenSSL to our list of libraries to link target_link_libraries(${TARGET_NAME} ${OPENSSL_LIBRARIES} ${TBB_LIBRARIES}) +# libcrypto uses dlopen in libdl +if (UNIX) + target_link_libraries(${TARGET_NAME} ${CMAKE_DL_LIBS}) +endif (UNIX) + # append tbb includes to our list of includes to bubble target_include_directories(${TARGET_NAME} SYSTEM PUBLIC ${TBB_INCLUDE_DIRS}) include_application_version() From cb9468c311ba542649bf266fa0c67df658e5bc92 Mon Sep 17 00:00:00 2001 From: David Rowe Date: Mon, 7 Sep 2015 16:27:42 -0700 Subject: [PATCH 33/37] Add colorSpread entity particle property --- examples/example/entities/particlesTest.js | 14 +++++++++- .../RenderableParticleEffectEntityItem.cpp | 2 +- .../entities/src/EntityItemProperties.cpp | 7 +++++ libraries/entities/src/EntityItemProperties.h | 2 ++ libraries/entities/src/EntityPropertyFlags.h | 1 + .../entities/src/ParticleEffectEntityItem.cpp | 26 ++++++++++++++++++- .../entities/src/ParticleEffectEntityItem.h | 6 +++++ .../networking/src/udt/PacketHeaders.cpp | 2 +- libraries/networking/src/udt/PacketHeaders.h | 2 +- 9 files changed, 57 insertions(+), 5 deletions(-) diff --git a/examples/example/entities/particlesTest.js b/examples/example/entities/particlesTest.js index f1ae210373..5c0a13c371 100644 --- a/examples/example/entities/particlesTest.js +++ b/examples/example/entities/particlesTest.js @@ -15,7 +15,7 @@ var box, particles, particleExample = -1, - NUM_PARTICLE_EXAMPLES = 9, + NUM_PARTICLE_EXAMPLES = 10, PARTICLE_RADIUS = 0.04; function onClickDownOnEntity(entityID) { @@ -85,11 +85,23 @@ }); break; case 8: + print("Color spread"); + Entities.editEntity(particles, { + alpha: 1.0, + alphaStart: 1.0, + alphaFinish: 1.0, + color: { red: 128, green: 128, blue: 128 }, + colorSpread: { red: 128, green: 0, blue: 0 } + }); + break; + case 9: print("Stop emitting"); Entities.editEntity(particles, { alpha: 1.0, alphaStart: 1.0, alphaFinish: 1.0, + color: { red: 255, green: 255, blue: 255 }, + colorSpread: { red: 0, green: 0, blue: 0 }, animationIsPlaying: false }); break; diff --git a/libraries/entities-renderer/src/RenderableParticleEffectEntityItem.cpp b/libraries/entities-renderer/src/RenderableParticleEffectEntityItem.cpp index be9c28a80d..40648fe26f 100644 --- a/libraries/entities-renderer/src/RenderableParticleEffectEntityItem.cpp +++ b/libraries/entities-renderer/src/RenderableParticleEffectEntityItem.cpp @@ -194,8 +194,8 @@ void RenderableParticleEffectEntityItem::updateRenderItem() { // make a copy of each particle's details std::vector particleDetails; particleDetails.reserve(getLivingParticleCount()); - auto xcolor = getXColor(); for (quint32 i = _particleHeadIndex; i != _particleTailIndex; i = (i + 1) % _maxParticles) { + auto xcolor = _particleColors[i]; auto alpha = (uint8_t)(glm::clamp(_particleAlphas[i] * getLocalRenderAlpha(), 0.0f, 1.0f) * 255.0f); auto rgba = toRGBA(xcolor.red, xcolor.green, xcolor.blue, alpha); particleDetails.push_back(ParticleDetails(_particlePositions[i], _particleRadiuses[i], rgba)); diff --git a/libraries/entities/src/EntityItemProperties.cpp b/libraries/entities/src/EntityItemProperties.cpp index 6d68483388..99008c5da0 100644 --- a/libraries/entities/src/EntityItemProperties.cpp +++ b/libraries/entities/src/EntityItemProperties.cpp @@ -55,6 +55,7 @@ CONSTRUCT_PROPERTY(script, ENTITY_ITEM_DEFAULT_SCRIPT), CONSTRUCT_PROPERTY(scriptTimestamp, ENTITY_ITEM_DEFAULT_SCRIPT_TIMESTAMP), CONSTRUCT_PROPERTY(collisionSoundURL, ENTITY_ITEM_DEFAULT_COLLISION_SOUND_URL), CONSTRUCT_PROPERTY(color, ), +CONSTRUCT_PROPERTY(colorSpread, ParticleEffectEntityItem::DEFAULT_COLOR_SPREAD), CONSTRUCT_PROPERTY(alpha, ENTITY_ITEM_DEFAULT_ALPHA), CONSTRUCT_PROPERTY(alphaStart, ParticleEffectEntityItem::DEFAULT_ALPHA_START), CONSTRUCT_PROPERTY(alphaFinish, ParticleEffectEntityItem::DEFAULT_ALPHA_FINISH), @@ -335,6 +336,7 @@ EntityPropertyFlags EntityItemProperties::getChangedProperties() const { CHECK_PROPERTY_CHANGE(PROP_SCRIPT_TIMESTAMP, scriptTimestamp); CHECK_PROPERTY_CHANGE(PROP_COLLISION_SOUND_URL, collisionSoundURL); CHECK_PROPERTY_CHANGE(PROP_COLOR, color); + CHECK_PROPERTY_CHANGE(PROP_COLOR_SPREAD, colorSpread); CHECK_PROPERTY_CHANGE(PROP_ALPHA, alpha); CHECK_PROPERTY_CHANGE(PROP_ALPHA_START, alphaStart); CHECK_PROPERTY_CHANGE(PROP_ALPHA_FINISH, alphaFinish); @@ -453,6 +455,7 @@ QScriptValue EntityItemProperties::copyToScriptValue(QScriptEngine* engine, bool COPY_PROPERTY_TO_QSCRIPTVALUE(angularDamping); COPY_PROPERTY_TO_QSCRIPTVALUE(visible); COPY_PROPERTY_TO_QSCRIPTVALUE(color); + COPY_PROPERTY_TO_QSCRIPTVALUE(colorSpread); COPY_PROPERTY_TO_QSCRIPTVALUE(alpha); COPY_PROPERTY_TO_QSCRIPTVALUE(alphaStart); COPY_PROPERTY_TO_QSCRIPTVALUE(alphaFinish); @@ -590,6 +593,7 @@ void EntityItemProperties::copyFromScriptValue(const QScriptValue& object, bool COPY_PROPERTY_FROM_QSCRIPTVALUE(angularDamping, float, setAngularDamping); COPY_PROPERTY_FROM_QSCRIPTVALUE(visible, bool, setVisible); COPY_PROPERTY_FROM_QSCRIPTVALUE(color, xColor, setColor); + COPY_PROPERTY_FROM_QSCRIPTVALUE(colorSpread, xColor, setColorSpread); COPY_PROPERTY_FROM_QSCRIPTVALUE(alpha, float, setAlpha); COPY_PROPERTY_FROM_QSCRIPTVALUE(alphaStart, float, setAlphaStart); COPY_PROPERTY_FROM_QSCRIPTVALUE(alphaFinish, float, setAlphaFinish); @@ -881,6 +885,7 @@ bool EntityItemProperties::encodeEntityEditPacket(PacketType::Value command, Ent APPEND_ENTITY_PROPERTY(PROP_RADIUS_START, properties.getRadiusStart()); APPEND_ENTITY_PROPERTY(PROP_RADIUS_FINISH, properties.getRadiusFinish()); APPEND_ENTITY_PROPERTY(PROP_RADIUS_SPREAD, properties.getRadiusSpread()); + APPEND_ENTITY_PROPERTY(PROP_COLOR_SPREAD, properties.getColorSpread()); APPEND_ENTITY_PROPERTY(PROP_ALPHA_START, properties.getAlphaStart()); APPEND_ENTITY_PROPERTY(PROP_ALPHA_FINISH, properties.getAlphaFinish()); APPEND_ENTITY_PROPERTY(PROP_ALPHA_SPREAD, properties.getAlphaSpread()); @@ -1162,6 +1167,7 @@ bool EntityItemProperties::decodeEntityEditPacket(const unsigned char* data, int READ_ENTITY_PROPERTY_TO_PROPERTIES(PROP_RADIUS_START, float, setRadiusStart); READ_ENTITY_PROPERTY_TO_PROPERTIES(PROP_RADIUS_FINISH, float, setRadiusFinish); READ_ENTITY_PROPERTY_TO_PROPERTIES(PROP_RADIUS_SPREAD, float, setRadiusSpread); + READ_ENTITY_PROPERTY_TO_PROPERTIES(PROP_COLOR_SPREAD, xColor, setColorSpread); READ_ENTITY_PROPERTY_TO_PROPERTIES(PROP_ALPHA_START, float, setAlphaStart); READ_ENTITY_PROPERTY_TO_PROPERTIES(PROP_ALPHA_FINISH, float, setAlphaFinish); READ_ENTITY_PROPERTY_TO_PROPERTIES(PROP_ALPHA_SPREAD, float, setAlphaSpread); @@ -1308,6 +1314,7 @@ void EntityItemProperties::markAllChanged() { _radiusStartChanged = true; _radiusFinishChanged = true; _radiusSpreadChanged = true; + _colorSpreadChanged = true; _alphaStartChanged = true; _alphaFinishChanged = true; _alphaSpreadChanged = true; diff --git a/libraries/entities/src/EntityItemProperties.h b/libraries/entities/src/EntityItemProperties.h index 3721e0d9ca..43573c0744 100644 --- a/libraries/entities/src/EntityItemProperties.h +++ b/libraries/entities/src/EntityItemProperties.h @@ -103,6 +103,7 @@ public: DEFINE_PROPERTY(PROP_SCRIPT_TIMESTAMP, ScriptTimestamp, scriptTimestamp, quint64); DEFINE_PROPERTY_REF(PROP_COLLISION_SOUND_URL, CollisionSoundURL, collisionSoundURL, QString); DEFINE_PROPERTY_REF(PROP_COLOR, Color, color, xColor); + DEFINE_PROPERTY(PROP_COLOR_SPREAD, ColorSpread, colorSpread, xColor); DEFINE_PROPERTY(PROP_ALPHA, Alpha, alpha, float); DEFINE_PROPERTY(PROP_ALPHA_START, AlphaStart, alphaStart, float); DEFINE_PROPERTY(PROP_ALPHA_FINISH, AlphaFinish, alphaFinish, float); @@ -298,6 +299,7 @@ inline QDebug operator<<(QDebug debug, const EntityItemProperties& properties) { DEBUG_PROPERTY_IF_CHANGED(debug, properties, ScriptTimestamp, scriptTimestamp, ""); DEBUG_PROPERTY_IF_CHANGED(debug, properties, CollisionSoundURL, collisionSoundURL, ""); DEBUG_PROPERTY_IF_CHANGED(debug, properties, Color, color, ""); + DEBUG_PROPERTY_IF_CHANGED(debug, properties, ColorSpread, colorSpread, ""); DEBUG_PROPERTY_IF_CHANGED(debug, properties, Alpha, alpha, ""); DEBUG_PROPERTY_IF_CHANGED(debug, properties, AlphaStart, alphaStart, ""); DEBUG_PROPERTY_IF_CHANGED(debug, properties, AlphaFinish, alphaFinish, ""); diff --git a/libraries/entities/src/EntityPropertyFlags.h b/libraries/entities/src/EntityPropertyFlags.h index 146f4126a7..4bd6a1cd96 100644 --- a/libraries/entities/src/EntityPropertyFlags.h +++ b/libraries/entities/src/EntityPropertyFlags.h @@ -154,6 +154,7 @@ enum EntityPropertyList { PROP_ALPHA, // Supported by some derived classes //Used by particles + PROP_COLOR_SPREAD, PROP_ALPHA_SPREAD, PROP_ALPHA_START, PROP_ALPHA_FINISH, diff --git a/libraries/entities/src/ParticleEffectEntityItem.cpp b/libraries/entities/src/ParticleEffectEntityItem.cpp index a85a83a4ac..9ae80f098b 100644 --- a/libraries/entities/src/ParticleEffectEntityItem.cpp +++ b/libraries/entities/src/ParticleEffectEntityItem.cpp @@ -43,6 +43,7 @@ #include "ParticleEffectEntityItem.h" const xColor ParticleEffectEntityItem::DEFAULT_COLOR = { 255, 255, 255 }; +const xColor ParticleEffectEntityItem::DEFAULT_COLOR_SPREAD = { 0, 0, 0 }; const float ParticleEffectEntityItem::DEFAULT_ALPHA = 1.0f; const float ParticleEffectEntityItem::ALPHA_UNINITIALIZED = -1.0f; const float ParticleEffectEntityItem::DEFAULT_ALPHA_START = ALPHA_UNINITIALIZED; @@ -90,6 +91,7 @@ ParticleEffectEntityItem::ParticleEffectEntityItem(const EntityItemID& entityIte _textures(DEFAULT_TEXTURES), _texturesChangedFlag(false), _shapeType(SHAPE_TYPE_NONE), + _colorSpread(DEFAULT_COLOR_SPREAD), _alpha(DEFAULT_ALPHA), _alphaStart(DEFAULT_ALPHA_START), _alphaFinish(DEFAULT_ALPHA_FINISH), @@ -102,7 +104,8 @@ ParticleEffectEntityItem::ParticleEffectEntityItem(const EntityItemID& entityIte _radiusStarts(DEFAULT_MAX_PARTICLES, DEFAULT_PARTICLE_RADIUS), _radiusMiddles(DEFAULT_MAX_PARTICLES, DEFAULT_PARTICLE_RADIUS), _radiusFinishes(DEFAULT_MAX_PARTICLES, DEFAULT_PARTICLE_RADIUS), - _alphaStarts(DEFAULT_MAX_PARTICLES, DEFAULT_PARTICLE_RADIUS), + _particleColors(DEFAULT_MAX_PARTICLES, DEFAULT_COLOR), + _alphaStarts(DEFAULT_MAX_PARTICLES, DEFAULT_ALPHA), _alphaMiddles(DEFAULT_MAX_PARTICLES, DEFAULT_ALPHA), _alphaFinishes(DEFAULT_MAX_PARTICLES, DEFAULT_ALPHA), _particleAlphas(DEFAULT_MAX_PARTICLES, DEFAULT_ALPHA), @@ -186,6 +189,7 @@ EntityItemProperties ParticleEffectEntityItem::getProperties() const { COPY_ENTITY_PROPERTY_TO_PROPERTIES(radiusStart, getRadiusStart); COPY_ENTITY_PROPERTY_TO_PROPERTIES(radiusFinish, getRadiusFinish); COPY_ENTITY_PROPERTY_TO_PROPERTIES(radiusSpread, getRadiusSpread); + COPY_ENTITY_PROPERTY_TO_PROPERTIES(colorSpread, getColorSpread); COPY_ENTITY_PROPERTY_TO_PROPERTIES(alphaStart, getAlphaStart); COPY_ENTITY_PROPERTY_TO_PROPERTIES(alphaFinish, getAlphaFinish); COPY_ENTITY_PROPERTY_TO_PROPERTIES(alphaSpread, getAlphaSpread); @@ -216,6 +220,7 @@ bool ParticleEffectEntityItem::setProperties(const EntityItemProperties& propert SET_ENTITY_PROPERTY_FROM_PROPERTIES(radiusStart, setRadiusStart); SET_ENTITY_PROPERTY_FROM_PROPERTIES(radiusFinish, setRadiusFinish); SET_ENTITY_PROPERTY_FROM_PROPERTIES(radiusSpread, setRadiusSpread); + SET_ENTITY_PROPERTY_FROM_PROPERTIES(colorSpread, setColorSpread); SET_ENTITY_PROPERTY_FROM_PROPERTIES(alphaStart, setAlphaStart); SET_ENTITY_PROPERTY_FROM_PROPERTIES(alphaFinish, setAlphaFinish); SET_ENTITY_PROPERTY_FROM_PROPERTIES(alphaSpread, setAlphaSpread); @@ -291,6 +296,10 @@ int ParticleEffectEntityItem::readEntitySubclassDataFromBuffer(const unsigned ch READ_ENTITY_PROPERTY(PROP_RADIUS_SPREAD, float, setRadiusSpread); READ_ENTITY_PROPERTY(PROP_RADIUS_START, float, setRadiusStart); READ_ENTITY_PROPERTY(PROP_RADIUS_FINISH, float, setRadiusFinish); + } + + if (args.bitstreamVersion >= VERSION_ENTITIES_PARTICLE_COLOR_PROPERTIES) { + READ_ENTITY_PROPERTY(PROP_COLOR_SPREAD, xColor, setColorSpread); READ_ENTITY_PROPERTY(PROP_ALPHA, float, setAlpha); READ_ENTITY_PROPERTY(PROP_ALPHA_SPREAD, float, setAlphaSpread); READ_ENTITY_PROPERTY(PROP_ALPHA_START, float, setAlphaStart); @@ -323,6 +332,7 @@ EntityPropertyFlags ParticleEffectEntityItem::getEntityProperties(EncodeBitstrea requestedProperties += PROP_RADIUS_SPREAD; requestedProperties += PROP_RADIUS_START; requestedProperties += PROP_RADIUS_FINISH; + requestedProperties += PROP_COLOR_SPREAD; requestedProperties += PROP_ALPHA; requestedProperties += PROP_ALPHA_SPREAD; requestedProperties += PROP_ALPHA_START; @@ -358,6 +368,7 @@ void ParticleEffectEntityItem::appendSubclassData(OctreePacketData* packetData, APPEND_ENTITY_PROPERTY(PROP_RADIUS_SPREAD, getRadiusSpread()); APPEND_ENTITY_PROPERTY(PROP_RADIUS_START, getRadiusStart()); APPEND_ENTITY_PROPERTY(PROP_RADIUS_FINISH, getRadiusFinish()); + APPEND_ENTITY_PROPERTY(PROP_COLOR_SPREAD, getColorSpread()); APPEND_ENTITY_PROPERTY(PROP_ALPHA, getAlpha()); APPEND_ENTITY_PROPERTY(PROP_ALPHA_SPREAD, getAlphaSpread()); APPEND_ENTITY_PROPERTY(PROP_ALPHA_START, getAlphaStart()); @@ -625,6 +636,18 @@ void ParticleEffectEntityItem::stepSimulation(float deltaTime) { integrateParticle(i, timeLeftInFrame); extendBounds(_particlePositions[i]); + // Color + if (_colorSpread == xColor(xColor{ 0, 0, 0 })) { + _particleColors[i] = getXColor(); + } else { + float spread = 2.0f * randFloat() - 1.0f; + xColor color = getXColor(); + color.red = (int)glm::clamp((float)color.red + spread * (float)_colorSpread.red, 0.0f, 255.0f); + color.green = (int)glm::clamp((float)color.green + spread * (float)_colorSpread.green, 0.0f, 255.0f); + color.blue = (int)glm::clamp((float)color.blue + spread * (float)_colorSpread.blue, 0.0f, 255.0f); + _particleColors[i] = color; + } + // Alpha if (_alphaSpread == 0.0f) { _alphaStarts[i] = getAlphaStart(); @@ -666,6 +689,7 @@ void ParticleEffectEntityItem::setMaxParticles(quint32 maxParticles) { _radiusStarts.resize(_maxParticles); _radiusMiddles.resize(_maxParticles); _radiusFinishes.resize(_maxParticles); + _particleColors.resize(_maxParticles); _particleAlphas.resize(_maxParticles); _alphaStarts.resize(_maxParticles); _alphaMiddles.resize(_maxParticles); diff --git a/libraries/entities/src/ParticleEffectEntityItem.h b/libraries/entities/src/ParticleEffectEntityItem.h index efdedc715d..7f117ca5cd 100644 --- a/libraries/entities/src/ParticleEffectEntityItem.h +++ b/libraries/entities/src/ParticleEffectEntityItem.h @@ -56,6 +56,10 @@ public: _color[BLUE_INDEX] = value.blue; } + static const xColor DEFAULT_COLOR_SPREAD; + void setColorSpread(const xColor colorSpread) { _colorSpread = colorSpread; } + xColor getColorSpread() const { return _colorSpread; } + static const float DEFAULT_ALPHA; void setAlpha(float alpha) { _alpha = alpha; } float getAlpha() const { return _alpha; } @@ -179,6 +183,7 @@ protected: // the properties of this entity rgbColor _color; + xColor _colorSpread; float _alpha; float _alphaStart; float _alphaFinish; @@ -210,6 +215,7 @@ protected: QVector _radiusStarts; QVector _radiusMiddles; QVector _radiusFinishes; + QVector _particleColors; QVector _particleAlphas; QVector _alphaStarts; QVector _alphaMiddles; diff --git a/libraries/networking/src/udt/PacketHeaders.cpp b/libraries/networking/src/udt/PacketHeaders.cpp index 3a2013d367..bb120ce198 100644 --- a/libraries/networking/src/udt/PacketHeaders.cpp +++ b/libraries/networking/src/udt/PacketHeaders.cpp @@ -67,7 +67,7 @@ PacketVersion versionForPacketType(PacketType::Value packetType) { case EntityAdd: case EntityEdit: case EntityData: - return VERSION_ENTITIES_PARTICLE_ALPHA_PROPERTIES; + return VERSION_ENTITIES_PARTICLE_COLOR_PROPERTIES; case AvatarData: return 13; default: diff --git a/libraries/networking/src/udt/PacketHeaders.h b/libraries/networking/src/udt/PacketHeaders.h index e63f7f410b..eb48bc8019 100644 --- a/libraries/networking/src/udt/PacketHeaders.h +++ b/libraries/networking/src/udt/PacketHeaders.h @@ -146,6 +146,6 @@ const PacketVersion VERSION_OCTREE_CENTERED_ORIGIN = 38; const PacketVersion VERSION_ENTITIES_PARTICLE_MODIFICATIONS = 39; const PacketVersion VERSION_ENTITIES_POLYVOX_NEIGHBORS = 40; const PacketVersion VERSION_ENTITIES_PARTICLE_RADIUS_PROPERTIES = 41; -const PacketVersion VERSION_ENTITIES_PARTICLE_ALPHA_PROPERTIES = 42; +const PacketVersion VERSION_ENTITIES_PARTICLE_COLOR_PROPERTIES = 42; #endif // hifi_PacketHeaders_h From 743d79335dd27ffcd4a2aa58cc5935ba802938a6 Mon Sep 17 00:00:00 2001 From: Brad Davis Date: Sat, 5 Sep 2015 23:00:17 -0700 Subject: [PATCH 34/37] Procedural shaders V2 --- examples/shaders/example.fs | 55 ++++ examples/shaders/exampleFloor.fs | 49 ++++ examples/shaders/exampleSphere.fs | 22 ++ examples/shaders/exampleSphereDisco.fs | 17 ++ examples/shaders/exampleUserDataV2.json | 25 ++ examples/shaders/exampleV2.fs | 40 +++ examples/shaders/noise.fs | 39 +++ examples/shaders/scratch.fs | 136 +++++++++ examples/shaders/shadertoyWrapper.fs | 32 +++ examples/shaders/shadertoys/clock.fs | 231 +++++++++++++++ examples/shaders/shadertoys/relentless.fs | 269 ++++++++++++++++++ examples/shaders/shadertoys/topologica.fs | 136 +++++++++ .../src/RenderableBoxEntityItem.cpp | 6 +- .../src/RenderableProceduralItem.cpp | 138 +++++++-- .../src/RenderableProceduralItem.h | 11 +- .../src/RenderableProceduralItemShader.h | 78 +++-- .../src/RenderableSphereEntityItem.cpp | 4 +- libraries/gpu/src/gpu/Batch.h | 2 + libraries/gpu/src/gpu/GLBackend.cpp | 31 ++ libraries/gpu/src/gpu/GLBackend.h | 1 + 20 files changed, 1275 insertions(+), 47 deletions(-) create mode 100644 examples/shaders/example.fs create mode 100644 examples/shaders/exampleFloor.fs create mode 100644 examples/shaders/exampleSphere.fs create mode 100644 examples/shaders/exampleSphereDisco.fs create mode 100644 examples/shaders/exampleUserDataV2.json create mode 100644 examples/shaders/exampleV2.fs create mode 100644 examples/shaders/noise.fs create mode 100644 examples/shaders/scratch.fs create mode 100644 examples/shaders/shadertoyWrapper.fs create mode 100644 examples/shaders/shadertoys/clock.fs create mode 100644 examples/shaders/shadertoys/relentless.fs create mode 100644 examples/shaders/shadertoys/topologica.fs diff --git a/examples/shaders/example.fs b/examples/shaders/example.fs new file mode 100644 index 0000000000..171b692ac5 --- /dev/null +++ b/examples/shaders/example.fs @@ -0,0 +1,55 @@ +#line 2 + +////////////////////////////////// +// +// Available inputs +// +// Uniforms: constant across the whole surface +// +// float iGlobalTime; +// vec3 iWorldScale; +// +// Varyings: Per-pixel attributes that change for every pixel +// +// vec3 _normal +// vec4 _position +// vec2 _texCoord0 // reserved for future use, currently always vec2(0) +// vec3 _color // reserved for future user, currently always vec3(1) +// +///////////////////////////////// + +////////////////////////////////// +// +// Available functions +// +// All GLSL functions from GLSL version 4.10 and usable in fragment shaders +// See Page 8 of this document: https://www.khronos.org/files/opengl41-quick-reference-card.pdf +// +// Additionally the snoise functions defined in WebGL-noise are available +// See https://github.com/ashima/webgl-noise/tree/master/src +// +// float snoise(vec2) +// float snoise(vec3) +// float snoise(vec4) +// + +// Fade from black to white and back again +vec4 getProceduralColor() { + // set intensity to a sine wave with a frequency of 1 Hz + float intensity = sin(iGlobalTime * 3.14159 * 2.0); + + // Raise the wave to move between 0 and 2 + intensity += 1.0; + + // Reducce the amplitude to between 0 and 1 + intensity /= 2.0; + + // Set the base color to blue + vec3 color = vec3(0.0, 0.0, 1.0); + + // Multiply by the intensity + color *= intensity; + + // return the color as a vec 4 + return vec4(color, 1.0); +} diff --git a/examples/shaders/exampleFloor.fs b/examples/shaders/exampleFloor.fs new file mode 100644 index 0000000000..b2fbb34ad2 --- /dev/null +++ b/examples/shaders/exampleFloor.fs @@ -0,0 +1,49 @@ +#line 2 + +// Created by inigo quilez - iq/2014 +// License Creative Commons Attribution-NonCommercial-ShareAlike 3.0 Unported License. + +// { 2d cell id, distance to border, distnace to center ) +vec4 hexagon(vec2 p) { + vec2 q = vec2(p.x * 2.0 * 0.5773503, p.y + p.x * 0.5773503); + + vec2 pi = floor(q); + vec2 pf = fract(q); + + float v = mod(pi.x + pi.y, 3.0); + + float ca = step(1.0, v); + float cb = step(2.0, v); + vec2 ma = step(pf.xy, pf.yx); + + // distance to borders + float e = dot(ma, + 1.0 - pf.yx + ca * (pf.x + pf.y - 1.0) + cb * (pf.yx - 2.0 * pf.xy)); + + // distance to center + p = vec2(q.x + floor(0.5 + p.y / 1.5), 4.0 * p.y / 3.0) * 0.5 + 0.5; + float f = length((fract(p) - 0.5) * vec2(1.0, 0.85)); + + return vec4(pi + ca - cb * ma, e, f); +} + + +float hash1(vec2 p) { + float n = dot(p, vec2(127.1, 311.7)); + return fract(sin(n) * 43758.5453); +} + +vec4 getProceduralColor() { + vec2 uv = _position.xz + 0.5; + vec2 pos = _position.xz * iWorldScale.xz; + // gray + vec4 h = hexagon(8.0 * pos + 0.5); + float n = snoise(vec3(0.3 * h.xy + iGlobalTime * 0.1, iGlobalTime)); + vec3 col = 0.15 + 0.15 * hash1(h.xy + 1.2) * vec3(1.0); + col *= smoothstep(0.10, 0.11, h.z); + col *= smoothstep(0.10, 0.11, h.w); + col *= 1.0 + 0.15 * sin(40.0 * h.z); + col *= 0.75 + 0.5 * h.z * n; + col *= pow(16.0 * uv.x * (1.0 - uv.x) * uv.y * (1.0 - uv.y), 0.1); + return vec4(col, 1.0); +} diff --git a/examples/shaders/exampleSphere.fs b/examples/shaders/exampleSphere.fs new file mode 100644 index 0000000000..ccf11d5d02 --- /dev/null +++ b/examples/shaders/exampleSphere.fs @@ -0,0 +1,22 @@ +#line 2 + +const vec3 RED = vec3(1.0, 0.0, 0.0); +const vec3 GREEN = vec3(0.0, 1.0, 0.0); +const vec3 BLUE = vec3(0.0, 0.0, 1.0); +const vec3 YELLOW = vec3(1.0, 1.0, 0.0); +const vec3 WHITE = vec3(1.0, 1.0, 1.0); + +vec4 getProceduralColor() { + float intensity = 0.0; + for (int i = 0; i < 2; ++i) { + float modifier = pow(2, i); + float noise = snoise(vec4(_position.xyz * 10.0 * modifier, iGlobalTime)); + noise /= modifier; + intensity += noise; + } + intensity /= 2.0; + intensity += 0.5; + vec3 color = (intensity * BLUE) + (1.0 - intensity) * YELLOW; + return vec4(color, 1.0); +} + diff --git a/examples/shaders/exampleSphereDisco.fs b/examples/shaders/exampleSphereDisco.fs new file mode 100644 index 0000000000..ea54b35b42 --- /dev/null +++ b/examples/shaders/exampleSphereDisco.fs @@ -0,0 +1,17 @@ +#line 2 + +float noise(vec3 v) { + return snoise(vec4(v, iGlobalTime)); +} + +vec3 noise3_3(vec3 p) { + float fx = noise(p); + float fy = noise(p + vec3(1345.67, 0, 45.67)); + float fz = noise(p + vec3(0, 134.67, 3245.67)); + return vec3(fx, fy, fz); +} + +vec4 getProceduralColor() { + vec3 color = noise3_3(_position.xyz * 10.0); + return vec4(color, 1.0); +} \ No newline at end of file diff --git a/examples/shaders/exampleUserDataV2.json b/examples/shaders/exampleUserDataV2.json new file mode 100644 index 0000000000..d15ef905b3 --- /dev/null +++ b/examples/shaders/exampleUserDataV2.json @@ -0,0 +1,25 @@ + { + "ProceduralEntity": { + "shaderUrl": "file:///C:/Users/bdavis/Git/hifi/examples/shaders/exampleV2.fs", + // V2 and onwards, shaders must include a version identifier, or they will default + // to V1 behavior + "version": 2, + // Any values specified here will be passed on to uniforms with matching names in + // the shader. Only numbers and arrays of length 1-4 of numbers are supported. + // + // The size of the data must match the size of the uniform: + // a number or 1 value array = 'uniform float' + // 2 value array = 'uniform vec2' + // 3 value array = 'uniform vec3' + // 4 value array = 'uniform vec4' + // + // Uniforms should always be declared in the shader with a default value + // or failure to specify the value here will result in undefined behavior. + "uniforms": { + // uniform float iSpeed = 1.0; + "iSpeed": 2.0, + // uniform vec3 iSize = vec3(1.0); + "iSize": [1.0, 2.0, 4.0] + } + } + } \ No newline at end of file diff --git a/examples/shaders/exampleV2.fs b/examples/shaders/exampleV2.fs new file mode 100644 index 0000000000..8967df09e2 --- /dev/null +++ b/examples/shaders/exampleV2.fs @@ -0,0 +1,40 @@ +const vec3 BLUE = vec3(0.0, 0.0, 1.0); +const vec3 YELLOW = vec3(1.0, 1.0, 0.0); + +uniform float iSpeed = 1.0; +uniform vec3 iSize = vec3(1.0, 1.0, 1.0); + +vec3 getNoiseColor() { + float intensity = 0.0; + vec3 position = _position.xyz; + //position = normalize(position); + float time = iGlobalTime * iSpeed; + for (int i = 0; i < 4; ++i) { + float modifier = pow(2, i); + vec3 noisePosition = position * iSize * 10.0 * modifier; + float noise = snoise(vec4(noisePosition, time)); + noise /= modifier; + intensity += noise; + } + intensity /= 2.0; intensity += 0.5; + return (intensity * BLUE) + (1.0 - intensity) * YELLOW; +} + +// Produce a lit procedural surface +float getProceduralColorsLit(inout vec3 diffuse, inout vec3 specular, inout float shininess) { + vec3 noiseColor = getNoiseColor(); + diffuse = noiseColor; + return 0.0; +} + +// Produce an unlit procedural surface: emulates old behavior +float getProceduralColorsUnlit(inout vec3 diffuse, inout vec3 specular, inout float shininess) { + vec3 noiseColor = getNoiseColor(); + diffuse = vec3(1.0); + specular = noiseColor; + return 1.0; +} + +float getProceduralColors(inout vec3 diffuse, inout vec3 specular, inout float shininess) { + return getProceduralColorsLit(diffuse, specular, shininess); +} \ No newline at end of file diff --git a/examples/shaders/noise.fs b/examples/shaders/noise.fs new file mode 100644 index 0000000000..ae7a8bf081 --- /dev/null +++ b/examples/shaders/noise.fs @@ -0,0 +1,39 @@ +#line 2 + +////////////////////////////////// +// +// Available inputs +// +// Uniforms: constant across the whole surface +// +// float iGlobalTime; +// vec3 iWorldScale; +// +// Varyings: Per-pixel attributes that change for every pixel +// +// vec3 _normal +// vec4 _position +// vec2 _texCoord0 // reserved for future use, currently always vec2(0) +// vec3 _color // reserved for future user, currently always vec3(1) +// +///////////////////////////////// + +////////////////////////////////// +// +// Available functions +// +// All GLSL functions from GLSL version 4.10 and usable in fragment shaders +// See Page 8 of this document: https://www.khronos.org/files/opengl41-quick-reference-card.pdf +// +// Additionally the snoise functions defined in WebGL-noise are available +// See https://github.com/ashima/webgl-noise/tree/master/src +// +// float snoise(vec2) +// float snoise(vec3) +// float snoise(vec4) +// + +// Fade from black to white and back again +vec4 getProceduralColor() { + return vec4(vec3(abs((sin(iGlobalTime * 3.14159) + 1.0) / 2.0)), 1); // vec4(color, 1.0); +} diff --git a/examples/shaders/scratch.fs b/examples/shaders/scratch.fs new file mode 100644 index 0000000000..c402524e6d --- /dev/null +++ b/examples/shaders/scratch.fs @@ -0,0 +1,136 @@ +#line 2 +vec2 iResolution = iWorldScale.xz; +vec2 iMouse = vec2(0); + +// From https://www.shadertoy.com/view/4djXzz + +/*-------------------------------------------------------------------------------------- + License CC0 - http://creativecommons.org/publicdomain/zero/1.0/ + To the extent possible under law, the author(s) have dedicated all copyright and related and neighboring rights to this software to the public domain worldwide. This software is distributed without any warranty. + ---------------------------------------------------------------------------------------- + ^ This means do ANYTHING YOU WANT with this code. Because we are programmers, not lawyers. + -Otavio Good + */ + +// various noise functions +float Hash2d(vec2 uv) +{ + float f = uv.x + uv.y * 47.0; + return fract(cos(f*3.333)*100003.9); +} +float Hash3d(vec3 uv) { + float f = uv.x + uv.y * 37.0 + uv.z * 521.0; + return fract(cos(f * 3.333) * 100003.9); +} +float mixP(float f0, float f1, float a) { + return mix(f0, f1, a * a * (3.0 - 2.0 * a)); +} +const vec2 zeroOne = vec2(0.0, 1.0); +float noise2d(vec2 uv) { + vec2 fr = fract(uv.xy); + vec2 fl = floor(uv.xy); + float h00 = Hash2d(fl); + float h10 = Hash2d(fl + zeroOne.yx); + float h01 = Hash2d(fl + zeroOne); + float h11 = Hash2d(fl + zeroOne.yy); + return mixP(mixP(h00, h10, fr.x), mixP(h01, h11, fr.x), fr.y); +} + +float noise(vec3 uv) { + vec3 fr = fract(uv.xyz); + vec3 fl = floor(uv.xyz); + float h000 = Hash3d(fl); + float h100 = Hash3d(fl + zeroOne.yxx); + float h010 = Hash3d(fl + zeroOne.xyx); + float h110 = Hash3d(fl + zeroOne.yyx); + float h001 = Hash3d(fl + zeroOne.xxy); + float h101 = Hash3d(fl + zeroOne.yxy); + float h011 = Hash3d(fl + zeroOne.xyy); + float h111 = Hash3d(fl + zeroOne.yyy); + return mixP(mixP(mixP(h000, h100, fr.x), mixP(h010, h110, fr.x), fr.y), + mixP(mixP(h001, h101, fr.x), mixP(h011, h111, fr.x), fr.y), fr.z); +} + +float PI = 3.14159265; + +vec3 saturate(vec3 a) { + return clamp(a, 0.0, 1.0); +} +vec2 saturate(vec2 a) { + return clamp(a, 0.0, 1.0); +} +float saturate(float a) { + return clamp(a, 0.0, 1.0); +} + +float Density(vec3 p) { + //float ws = 0.06125*0.125; + //vec3 warp = vec3(noise(p*ws), noise(p*ws + 111.11), noise(p*ws + 7111.11)); + float final = noise(p * 0.06125); // + sin(iGlobalTime)*0.5-1.95 + warp.x*4.0; + float other = noise(p * 0.06125 + 1234.567); + other -= 0.5; + final -= 0.5; + final = 0.1 / (abs(final * final * other)); + final += 0.5; + return final * 0.0001; +} + +void mainImage( out vec4 fragColor, in vec2 fragCoord ) +{ + // ---------------- First, set up the camera rays for ray marching ---------------- + vec2 uv = fragCoord.xy/iResolution.xy * 2.0 - 1.0;// - 0.5; + + // Camera up vector. + vec3 camUp=vec3(0,1,0);// vuv + + // Camera lookat. + vec3 camLookat=vec3(0,0.0,0);// vrp + + float mx=iMouse.x/iResolution.x*PI*2.0 + iGlobalTime * 0.01; + float my=-iMouse.y/iResolution.y*10.0 + sin(iGlobalTime * 0.03)*0.2+0.2;//*PI/2.01; + vec3 camPos=vec3(cos(my)*cos(mx),sin(my),cos(my)*sin(mx))*(200.2);// prp + + // Camera setup. + vec3 camVec=normalize(camLookat - camPos);//vpn + vec3 sideNorm=normalize(cross(camUp, camVec));// u + vec3 upNorm=cross(camVec, sideNorm);//v + vec3 worldFacing=(camPos + camVec);//vcv + vec3 worldPix = worldFacing + uv.x * sideNorm * (iResolution.x/iResolution.y) + uv.y * upNorm;//scrCoord + vec3 relVec = normalize(worldPix - camPos);//scp + + // -------------------------------------------------------------------------------- + float t = 0.0; + float inc = 0.02; + float maxDepth = 70.0; + vec3 pos = vec3(0,0,0); + float density = 0.0; + // ray marching time + for (int i = 0; i < 37; i++)// This is the count of how many times the ray actually marches. + { + if ((t > maxDepth)) break; + pos = camPos + relVec * t; + float temp = Density(pos); + //temp *= saturate(t-1.0); + + inc = 1.9 + temp*0.05;// add temp because this makes it look extra crazy! + density += temp * inc; + t += inc; + } + + // -------------------------------------------------------------------------------- + // Now that we have done our ray marching, let's put some color on this. + vec3 finalColor = vec3(0.01,0.1,1.0)* density*0.2; + + // output the final color with sqrt for "gamma correction" + fragColor = vec4(sqrt(clamp(finalColor, 0.0, 1.0)),1.0); +} + +vec4 getProceduralColor() { + vec4 result; + vec2 position = _position.xz; + position += 0.5; + + mainImage(result, position * iWorldScale.xz); + + return result; +} diff --git a/examples/shaders/shadertoyWrapper.fs b/examples/shaders/shadertoyWrapper.fs new file mode 100644 index 0000000000..f1f7e3d54f --- /dev/null +++ b/examples/shaders/shadertoyWrapper.fs @@ -0,0 +1,32 @@ +vec2 iResolution = iWorldScale.xz; +vec2 iMouse = vec2(0); + +//////////////////////////////////////////////////////////////////////////////////// +// +// REPLACE BELOW +// +// Replace the contents of this section with a shadertoy that includes a mainImage +// function +// +//////////////////////////////////////////////////////////////////////////////////// + +void mainImage( out vec4 fragColor, in vec2 fragCoord ) { + fragColor = vec4(0, 0, 1, 1); +} + +//////////////////////////////////////////////////////////////////////////////////// +// +// REPLACE ABOVE +// +//////////////////////////////////////////////////////////////////////////////////// + + +vec4 getProceduralColor() { + vec4 result; + vec2 position = _position.xz; + position += 0.5; + + mainImage(result, position * iWorldScale.xz); + + return result; +} \ No newline at end of file diff --git a/examples/shaders/shadertoys/clock.fs b/examples/shaders/shadertoys/clock.fs new file mode 100644 index 0000000000..5698cb9130 --- /dev/null +++ b/examples/shaders/shadertoys/clock.fs @@ -0,0 +1,231 @@ +vec2 iResolution = iWorldScale.xz; + +// from https://www.shadertoy.com/view/Xd2XWR + +// Created by Daniel Burke - burito/2014 +// License Creative Commons Attribution-NonCommercial-ShareAlike 3.0 Unported License. + +// Inspiration from Dr Who (2005) S7E13 - The Name of the Doctor + +vec2 rot(vec2 p, float a) +{ + float c = cos(a); + float s = sin(a); + return vec2(p.x*c + p.y*s, + -p.x*s + p.y*c); +} + +float circle(vec2 pos, float radius) +{ + return clamp(((1.0-abs(length(pos)-radius))-0.99)*100.0, 0.0, 1.0); + +} + +float circleFill(vec2 pos, float radius) +{ + return clamp(((1.0-(length(pos)-radius))-0.99)*100.0, 0.0, 1.0); +} + +// Thanks Iñigo Quilez! +float line( in vec2 p, in vec2 a, in vec2 b ) +{ + vec2 pa = -p - a; + vec2 ba = b - a; + float h = clamp( dot(pa,ba)/dot(ba,ba), 0.0, 1.0 ); + float d = length( pa - ba*h ); + + return clamp(((1.0 - d)-0.99)*100.0, 0.0, 1.0); +} + +void mainImage( out vec4 fragColor, in vec2 fragCoord ) +{ + vec2 uv = fragCoord.xy / iResolution.xy; + vec2 p = -1.0 + 2.0 * uv; + p.x *= iResolution.x / iResolution.y; + + vec3 colour = vec3(0); + vec3 white = vec3(1); + + + + float c = circle(p, 0.2); + c += circle(p, 0.1); + c += circle(p, 0.18); + c += circleFill(p, 0.005); + +// c += circle(p, 1.3); + c += circle(p, 1.0); + if(p.x > 0.0)c += circle(p, 0.4); + if(p.x > 0.0)c += circle(p, 0.42); + if(p.x < 0.0)c += circle(p, 0.47); + c += circleFill(p+vec2(0.47, 0.0), 0.02); + c += circleFill(p+vec2(0.84147*0.47, 0.54030*0.47), 0.02); + c += circleFill(p+vec2(0.84147*0.47, -0.54030*0.47), 0.02); + c += circleFill(p+vec2(0.41614*0.47, 0.90929*0.47), 0.02); + c += circleFill(p+vec2(0.41614*0.47, -0.90929*0.47), 0.02); + + float t = iGlobalTime; + float t2 = t * -0.01; + float t3 = t * 0.03; + + vec2 angle1 = vec2(sin(t), cos(t)); + vec2 a = angle1 * 0.7; + + t *= 0.5; + vec2 angle2 = vec2(sin(t), cos(t)); + vec2 b = angle2 * 0.8; + + vec2 angle3 = vec2(sin(t2), cos(t2)); + vec2 d = b + angle3* 0.4; + + vec2 angle4 = vec2(sin(t3), cos(t3)); + vec2 e = angle4 * 0.9; + + vec2 angle5 = vec2(sin(t3+4.0), cos(t3+4.0)); + vec2 f = angle5 * 0.8; + + vec2 angle6 = vec2(sin(t*-0.1+5.0), cos(t*-0.1+5.0)); + vec2 h = angle6 * 0.8; + + + + + + float tt = t * 1.4; + + float tm = mod(tt, 0.5); + float tmt = tt - tm; + if( tm > 0.4) tmt += (tm-0.4)*5.0; + vec2 tangle1 = vec2(sin(tmt), cos(tmt)); + + tt *= 0.8; + tm = mod(tt, 0.6); + float tmt2 = tt - tm; + if( tm > 0.2) tmt2 += (tm-0.2)*1.5; + + vec2 tangle2 = vec2(sin(tmt2*-4.0), cos(tmt2*-4.0)); + + vec2 tangle3 = vec2(sin(tmt2), cos(tmt2)); + + tt = t+3.0; + tm = mod(tt, 0.2); + tmt = tt - tm; + if( tm > 0.1) tmt += (tm-0.1)*2.0; + vec2 tangle4 = vec2(sin(-tmt), cos(-tmt)); tmt += 0.9; + vec2 tangle41 = vec2(sin(-tmt), cos(-tmt)); tmt += 0.5; + vec2 tangle42 = vec2(sin(-tmt), cos(-tmt)); tmt += 0.5; + vec2 tangle43 = vec2(sin(-tmt), cos(-tmt)); tmt += 0.5; + vec2 tangle44 = vec2(sin(-tmt), cos(-tmt)); tmt += 0.5; + vec2 tangle45 = vec2(sin(-tmt), cos(-tmt)); + + tt = iGlobalTime+0.001; + tm = mod(tt, 1.0); + tmt = tt - tm; + if( tm > 0.9) tmt += (tm-0.9)*10.0; + + vec2 tangle51 = 0.17*vec2(sin(-tmt), cos(-tmt)); tmt += 1.0471975511965976; + vec2 tangle52 = 0.17*vec2(sin(-tmt), cos(-tmt)); tmt += 1.0471975511965976; + vec2 tangle53 = 0.17*vec2(sin(-tmt), cos(-tmt)); + + c += line(p, tangle51, -tangle53); + c += line(p, tangle52, tangle51); + c += line(p, tangle53, tangle52); + c += line(p, -tangle51, tangle53); + c += line(p, -tangle52, -tangle51); + c += line(p, -tangle53, -tangle52); + + c += circleFill(p+tangle51, 0.01); + c += circleFill(p+tangle52, 0.01); + c += circleFill(p+tangle53, 0.01); + c += circleFill(p-tangle51, 0.01); + c += circleFill(p-tangle52, 0.01); + c += circleFill(p-tangle53, 0.01); + + + + c += circle(p+a, 0.2); + c += circle(p+a, 0.14); + c += circle(p+a, 0.1); + c += circleFill(p+a, 0.04); + c += circleFill(p+a+tangle3*0.2, 0.025); + + + c += circle(p+a, 0.14); + + + c += circle(p+b, 0.2); + c += circle(p+b, 0.03); + c += circle(p+b, 0.15); + c += circle(p+b, 0.45); + c += circleFill(p+b+tangle1*0.05, 0.01); + c += circleFill(p+b+tangle1*0.09, 0.02); + c += circleFill(p+b+tangle1*0.15, 0.03); + c += circle(p+b+tangle1*-0.15, 0.03); + c += circle(p+b+tangle1*-0.07, 0.015); + + c += circle(p+d, 0.08); + + + c += circle(p+e, 0.08); + + + c += circle(p+f, 0.12); + c += circle(p+f, 0.10); + c += circleFill(p+f+tangle2*0.05, 0.01); + c += circleFill(p+f+tangle2*0.10, 0.01); + c += circle(p+f-tangle2*0.03, 0.01); + c += circleFill(p+f+vec2(0.085), 0.005); + c += circleFill(p+f, 0.005); + + + vec2 g = tangle4 * 0.16; + c += circle(p+h, 0.05); + c += circle(p+h, 0.1); + c += circle(p+h, 0.17); + c += circle(p+h, 0.2); + c += circleFill(p+h+tangle41 *0.16, 0.01); + c += circleFill(p+h+tangle42 *0.16, 0.01); + c += circleFill(p+h+tangle43 *0.16, 0.01); + c += circleFill(p+h+tangle44 *0.16, 0.01); + c += circleFill(p+h+tangle45 *0.16, 0.01); + c += circleFill(p+h+angle1 *0.06, 0.02); + c += circleFill(p+h+tangle43*-0.16, 0.01); + + + c += line(p, vec2(0.0), a); + c += circleFill(p+b, 0.005); + c += circleFill(p+d, 0.005); + c += circleFill(p+e, 0.005); + + c += line(p, b, a); + c += line(p, d, e); + c += line(p, b+tangle1*0.15, e); + c += line(p, e, f+vec2(0.085)); + + c += line(p, h+angle1*0.06, f); + c += line(p, h+tangle43*-0.16, d); + c += line(p, h+tangle42*0.16, e); + + + // of course I'd write a line function that + // doesn't handle perfectly vertical lines + c += line(p, vec2(0.001, -0.5), vec2(0.0001, 0.5)); + c += circleFill(p+vec2(0.001, -0.5), 0.005); + c += circleFill(p+vec2(0.001, 0.5), 0.005); + + c = clamp(c, 0.0, 1.0); + colour = white * c; + + + fragColor = vec4(colour, 1.0); +} + + +vec4 getProceduralColor() { + vec4 result; + vec2 position = _position.xz; + position += 0.5; + + mainImage(result, position * iWorldScale.xz); + return result; +} \ No newline at end of file diff --git a/examples/shaders/shadertoys/relentless.fs b/examples/shaders/shadertoys/relentless.fs new file mode 100644 index 0000000000..c3d4aeb762 --- /dev/null +++ b/examples/shaders/shadertoys/relentless.fs @@ -0,0 +1,269 @@ +vec2 iResolution = iWorldScale.xz; +vec2 iMouse = vec2(0); + +// From https://www.shadertoy.com/view/lss3WS + +// srtuss, 2013 + +// collecting some design ideas for a new game project. +// no raymarching is used. + +// if i could add a custom soundtrack, it'd use this one (essential for desired sensation) +// http://www.youtube.com/watch?v=1uFAu65tZpo + +//#define GREEN_VERSION + +// ** improved camera shaking +// ** cleaned up code +// ** added stuff to the gates + +// ******************************************************************************************* +// Please do NOT use this shader in your own productions/videos/games without my permission! +// If you'd still like to do so, please drop me a mail (stral@aon.at) +// ******************************************************************************************* + +float time = iGlobalTime; + +vec2 rotate(vec2 p, float a) { + return vec2(p.x * cos(a) - p.y * sin(a), p.x * sin(a) + p.y * cos(a)); +} +float box(vec2 p, vec2 b, float r) { + return length(max(abs(p) - b, 0.0)) - r; +} + +// iq's ray-plane-intersection code +vec3 intersect(in vec3 o, in vec3 d, vec3 c, vec3 u, vec3 v) +{ + vec3 q = o - c; + return vec3( + dot(cross(u, v), q), + dot(cross(q, u), d), + dot(cross(v, q), d)) / dot(cross(v, u), d); +} + +// some noise functions for fast developing +float rand11(float p) { + return fract(sin(p * 591.32) * 43758.5357); +} +float rand12(vec2 p) { + return fract(sin(dot(p.xy, vec2(12.9898, 78.233))) * 43758.5357); +} +vec2 rand21(float p) { + return fract(vec2(sin(p * 591.32), cos(p * 391.32))); +} +vec2 rand22(in vec2 p) +{ + return fract(vec2(sin(p.x * 591.32 + p.y * 154.077), cos(p.x * 391.32 + p.y * 49.077))); +} + +float noise11(float p) { + float fl = floor(p); + return mix(rand11(fl), rand11(fl + 1.0), fract(p)); //smoothstep(0.0, 1.0, fract(p))); +} +float fbm11(float p) { + return noise11(p) * 0.5 + noise11(p * 2.0) * 0.25 + noise11(p * 5.0) * 0.125; +} +vec3 noise31(float p) { + return vec3(noise11(p), noise11(p + 18.952), noise11(p - 11.372)) * 2.0 - 1.0; +} + +// something that looks a bit like godrays coming from the surface +float sky(vec3 p) { + float a = atan(p.x, p.z); + float t = time * 0.1; + float v = rand11(floor(a * 4.0 + t)) * 0.5 + rand11(floor(a * 8.0 - t)) * 0.25 + + rand11(floor(a * 16.0 + t)) * 0.125; + return v; +} + +vec3 voronoi(in vec2 x) +{ + vec2 n = floor(x); // grid cell id + vec2 f = fract(x);// grid internal position + vec2 mg;// shortest distance... + vec2 mr;// ..and second shortest distance + float md = 8.0, md2 = 8.0; + for(int j = -1; j <= 1; j ++) + { + for(int i = -1; i <= 1; i ++) + { + vec2 g = vec2(float(i), float(j)); // cell id + vec2 o = rand22(n + g);// offset to edge point + vec2 r = g + o - f; + + float d = max(abs(r.x), abs(r.y));// distance to the edge + + if(d < md) + { md2 = md; md = d; mr = r; mg = g;} + else if(d < md2) + { md2 = d;} + } + } + return vec3(n + mg, md2 - md); +} + +#define A2V(a) vec2(sin((a) * 6.28318531 / 100.0), cos((a) * 6.28318531 / 100.0)) + +float circles(vec2 p) { + float v, w, l, c; + vec2 pp; + l = length(p); + + pp = rotate(p, time * 3.0); + c = max(dot(pp, normalize(vec2(-0.2, 0.5))), + -dot(pp, normalize(vec2(0.2, 0.5)))); + c = min(c, + max(dot(pp, normalize(vec2(0.5, -0.5))), + -dot(pp, normalize(vec2(0.2, -0.5))))); + c = min(c, + max(dot(pp, normalize(vec2(0.3, 0.5))), + -dot(pp, normalize(vec2(0.2, 0.5))))); + + // innerest stuff + v = abs(l - 0.5) - 0.03; + v = max(v, -c); + v = min(v, abs(l - 0.54) - 0.02); + v = min(v, abs(l - 0.64) - 0.05); + + pp = rotate(p, time * -1.333); + c = max(dot(pp, A2V(-5.0)), -dot(pp, A2V(5.0))); + c = min(c, max(dot(pp, A2V(25.0 - 5.0)), -dot(pp, A2V(25.0 + 5.0)))); + c = min(c, max(dot(pp, A2V(50.0 - 5.0)), -dot(pp, A2V(50.0 + 5.0)))); + c = min(c, max(dot(pp, A2V(75.0 - 5.0)), -dot(pp, A2V(75.0 + 5.0)))); + + w = abs(l - 0.83) - 0.09; + v = min(v, max(w, c)); + + return v; +} + +float shade1(float d) { + float v = 1.0 - smoothstep(0.0, mix(0.012, 0.2, 0.0), d); + float g = exp(d * -20.0); + return v + g * 0.5; +} + +void mainImage( out vec4 fragColor, in vec2 fragCoord ) +{ + vec2 uv = fragCoord.xy / iResolution.xy; + uv = uv * 2.0 - 1.0; + uv.x *= iResolution.x / iResolution.y; + + // using an iq styled camera this time :) + // ray origin + vec3 ro = 0.7 * vec3(cos(0.2 * time), 0.0, sin(0.2 * time)); + ro.y = cos(0.6 * time) * 0.3 + 0.65; + // camera look at + vec3 ta = vec3(0.0, 0.2, 0.0); + + // camera shake intensity + float shake = clamp(3.0 * (1.0 - length(ro.yz)), 0.3, 1.0); + float st = mod(time, 10.0) * 143.0; + + // build camera matrix + vec3 ww = normalize(ta - ro + noise31(st) * shake * 0.01); + vec3 uu = normalize(cross(ww, normalize(vec3(0.0, 1.0, 0.2 * sin(time))))); + vec3 vv = normalize(cross(uu, ww)); + // obtain ray direction + vec3 rd = normalize(uv.x * uu + uv.y * vv + 1.0 * ww); + + // shaking and movement + ro += noise31(-st) * shake * 0.015; + ro.x += time * 2.0; + + float inten = 0.0; + + // background + float sd = dot(rd, vec3(0.0, 1.0, 0.0)); + inten = pow(1.0 - abs(sd), 20.0) + pow(sky(rd), 5.0) * step(0.0, rd.y) * 0.2; + + vec3 its; + float v, g; + + // voronoi floor layers + for(int i = 0; i < 4; i ++) + { + float layer = float(i); + its = intersect(ro, rd, vec3(0.0, -5.0 - layer * 5.0, 0.0), vec3(1.0, 0.0, 0.0), vec3(0.0, 0.0, 1.0)); + if(its.x > 0.0) + { + vec3 vo = voronoi((its.yz) * 0.05 + 8.0 * rand21(float(i))); + v = exp(-100.0 * (vo.z - 0.02)); + + float fx = 0.0; + + // add some special fx to lowest layer + if(i == 3) + { + float crd = 0.0; //fract(time * 0.2) * 50.0 - 25.0; + float fxi = cos(vo.x * 0.2 + time * 1.5);//abs(crd - vo.x); + fx = clamp(smoothstep(0.9, 1.0, fxi), 0.0, 0.9) * 1.0 * rand12(vo.xy); + fx *= exp(-3.0 * vo.z) * 2.0; + } + inten += v * 0.1 + fx; + } + } + + // draw the gates, 4 should be enough + float gatex = floor(ro.x / 8.0 + 0.5) * 8.0 + 4.0; + float go = -16.0; + for(int i = 0; i < 4; i ++) + { + its = intersect(ro, rd, vec3(gatex + go, 0.0, 0.0), vec3(0.0, 1.0, 0.0), vec3(0.0, 0.0, 1.0)); + if(dot(its.yz, its.yz) < 2.0 && its.x > 0.0) + { + v = circles(its.yz); + inten += shade1(v); + } + + go += 8.0; + } + + // draw the stream + for(int j = 0; j < 20; j ++) + { + float id = float(j); + + vec3 bp = vec3(0.0, (rand11(id) * 2.0 - 1.0) * 0.25, 0.0); + vec3 its = intersect(ro, rd, bp, vec3(1.0, 0.0, 0.0), vec3(0.0, 0.0, 1.0)); + + if(its.x > 0.0) + { + vec2 pp = its.yz; + float spd = (1.0 + rand11(id) * 3.0) * 2.5; + pp.y += time * spd; + pp += (rand21(id) * 2.0 - 1.0) * vec2(0.3, 1.0); + float rep = rand11(id) + 1.5; + pp.y = mod(pp.y, rep * 2.0) - rep; + float d = box(pp, vec2(0.02, 0.3), 0.1); + float foc = 0.0; + float v = 1.0 - smoothstep(0.0, 0.03, abs(d) - 0.001); + float g = min(exp(d * -20.0), 2.0); + + inten += (v + g * 0.7) * 0.5; + + } + } + + inten *= 0.4 + (sin(time) * 0.5 + 0.5) * 0.6; + + // find a color for the computed intensity +#ifdef GREEN_VERSION + vec3 col = pow(vec3(inten), vec3(2.0, 0.15, 9.0)); +#else + vec3 col = pow(vec3(inten), 1.5 * vec3(0.15, 2.0, 9.0)); +#endif + + fragColor = vec4(col, 1.0); +} + +vec4 getProceduralColor() { + vec4 result; + vec2 position = _position.xz; + position += 0.5; + position.y = 1.0 - position.y; + + mainImage(result, position * iWorldScale.xz); + + return result; +} diff --git a/examples/shaders/shadertoys/topologica.fs b/examples/shaders/shadertoys/topologica.fs new file mode 100644 index 0000000000..c402524e6d --- /dev/null +++ b/examples/shaders/shadertoys/topologica.fs @@ -0,0 +1,136 @@ +#line 2 +vec2 iResolution = iWorldScale.xz; +vec2 iMouse = vec2(0); + +// From https://www.shadertoy.com/view/4djXzz + +/*-------------------------------------------------------------------------------------- + License CC0 - http://creativecommons.org/publicdomain/zero/1.0/ + To the extent possible under law, the author(s) have dedicated all copyright and related and neighboring rights to this software to the public domain worldwide. This software is distributed without any warranty. + ---------------------------------------------------------------------------------------- + ^ This means do ANYTHING YOU WANT with this code. Because we are programmers, not lawyers. + -Otavio Good + */ + +// various noise functions +float Hash2d(vec2 uv) +{ + float f = uv.x + uv.y * 47.0; + return fract(cos(f*3.333)*100003.9); +} +float Hash3d(vec3 uv) { + float f = uv.x + uv.y * 37.0 + uv.z * 521.0; + return fract(cos(f * 3.333) * 100003.9); +} +float mixP(float f0, float f1, float a) { + return mix(f0, f1, a * a * (3.0 - 2.0 * a)); +} +const vec2 zeroOne = vec2(0.0, 1.0); +float noise2d(vec2 uv) { + vec2 fr = fract(uv.xy); + vec2 fl = floor(uv.xy); + float h00 = Hash2d(fl); + float h10 = Hash2d(fl + zeroOne.yx); + float h01 = Hash2d(fl + zeroOne); + float h11 = Hash2d(fl + zeroOne.yy); + return mixP(mixP(h00, h10, fr.x), mixP(h01, h11, fr.x), fr.y); +} + +float noise(vec3 uv) { + vec3 fr = fract(uv.xyz); + vec3 fl = floor(uv.xyz); + float h000 = Hash3d(fl); + float h100 = Hash3d(fl + zeroOne.yxx); + float h010 = Hash3d(fl + zeroOne.xyx); + float h110 = Hash3d(fl + zeroOne.yyx); + float h001 = Hash3d(fl + zeroOne.xxy); + float h101 = Hash3d(fl + zeroOne.yxy); + float h011 = Hash3d(fl + zeroOne.xyy); + float h111 = Hash3d(fl + zeroOne.yyy); + return mixP(mixP(mixP(h000, h100, fr.x), mixP(h010, h110, fr.x), fr.y), + mixP(mixP(h001, h101, fr.x), mixP(h011, h111, fr.x), fr.y), fr.z); +} + +float PI = 3.14159265; + +vec3 saturate(vec3 a) { + return clamp(a, 0.0, 1.0); +} +vec2 saturate(vec2 a) { + return clamp(a, 0.0, 1.0); +} +float saturate(float a) { + return clamp(a, 0.0, 1.0); +} + +float Density(vec3 p) { + //float ws = 0.06125*0.125; + //vec3 warp = vec3(noise(p*ws), noise(p*ws + 111.11), noise(p*ws + 7111.11)); + float final = noise(p * 0.06125); // + sin(iGlobalTime)*0.5-1.95 + warp.x*4.0; + float other = noise(p * 0.06125 + 1234.567); + other -= 0.5; + final -= 0.5; + final = 0.1 / (abs(final * final * other)); + final += 0.5; + return final * 0.0001; +} + +void mainImage( out vec4 fragColor, in vec2 fragCoord ) +{ + // ---------------- First, set up the camera rays for ray marching ---------------- + vec2 uv = fragCoord.xy/iResolution.xy * 2.0 - 1.0;// - 0.5; + + // Camera up vector. + vec3 camUp=vec3(0,1,0);// vuv + + // Camera lookat. + vec3 camLookat=vec3(0,0.0,0);// vrp + + float mx=iMouse.x/iResolution.x*PI*2.0 + iGlobalTime * 0.01; + float my=-iMouse.y/iResolution.y*10.0 + sin(iGlobalTime * 0.03)*0.2+0.2;//*PI/2.01; + vec3 camPos=vec3(cos(my)*cos(mx),sin(my),cos(my)*sin(mx))*(200.2);// prp + + // Camera setup. + vec3 camVec=normalize(camLookat - camPos);//vpn + vec3 sideNorm=normalize(cross(camUp, camVec));// u + vec3 upNorm=cross(camVec, sideNorm);//v + vec3 worldFacing=(camPos + camVec);//vcv + vec3 worldPix = worldFacing + uv.x * sideNorm * (iResolution.x/iResolution.y) + uv.y * upNorm;//scrCoord + vec3 relVec = normalize(worldPix - camPos);//scp + + // -------------------------------------------------------------------------------- + float t = 0.0; + float inc = 0.02; + float maxDepth = 70.0; + vec3 pos = vec3(0,0,0); + float density = 0.0; + // ray marching time + for (int i = 0; i < 37; i++)// This is the count of how many times the ray actually marches. + { + if ((t > maxDepth)) break; + pos = camPos + relVec * t; + float temp = Density(pos); + //temp *= saturate(t-1.0); + + inc = 1.9 + temp*0.05;// add temp because this makes it look extra crazy! + density += temp * inc; + t += inc; + } + + // -------------------------------------------------------------------------------- + // Now that we have done our ray marching, let's put some color on this. + vec3 finalColor = vec3(0.01,0.1,1.0)* density*0.2; + + // output the final color with sqrt for "gamma correction" + fragColor = vec4(sqrt(clamp(finalColor, 0.0, 1.0)),1.0); +} + +vec4 getProceduralColor() { + vec4 result; + vec2 position = _position.xz; + position += 0.5; + + mainImage(result, position * iWorldScale.xz); + + return result; +} diff --git a/libraries/entities-renderer/src/RenderableBoxEntityItem.cpp b/libraries/entities-renderer/src/RenderableBoxEntityItem.cpp index 000a8a5f96..738c677104 100644 --- a/libraries/entities-renderer/src/RenderableBoxEntityItem.cpp +++ b/libraries/entities-renderer/src/RenderableBoxEntityItem.cpp @@ -39,16 +39,16 @@ void RenderableBoxEntityItem::render(RenderArgs* args) { Q_ASSERT(args->_batch); gpu::Batch& batch = *args->_batch; batch.setModelTransform(getTransformToCenter()); // we want to include the scale as well - + glm::vec4 cubeColor(toGlm(getXColor()), getLocalRenderAlpha()); + if (!_procedural) { _procedural.reset(new ProceduralInfo(this)); } if (_procedural->ready()) { _procedural->prepare(batch); - DependencyManager::get()->renderUnitCube(batch); + DependencyManager::get()->renderSolidCube(batch, 1.0f, _procedural->getColor(cubeColor)); } else { - glm::vec4 cubeColor(toGlm(getXColor()), getLocalRenderAlpha()); DependencyManager::get()->renderSolidCube(batch, 1.0f, cubeColor); } diff --git a/libraries/entities-renderer/src/RenderableProceduralItem.cpp b/libraries/entities-renderer/src/RenderableProceduralItem.cpp index bec2b57a71..c88d1410a5 100644 --- a/libraries/entities-renderer/src/RenderableProceduralItem.cpp +++ b/libraries/entities-renderer/src/RenderableProceduralItem.cpp @@ -8,10 +8,11 @@ #include "RenderableProceduralItem.h" -#include -#include #include #include +#include +#include +#include #include #include @@ -26,10 +27,19 @@ static const char* const UNIFORM_TIME_NAME= "iGlobalTime"; static const char* const UNIFORM_SCALE_NAME = "iWorldScale"; static const QString PROCEDURAL_USER_DATA_KEY = "ProceduralEntity"; +static const QString URL_KEY = "shaderUrl"; +static const QString VERSION_KEY = "version"; +static const QString UNIFORMS_KEY = "uniforms"; + RenderableProceduralItem::ProceduralInfo::ProceduralInfo(EntityItem* entity) : _entity(entity) { + parse(); +} + +void RenderableProceduralItem::ProceduralInfo::parse() { + _enabled = false; QJsonObject userData; { - const QString& userDataJson = entity->getUserData(); + const QString& userDataJson = _entity->getUserData(); if (userDataJson.isEmpty()) { return; } @@ -48,30 +58,51 @@ RenderableProceduralItem::ProceduralInfo::ProceduralInfo(EntityItem* entity) : _ // "color" : "#FFFFFF" // } //} - auto proceduralData = userData[PROCEDURAL_USER_DATA_KEY]; if (proceduralData.isNull()) { return; } - auto proceduralDataObject = proceduralData.toObject(); - QString shaderUrl = proceduralDataObject["shaderUrl"].toString(); - _shaderUrl = QUrl(shaderUrl); - if (!_shaderUrl.isValid()) { - qWarning() << "Invalid shader URL: " << shaderUrl; - return; + + parse(proceduralData.toObject()); +} + +void RenderableProceduralItem::ProceduralInfo::parse(const QJsonObject& proceduralData) { + // grab the version number + { + auto version = proceduralData[VERSION_KEY]; + if (version.isDouble()) { + _version = (uint8_t)(floor(version.toDouble())); + } } - if (_shaderUrl.isLocalFile()) { - _shaderPath = _shaderUrl.toLocalFile(); - qDebug() << "Shader path: " << _shaderPath; - if (!QFile(_shaderPath).exists()) { + // Get the path to the shader + { + QString shaderUrl = proceduralData[URL_KEY].toString(); + _shaderUrl = QUrl(shaderUrl); + if (!_shaderUrl.isValid()) { + qWarning() << "Invalid shader URL: " << shaderUrl; return; } - } else { - qDebug() << "Shader url: " << _shaderUrl; - _networkShader = ShaderCache::instance().getShader(_shaderUrl); + + if (_shaderUrl.isLocalFile()) { + _shaderPath = _shaderUrl.toLocalFile(); + qDebug() << "Shader path: " << _shaderPath; + if (!QFile(_shaderPath).exists()) { + return; + } + } else { + qDebug() << "Shader url: " << _shaderUrl; + _networkShader = ShaderCache::instance().getShader(_shaderUrl); + } } + // Grab any custom uniforms + { + auto uniforms = proceduralData[UNIFORMS_KEY]; + if (uniforms.isObject()) { + _uniforms = uniforms.toObject();; + } + } _enabled = true; } @@ -106,11 +137,21 @@ void RenderableProceduralItem::ProceduralInfo::prepare(gpu::Batch& batch) { } if (!_pipeline || _pipelineDirty) { - _pipelineDirty = false; + _pipelineDirty = true; if (!_vertexShader) { _vertexShader = gpu::ShaderPointer(gpu::Shader::createVertex(std::string(simple_vert))); } - QString framentShaderSource = SHADER_TEMPLATE.arg(_shaderSource); + QString framentShaderSource; + switch (_version) { + case 1: + framentShaderSource = SHADER_TEMPLATE_V1.arg(_shaderSource); + break; + + default: + case 2: + framentShaderSource = SHADER_TEMPLATE_V2.arg(_shaderSource); + break; + } _fragmentShader = gpu::ShaderPointer(gpu::Shader::createPixel(std::string(framentShaderSource.toLocal8Bit().data()))); _shader = gpu::ShaderPointer(gpu::Shader::createProgram(_vertexShader, _fragmentShader)); gpu::Shader::BindingSet slotBindings; @@ -129,9 +170,68 @@ void RenderableProceduralItem::ProceduralInfo::prepare(gpu::Batch& batch) { } batch.setPipeline(_pipeline); + + if (_pipelineDirty) { + _pipelineDirty = false; + // Set any userdata specified uniforms + foreach(QString key, _uniforms.keys()) { + std::string uniformName = key.toLocal8Bit().data(); + int32_t slot = _shader->getUniforms().findLocation(uniformName); + if (gpu::Shader::INVALID_LOCATION == slot) { + continue; + } + QJsonValue value = _uniforms[key]; + if (value.isDouble()) { + batch._glUniform1f(slot, value.toDouble()); + } else if (value.isArray()) { + auto valueArray = value.toArray(); + switch (valueArray.size()) { + case 0: + break; + + case 1: + batch._glUniform1f(slot, valueArray[0].toDouble()); + break; + case 2: + batch._glUniform2f(slot, + valueArray[0].toDouble(), + valueArray[1].toDouble()); + break; + case 3: + batch._glUniform3f(slot, + valueArray[0].toDouble(), + valueArray[0].toDouble(), + valueArray[1].toDouble()); + break; + case 4: + default: + batch._glUniform4f(slot, + valueArray[0].toDouble(), + valueArray[1].toDouble(), + valueArray[2].toDouble(), + valueArray[3].toDouble()); + break; + + } + valueArray.size(); + } + } + } + + // Minimize floating point error by doing an integer division to milliseconds, before the floating point division to seconds float time = (float)((usecTimestampNow() - _start) / USECS_PER_MSEC) / MSECS_PER_SECOND; batch._glUniform1f(_timeSlot, time); + + // FIXME move into the 'set once' section, since this doesn't change over time auto scale = _entity->getDimensions(); batch._glUniform3f(_scaleSlot, scale.x, scale.y, scale.z); batch.setResourceTexture(DeferredLightingEffect::NORMAL_FITTING_MAP_SLOT, DependencyManager::get()->getNormalFittingTexture()); } + + +glm::vec4 RenderableProceduralItem::ProceduralInfo::getColor(const glm::vec4& entityColor) { + if (_version == 1) { + return glm::vec4(1); + } + return entityColor; +} \ No newline at end of file diff --git a/libraries/entities-renderer/src/RenderableProceduralItem.h b/libraries/entities-renderer/src/RenderableProceduralItem.h index e42cc81b64..37e827d304 100644 --- a/libraries/entities-renderer/src/RenderableProceduralItem.h +++ b/libraries/entities-renderer/src/RenderableProceduralItem.h @@ -10,9 +10,10 @@ #ifndef hifi_RenderableProcedrualItem_h #define hifi_RenderableProcedrualItem_h +#include #include #include -#include +#include #include #include @@ -20,15 +21,22 @@ #include class EntityItem; +class QJsonObject; class RenderableProceduralItem { protected: + // FIXME better encapsulation + // FIXME better mechanism for extending to things rendered using shaders other than simple.slv struct ProceduralInfo { ProceduralInfo(EntityItem* entity); + void parse(); + void parse(const QJsonObject&); bool ready(); void prepare(gpu::Batch& batch); + glm::vec4 getColor(const glm::vec4& entityColor); bool _enabled{ false }; + uint8_t _version{ 1 }; gpu::PipelinePointer _pipeline; gpu::ShaderPointer _vertexShader; gpu::ShaderPointer _fragmentShader; @@ -43,6 +51,7 @@ protected: uint64_t _start{ 0 }; NetworkShaderPointer _networkShader; EntityItem* _entity; + QJsonObject _uniforms; }; QSharedPointer _procedural; diff --git a/libraries/entities-renderer/src/RenderableProceduralItemShader.h b/libraries/entities-renderer/src/RenderableProceduralItemShader.h index 82ba91cc42..8c9e7c77dd 100644 --- a/libraries/entities-renderer/src/RenderableProceduralItemShader.h +++ b/libraries/entities-renderer/src/RenderableProceduralItemShader.h @@ -16,17 +16,17 @@ // Distributed under the MIT License. See LICENSE file. // https://github.com/ashima/webgl-noise // -const QString SHADER_TEMPLATE = R"SCRIBE(#version 410 core + + +const QString SHADER_COMMON = R"SHADER(#version 410 core layout(location = 0) out vec4 _fragColor0; layout(location = 1) out vec4 _fragColor1; layout(location = 2) out vec4 _fragColor2; // the glow intensity uniform float glowIntensity; - // the alpha threshold uniform float alphaThreshold; - uniform sampler2D normalFittingMap; vec3 bestFitNormal(vec3 normal) { @@ -45,18 +45,6 @@ vec3 bestFitNormal(vec3 normal) { } -const vec3 DEFAULT_SPECULAR = vec3(0.1); -const float DEFAULT_SHININESS = 10; - -void packDeferredFragmentLightmap(vec3 normal, float alpha, vec3 diffuse, vec3 specular, float shininess, vec3 emissive) { - if (alpha != glowIntensity) { - discard; - } - - _fragColor0 = vec4(diffuse.rgb, alpha); - _fragColor1 = vec4(bestFitNormal(normal), 0.5); - _fragColor2 = vec4(emissive, shininess / 128.0); -} float mod289(float x) { return x - floor(x * (1.0 / 289.0)) * 289.0; @@ -314,16 +302,62 @@ uniform vec3 iWorldScale; // the dimensions of the object being rende // TODO document available inputs other than the uniforms // TODO provide world scale in addition to the untransformed position +const vec3 DEFAULT_SPECULAR = vec3(0.1); +const float DEFAULT_SHININESS = 10; + +)SHADER"; + +// V1 shaders, only support emissive +// vec4 getProceduralColor() +const QString SHADER_TEMPLATE_V1 = SHADER_COMMON + R"SCRIBE( + +#line 1001 %1 +#line 317 void main(void) { - vec4 texel = getProceduralColor(); + vec4 emissive = getProceduralColor(); + + float alpha = glowIntensity * emissive.a; + if (alpha != glowIntensity) { + discard; + } + + vec4 diffuse = vec4(_color.rgb, alpha); + vec4 normal = vec4(normalize(bestFitNormal(_normal)), 0.5); + + _fragColor0 = diffuse; + _fragColor1 = normal; + _fragColor2 = vec4(emissive.rgb, DEFAULT_SHININESS / 128.0); +} + +)SCRIBE"; + +// void getProceduralDiffuseAndEmissive(out vec4 diffuse, out vec4 emissive) +const QString SHADER_TEMPLATE_V2 = SHADER_COMMON + R"SCRIBE( +// FIXME should we be doing the swizzle here? +vec3 iResolution = iWorldScale.xzy; + +// FIXME Mouse X,Y coordinates, and Z,W are for the click position if clicked (not supported in High Fidelity at the moment) +vec4 iMouse = vec4(0); + +// FIXME We set the seconds (iDate.w) of iDate to iGlobalTime, which contains the current date in seconds +vec4 iDate = vec4(0, 0, 0, iGlobalTime); + + +#line 1001 +%1 +#line 351 + +void main(void) { + vec3 diffuse = _color.rgb; + vec3 specular = DEFAULT_SPECULAR; + float shininess = DEFAULT_SHININESS; - packDeferredFragmentLightmap( - normalize(_normal), - glowIntensity * texel.a, - _color.rgb, - DEFAULT_SPECULAR, DEFAULT_SHININESS, - texel.rgb); + float emissiveAmount = getProceduralColors(diffuse, specular, shininess); + + _fragColor0 = vec4(diffuse.rgb, 1.0); + _fragColor1 = vec4(bestFitNormal(normalize(_normal.xyz)), 1.0 - (emissiveAmount / 2.0)); + _fragColor2 = vec4(specular, shininess / 128.0); } )SCRIBE"; diff --git a/libraries/entities-renderer/src/RenderableSphereEntityItem.cpp b/libraries/entities-renderer/src/RenderableSphereEntityItem.cpp index 5a93a418f7..3b58397a82 100644 --- a/libraries/entities-renderer/src/RenderableSphereEntityItem.cpp +++ b/libraries/entities-renderer/src/RenderableSphereEntityItem.cpp @@ -50,11 +50,11 @@ void RenderableSphereEntityItem::render(RenderArgs* args) { _procedural.reset(new ProceduralInfo(this)); } + glm::vec4 sphereColor(toGlm(getXColor()), getLocalRenderAlpha()); if (_procedural->ready()) { _procedural->prepare(batch); - DependencyManager::get()->renderSphere(batch, 0.5f, SLICES, STACKS, vec3(1)); + DependencyManager::get()->renderSphere(batch, 0.5f, SLICES, STACKS, _procedural->getColor(sphereColor)); } else { - glm::vec4 sphereColor(toGlm(getXColor()), getLocalRenderAlpha()); DependencyManager::get()->renderSolidSphere(batch, 0.5f, SLICES, STACKS, sphereColor); } diff --git a/libraries/gpu/src/gpu/Batch.h b/libraries/gpu/src/gpu/Batch.h index ca74032c5e..0ecfde44f1 100644 --- a/libraries/gpu/src/gpu/Batch.h +++ b/libraries/gpu/src/gpu/Batch.h @@ -144,6 +144,7 @@ public: void _glUniform1f(int location, float v0); void _glUniform2f(int location, float v0, float v1); void _glUniform3f(int location, float v0, float v1, float v2); + void _glUniform4f(int location, float v0, float v1, float v2, float v3); void _glUniform3fv(int location, int count, const float* value); void _glUniform4fv(int location, int count, const float* value); void _glUniform4iv(int location, int count, const int* value); @@ -192,6 +193,7 @@ public: COMMAND_glUniform1f, COMMAND_glUniform2f, COMMAND_glUniform3f, + COMMAND_glUniform4f, COMMAND_glUniform3fv, COMMAND_glUniform4fv, COMMAND_glUniform4iv, diff --git a/libraries/gpu/src/gpu/GLBackend.cpp b/libraries/gpu/src/gpu/GLBackend.cpp index 2270c0dce7..a8c21125b5 100644 --- a/libraries/gpu/src/gpu/GLBackend.cpp +++ b/libraries/gpu/src/gpu/GLBackend.cpp @@ -56,6 +56,7 @@ GLBackend::CommandCall GLBackend::_commandCalls[Batch::NUM_COMMANDS] = (&::gpu::GLBackend::do_glUniform1f), (&::gpu::GLBackend::do_glUniform2f), (&::gpu::GLBackend::do_glUniform3f), + (&::gpu::GLBackend::do_glUniform4f), (&::gpu::GLBackend::do_glUniform3fv), (&::gpu::GLBackend::do_glUniform4fv), (&::gpu::GLBackend::do_glUniform4iv), @@ -458,6 +459,36 @@ void GLBackend::do_glUniform3f(Batch& batch, uint32 paramOffset) { (void) CHECK_GL_ERROR(); } + +void Batch::_glUniform4f(GLint location, GLfloat v0, GLfloat v1, GLfloat v2, GLfloat v3) { + ADD_COMMAND_GL(glUniform4f); + + _params.push_back(v3); + _params.push_back(v2); + _params.push_back(v1); + _params.push_back(v0); + _params.push_back(location); + + DO_IT_NOW(_glUniform4f, 1); +} + + +void GLBackend::do_glUniform4f(Batch& batch, uint32 paramOffset) { + if (_pipeline._program == 0) { + // We should call updatePipeline() to bind the program but we are not doing that + // because these uniform setters are deprecated and we don;t want to create side effect + return; + } + updatePipeline(); + glUniform4f( + batch._params[paramOffset + 4]._int, + batch._params[paramOffset + 3]._float, + batch._params[paramOffset + 2]._float, + batch._params[paramOffset + 1]._float, + batch._params[paramOffset + 0]._float); + (void)CHECK_GL_ERROR(); +} + void Batch::_glUniform3fv(GLint location, GLsizei count, const GLfloat* value) { ADD_COMMAND_GL(glUniform3fv); diff --git a/libraries/gpu/src/gpu/GLBackend.h b/libraries/gpu/src/gpu/GLBackend.h index c97ea4e615..6d806a7f06 100644 --- a/libraries/gpu/src/gpu/GLBackend.h +++ b/libraries/gpu/src/gpu/GLBackend.h @@ -457,6 +457,7 @@ protected: void do_glUniform1f(Batch& batch, uint32 paramOffset); void do_glUniform2f(Batch& batch, uint32 paramOffset); void do_glUniform3f(Batch& batch, uint32 paramOffset); + void do_glUniform4f(Batch& batch, uint32 paramOffset); void do_glUniform3fv(Batch& batch, uint32 paramOffset); void do_glUniform4fv(Batch& batch, uint32 paramOffset); void do_glUniform4iv(Batch& batch, uint32 paramOffset); From cdd5e68815c6094a31dd9c05614e92d0a27b9848 Mon Sep 17 00:00:00 2001 From: David Rowe Date: Tue, 8 Sep 2015 11:28:53 -0700 Subject: [PATCH 35/37] Add colorStart and colorFinish entity particle properties --- examples/example/entities/particlesTest.js | 16 +++-- .../entities/src/EntityItemProperties.cpp | 14 ++++ libraries/entities/src/EntityItemProperties.h | 6 +- libraries/entities/src/EntityPropertyFlags.h | 2 + .../entities/src/ParticleEffectEntityItem.cpp | 64 +++++++++++++++++-- .../entities/src/ParticleEffectEntityItem.h | 14 ++++ 6 files changed, 103 insertions(+), 13 deletions(-) diff --git a/examples/example/entities/particlesTest.js b/examples/example/entities/particlesTest.js index 5c0a13c371..0d1ea60005 100644 --- a/examples/example/entities/particlesTest.js +++ b/examples/example/entities/particlesTest.js @@ -15,7 +15,7 @@ var box, particles, particleExample = -1, - NUM_PARTICLE_EXAMPLES = 10, + NUM_PARTICLE_EXAMPLES = 11, PARTICLE_RADIUS = 0.04; function onClickDownOnEntity(entityID) { @@ -95,13 +95,19 @@ }); break; case 9: - print("Stop emitting"); + print("Color start and finish"); Entities.editEntity(particles, { - alpha: 1.0, - alphaStart: 1.0, - alphaFinish: 1.0, color: { red: 255, green: 255, blue: 255 }, colorSpread: { red: 0, green: 0, blue: 0 }, + colorStart: { red: 255, green: 0, blue: 0 }, + colorFinish: { red: 0, green: 255, blue: 0 } + }); + break; + case 10: + print("Stop emitting"); + Entities.editEntity(particles, { + colorStart: { red: 255, green: 255, blue: 255 }, + colorFinish: { red: 255, green: 255, blue: 255 }, animationIsPlaying: false }); break; diff --git a/libraries/entities/src/EntityItemProperties.cpp b/libraries/entities/src/EntityItemProperties.cpp index 99008c5da0..66153342e7 100644 --- a/libraries/entities/src/EntityItemProperties.cpp +++ b/libraries/entities/src/EntityItemProperties.cpp @@ -55,6 +55,8 @@ CONSTRUCT_PROPERTY(script, ENTITY_ITEM_DEFAULT_SCRIPT), CONSTRUCT_PROPERTY(scriptTimestamp, ENTITY_ITEM_DEFAULT_SCRIPT_TIMESTAMP), CONSTRUCT_PROPERTY(collisionSoundURL, ENTITY_ITEM_DEFAULT_COLLISION_SOUND_URL), CONSTRUCT_PROPERTY(color, ), +CONSTRUCT_PROPERTY(colorStart, ParticleEffectEntityItem::DEFAULT_COLOR), +CONSTRUCT_PROPERTY(colorFinish, ParticleEffectEntityItem::DEFAULT_COLOR), CONSTRUCT_PROPERTY(colorSpread, ParticleEffectEntityItem::DEFAULT_COLOR_SPREAD), CONSTRUCT_PROPERTY(alpha, ENTITY_ITEM_DEFAULT_ALPHA), CONSTRUCT_PROPERTY(alphaStart, ParticleEffectEntityItem::DEFAULT_ALPHA_START), @@ -336,6 +338,8 @@ EntityPropertyFlags EntityItemProperties::getChangedProperties() const { CHECK_PROPERTY_CHANGE(PROP_SCRIPT_TIMESTAMP, scriptTimestamp); CHECK_PROPERTY_CHANGE(PROP_COLLISION_SOUND_URL, collisionSoundURL); CHECK_PROPERTY_CHANGE(PROP_COLOR, color); + CHECK_PROPERTY_CHANGE(PROP_COLOR_START, colorStart); + CHECK_PROPERTY_CHANGE(PROP_COLOR_FINISH, colorFinish); CHECK_PROPERTY_CHANGE(PROP_COLOR_SPREAD, colorSpread); CHECK_PROPERTY_CHANGE(PROP_ALPHA, alpha); CHECK_PROPERTY_CHANGE(PROP_ALPHA_START, alphaStart); @@ -455,6 +459,8 @@ QScriptValue EntityItemProperties::copyToScriptValue(QScriptEngine* engine, bool COPY_PROPERTY_TO_QSCRIPTVALUE(angularDamping); COPY_PROPERTY_TO_QSCRIPTVALUE(visible); COPY_PROPERTY_TO_QSCRIPTVALUE(color); + COPY_PROPERTY_TO_QSCRIPTVALUE(colorStart); + COPY_PROPERTY_TO_QSCRIPTVALUE(colorFinish); COPY_PROPERTY_TO_QSCRIPTVALUE(colorSpread); COPY_PROPERTY_TO_QSCRIPTVALUE(alpha); COPY_PROPERTY_TO_QSCRIPTVALUE(alphaStart); @@ -593,6 +599,8 @@ void EntityItemProperties::copyFromScriptValue(const QScriptValue& object, bool COPY_PROPERTY_FROM_QSCRIPTVALUE(angularDamping, float, setAngularDamping); COPY_PROPERTY_FROM_QSCRIPTVALUE(visible, bool, setVisible); COPY_PROPERTY_FROM_QSCRIPTVALUE(color, xColor, setColor); + COPY_PROPERTY_FROM_QSCRIPTVALUE(colorStart, xColor, setColorStart); + COPY_PROPERTY_FROM_QSCRIPTVALUE(colorFinish, xColor, setColorFinish); COPY_PROPERTY_FROM_QSCRIPTVALUE(colorSpread, xColor, setColorSpread); COPY_PROPERTY_FROM_QSCRIPTVALUE(alpha, float, setAlpha); COPY_PROPERTY_FROM_QSCRIPTVALUE(alphaStart, float, setAlphaStart); @@ -885,6 +893,8 @@ bool EntityItemProperties::encodeEntityEditPacket(PacketType::Value command, Ent APPEND_ENTITY_PROPERTY(PROP_RADIUS_START, properties.getRadiusStart()); APPEND_ENTITY_PROPERTY(PROP_RADIUS_FINISH, properties.getRadiusFinish()); APPEND_ENTITY_PROPERTY(PROP_RADIUS_SPREAD, properties.getRadiusSpread()); + APPEND_ENTITY_PROPERTY(PROP_COLOR_START, properties.getColorStart()); + APPEND_ENTITY_PROPERTY(PROP_COLOR_FINISH, properties.getColorFinish()); APPEND_ENTITY_PROPERTY(PROP_COLOR_SPREAD, properties.getColorSpread()); APPEND_ENTITY_PROPERTY(PROP_ALPHA_START, properties.getAlphaStart()); APPEND_ENTITY_PROPERTY(PROP_ALPHA_FINISH, properties.getAlphaFinish()); @@ -1167,6 +1177,8 @@ bool EntityItemProperties::decodeEntityEditPacket(const unsigned char* data, int READ_ENTITY_PROPERTY_TO_PROPERTIES(PROP_RADIUS_START, float, setRadiusStart); READ_ENTITY_PROPERTY_TO_PROPERTIES(PROP_RADIUS_FINISH, float, setRadiusFinish); READ_ENTITY_PROPERTY_TO_PROPERTIES(PROP_RADIUS_SPREAD, float, setRadiusSpread); + READ_ENTITY_PROPERTY_TO_PROPERTIES(PROP_COLOR_START, xColor, setColorStart); + READ_ENTITY_PROPERTY_TO_PROPERTIES(PROP_COLOR_FINISH, xColor, setColorFinish); READ_ENTITY_PROPERTY_TO_PROPERTIES(PROP_COLOR_SPREAD, xColor, setColorSpread); READ_ENTITY_PROPERTY_TO_PROPERTIES(PROP_ALPHA_START, float, setAlphaStart); READ_ENTITY_PROPERTY_TO_PROPERTIES(PROP_ALPHA_FINISH, float, setAlphaFinish); @@ -1314,6 +1326,8 @@ void EntityItemProperties::markAllChanged() { _radiusStartChanged = true; _radiusFinishChanged = true; _radiusSpreadChanged = true; + _colorStartChanged = true; + _colorFinishChanged = true; _colorSpreadChanged = true; _alphaStartChanged = true; _alphaFinishChanged = true; diff --git a/libraries/entities/src/EntityItemProperties.h b/libraries/entities/src/EntityItemProperties.h index 43573c0744..1c5913fc88 100644 --- a/libraries/entities/src/EntityItemProperties.h +++ b/libraries/entities/src/EntityItemProperties.h @@ -103,7 +103,9 @@ public: DEFINE_PROPERTY(PROP_SCRIPT_TIMESTAMP, ScriptTimestamp, scriptTimestamp, quint64); DEFINE_PROPERTY_REF(PROP_COLLISION_SOUND_URL, CollisionSoundURL, collisionSoundURL, QString); DEFINE_PROPERTY_REF(PROP_COLOR, Color, color, xColor); - DEFINE_PROPERTY(PROP_COLOR_SPREAD, ColorSpread, colorSpread, xColor); + DEFINE_PROPERTY_REF(PROP_COLOR_START, ColorStart, colorStart, xColor); + DEFINE_PROPERTY_REF(PROP_COLOR_FINISH, ColorFinish, colorFinish, xColor); + DEFINE_PROPERTY_REF(PROP_COLOR_SPREAD, ColorSpread, colorSpread, xColor); DEFINE_PROPERTY(PROP_ALPHA, Alpha, alpha, float); DEFINE_PROPERTY(PROP_ALPHA_START, AlphaStart, alphaStart, float); DEFINE_PROPERTY(PROP_ALPHA_FINISH, AlphaFinish, alphaFinish, float); @@ -299,6 +301,8 @@ inline QDebug operator<<(QDebug debug, const EntityItemProperties& properties) { DEBUG_PROPERTY_IF_CHANGED(debug, properties, ScriptTimestamp, scriptTimestamp, ""); DEBUG_PROPERTY_IF_CHANGED(debug, properties, CollisionSoundURL, collisionSoundURL, ""); DEBUG_PROPERTY_IF_CHANGED(debug, properties, Color, color, ""); + DEBUG_PROPERTY_IF_CHANGED(debug, properties, ColorStart, colorStart, ""); + DEBUG_PROPERTY_IF_CHANGED(debug, properties, ColorFinish, colorFinish, ""); DEBUG_PROPERTY_IF_CHANGED(debug, properties, ColorSpread, colorSpread, ""); DEBUG_PROPERTY_IF_CHANGED(debug, properties, Alpha, alpha, ""); DEBUG_PROPERTY_IF_CHANGED(debug, properties, AlphaStart, alphaStart, ""); diff --git a/libraries/entities/src/EntityPropertyFlags.h b/libraries/entities/src/EntityPropertyFlags.h index 4bd6a1cd96..d4f880ed8f 100644 --- a/libraries/entities/src/EntityPropertyFlags.h +++ b/libraries/entities/src/EntityPropertyFlags.h @@ -155,6 +155,8 @@ enum EntityPropertyList { //Used by particles PROP_COLOR_SPREAD, + PROP_COLOR_START, + PROP_COLOR_FINISH, PROP_ALPHA_SPREAD, PROP_ALPHA_START, PROP_ALPHA_FINISH, diff --git a/libraries/entities/src/ParticleEffectEntityItem.cpp b/libraries/entities/src/ParticleEffectEntityItem.cpp index 9ae80f098b..0686c3a996 100644 --- a/libraries/entities/src/ParticleEffectEntityItem.cpp +++ b/libraries/entities/src/ParticleEffectEntityItem.cpp @@ -91,6 +91,10 @@ ParticleEffectEntityItem::ParticleEffectEntityItem(const EntityItemID& entityIte _textures(DEFAULT_TEXTURES), _texturesChangedFlag(false), _shapeType(SHAPE_TYPE_NONE), + _isColorStartInitialized(false), + _isColorFinishInitialized(false), + _colorStart(DEFAULT_COLOR), + _colorFinish(DEFAULT_COLOR), _colorSpread(DEFAULT_COLOR_SPREAD), _alpha(DEFAULT_ALPHA), _alphaStart(DEFAULT_ALPHA_START), @@ -104,6 +108,9 @@ ParticleEffectEntityItem::ParticleEffectEntityItem(const EntityItemID& entityIte _radiusStarts(DEFAULT_MAX_PARTICLES, DEFAULT_PARTICLE_RADIUS), _radiusMiddles(DEFAULT_MAX_PARTICLES, DEFAULT_PARTICLE_RADIUS), _radiusFinishes(DEFAULT_MAX_PARTICLES, DEFAULT_PARTICLE_RADIUS), + _colorStarts(DEFAULT_MAX_PARTICLES, DEFAULT_COLOR), + _colorMiddles(DEFAULT_MAX_PARTICLES, DEFAULT_COLOR), + _colorFinishes(DEFAULT_MAX_PARTICLES, DEFAULT_COLOR), _particleColors(DEFAULT_MAX_PARTICLES, DEFAULT_COLOR), _alphaStarts(DEFAULT_MAX_PARTICLES, DEFAULT_ALPHA), _alphaMiddles(DEFAULT_MAX_PARTICLES, DEFAULT_ALPHA), @@ -189,6 +196,8 @@ EntityItemProperties ParticleEffectEntityItem::getProperties() const { COPY_ENTITY_PROPERTY_TO_PROPERTIES(radiusStart, getRadiusStart); COPY_ENTITY_PROPERTY_TO_PROPERTIES(radiusFinish, getRadiusFinish); COPY_ENTITY_PROPERTY_TO_PROPERTIES(radiusSpread, getRadiusSpread); + COPY_ENTITY_PROPERTY_TO_PROPERTIES(colorStart, getColorStart); + COPY_ENTITY_PROPERTY_TO_PROPERTIES(colorFinish, getColorFinish); COPY_ENTITY_PROPERTY_TO_PROPERTIES(colorSpread, getColorSpread); COPY_ENTITY_PROPERTY_TO_PROPERTIES(alphaStart, getAlphaStart); COPY_ENTITY_PROPERTY_TO_PROPERTIES(alphaFinish, getAlphaFinish); @@ -220,6 +229,8 @@ bool ParticleEffectEntityItem::setProperties(const EntityItemProperties& propert SET_ENTITY_PROPERTY_FROM_PROPERTIES(radiusStart, setRadiusStart); SET_ENTITY_PROPERTY_FROM_PROPERTIES(radiusFinish, setRadiusFinish); SET_ENTITY_PROPERTY_FROM_PROPERTIES(radiusSpread, setRadiusSpread); + SET_ENTITY_PROPERTY_FROM_PROPERTIES(colorStart, setColorStart); + SET_ENTITY_PROPERTY_FROM_PROPERTIES(colorFinish, setColorFinish); SET_ENTITY_PROPERTY_FROM_PROPERTIES(colorSpread, setColorSpread); SET_ENTITY_PROPERTY_FROM_PROPERTIES(alphaStart, setAlphaStart); SET_ENTITY_PROPERTY_FROM_PROPERTIES(alphaFinish, setAlphaFinish); @@ -300,6 +311,8 @@ int ParticleEffectEntityItem::readEntitySubclassDataFromBuffer(const unsigned ch if (args.bitstreamVersion >= VERSION_ENTITIES_PARTICLE_COLOR_PROPERTIES) { READ_ENTITY_PROPERTY(PROP_COLOR_SPREAD, xColor, setColorSpread); + READ_ENTITY_PROPERTY(PROP_COLOR_START, xColor, setColorStart); + READ_ENTITY_PROPERTY(PROP_COLOR_FINISH, xColor, setColorFinish); READ_ENTITY_PROPERTY(PROP_ALPHA, float, setAlpha); READ_ENTITY_PROPERTY(PROP_ALPHA_SPREAD, float, setAlphaSpread); READ_ENTITY_PROPERTY(PROP_ALPHA_START, float, setAlphaStart); @@ -333,6 +346,8 @@ EntityPropertyFlags ParticleEffectEntityItem::getEntityProperties(EncodeBitstrea requestedProperties += PROP_RADIUS_START; requestedProperties += PROP_RADIUS_FINISH; requestedProperties += PROP_COLOR_SPREAD; + requestedProperties += PROP_COLOR_START; + requestedProperties += PROP_COLOR_FINISH; requestedProperties += PROP_ALPHA; requestedProperties += PROP_ALPHA_SPREAD; requestedProperties += PROP_ALPHA_START; @@ -369,6 +384,8 @@ void ParticleEffectEntityItem::appendSubclassData(OctreePacketData* packetData, APPEND_ENTITY_PROPERTY(PROP_RADIUS_START, getRadiusStart()); APPEND_ENTITY_PROPERTY(PROP_RADIUS_FINISH, getRadiusFinish()); APPEND_ENTITY_PROPERTY(PROP_COLOR_SPREAD, getColorSpread()); + APPEND_ENTITY_PROPERTY(PROP_COLOR_START, getColorStart()); + APPEND_ENTITY_PROPERTY(PROP_COLOR_FINISH, getColorFinish()); APPEND_ENTITY_PROPERTY(PROP_ALPHA, getAlpha()); APPEND_ENTITY_PROPERTY(PROP_ALPHA_SPREAD, getAlphaSpread()); APPEND_ENTITY_PROPERTY(PROP_ALPHA_START, getAlphaStart()); @@ -546,6 +563,18 @@ void ParticleEffectEntityItem::updateRadius(quint32 index, float age) { _particleRadiuses[index] = interpolate(_radiusStarts[index], _radiusMiddles[index], _radiusFinishes[index], age); } +void ParticleEffectEntityItem::updateColor(quint32 index, float age) { + _particleColors[index].red = + (int)glm::clamp(interpolate(_colorStarts[index].red, _colorMiddles[index].red, _colorFinishes[index].red, age), + 0.0f, 255.0f); + _particleColors[index].green = + (int)glm::clamp(interpolate(_colorStarts[index].green, _colorMiddles[index].green, _colorFinishes[index].green, age), + 0.0f, 255.0f); + _particleColors[index].blue = + (int)glm::clamp(interpolate(_colorStarts[index].blue, _colorMiddles[index].blue, _colorFinishes[index].blue, age), + 0.0f, 255.0f); +} + void ParticleEffectEntityItem::updateAlpha(quint32 index, float age) { _particleAlphas[index] = glm::clamp(interpolate(_alphaStarts[index], _alphaMiddles[index], _alphaFinishes[index], age), 0.0f, 1.0f); @@ -585,6 +614,7 @@ void ParticleEffectEntityItem::stepSimulation(float deltaTime) { else { float age = (1.0f - _particleLifetimes[i] / _lifespan); // 0.0 .. 1.0 updateRadius(i, age); + updateColor(i, age); updateAlpha(i, age); integrateParticle(i, deltaTime); extendBounds(_particlePositions[i]); @@ -637,16 +667,33 @@ void ParticleEffectEntityItem::stepSimulation(float deltaTime) { extendBounds(_particlePositions[i]); // Color - if (_colorSpread == xColor(xColor{ 0, 0, 0 })) { - _particleColors[i] = getXColor(); + if (_colorSpread == xColor{ 0, 0, 0 }) { + _colorStarts[i] = getColorStart(); + _colorMiddles[i] = getXColor(); + _colorFinishes[i] = getColorFinish(); } else { + xColor startColor = getColorStart(); + xColor middleColor = getXColor(); + xColor finishColor = getColorFinish(); + float spread = 2.0f * randFloat() - 1.0f; - xColor color = getXColor(); - color.red = (int)glm::clamp((float)color.red + spread * (float)_colorSpread.red, 0.0f, 255.0f); - color.green = (int)glm::clamp((float)color.green + spread * (float)_colorSpread.green, 0.0f, 255.0f); - color.blue = (int)glm::clamp((float)color.blue + spread * (float)_colorSpread.blue, 0.0f, 255.0f); - _particleColors[i] = color; + float spreadMultiplierRed = 1.0f + spread * (float)_colorSpread.red / (float)middleColor.red; + float spreadMultiplierGreen = 1.0f + spread * (float)_colorSpread.green / (float)middleColor.green; + float spreadMultiplierBlue = 1.0f + spread * (float)_colorSpread.blue / (float)middleColor.blue; + + _colorStarts[i].red = (int)glm::clamp(spreadMultiplierRed * (float)startColor.red, 0.0f, 255.0f); + _colorStarts[i].green = (int)glm::clamp(spreadMultiplierGreen * (float)startColor.green, 0.0f, 255.0f); + _colorStarts[i].blue = (int)glm::clamp(spreadMultiplierBlue * (float)startColor.blue, 0.0f, 255.0f); + + _colorMiddles[i].red = (int)glm::clamp(spreadMultiplierRed * (float)middleColor.red, 0.0f, 255.0f); + _colorMiddles[i].green = (int)glm::clamp(spreadMultiplierGreen * (float)middleColor.green, 0.0f, 255.0f); + _colorMiddles[i].blue = (int)glm::clamp(spreadMultiplierBlue * (float)middleColor.blue, 0.0f, 255.0f); + + _colorFinishes[i].red = (int)glm::clamp(spreadMultiplierRed * (float)finishColor.red, 0.0f, 255.0f); + _colorFinishes[i].green = (int)glm::clamp(spreadMultiplierGreen * (float)finishColor.green, 0.0f, 255.0f); + _colorFinishes[i].blue = (int)glm::clamp(spreadMultiplierBlue * (float)finishColor.blue, 0.0f, 255.0f); } + updateColor(i, 0.0f); // Alpha if (_alphaSpread == 0.0f) { @@ -690,6 +737,9 @@ void ParticleEffectEntityItem::setMaxParticles(quint32 maxParticles) { _radiusMiddles.resize(_maxParticles); _radiusFinishes.resize(_maxParticles); _particleColors.resize(_maxParticles); + _colorStarts.resize(_maxParticles); + _colorMiddles.resize(_maxParticles); + _colorFinishes.resize(_maxParticles); _particleAlphas.resize(_maxParticles); _alphaStarts.resize(_maxParticles); _alphaMiddles.resize(_maxParticles); diff --git a/libraries/entities/src/ParticleEffectEntityItem.h b/libraries/entities/src/ParticleEffectEntityItem.h index 7f117ca5cd..9511dde152 100644 --- a/libraries/entities/src/ParticleEffectEntityItem.h +++ b/libraries/entities/src/ParticleEffectEntityItem.h @@ -56,6 +56,14 @@ public: _color[BLUE_INDEX] = value.blue; } + bool _isColorStartInitialized; + void setColorStart(xColor colorStart) { _colorStart = colorStart; _isColorStartInitialized = true; } + xColor getColorStart() const { return _isColorStartInitialized ? _colorStart : getXColor(); } + + bool _isColorFinishInitialized; + void setColorFinish(xColor colorFinish) { _colorFinish = colorFinish; _isColorFinishInitialized = true; } + xColor getColorFinish() const { return _isColorFinishInitialized ? _colorFinish : getXColor(); } + static const xColor DEFAULT_COLOR_SPREAD; void setColorSpread(const xColor colorSpread) { _colorSpread = colorSpread; } xColor getColorSpread() const { return _colorSpread; } @@ -176,6 +184,7 @@ protected: bool isAnimatingSomething() const; void stepSimulation(float deltaTime); void updateRadius(quint32 index, float age); + void updateColor(quint32 index, float age); void updateAlpha(quint32 index, float age); void extendBounds(const glm::vec3& point); void integrateParticle(quint32 index, float deltaTime); @@ -183,6 +192,8 @@ protected: // the properties of this entity rgbColor _color; + xColor _colorStart; + xColor _colorFinish; xColor _colorSpread; float _alpha; float _alphaStart; @@ -216,6 +227,9 @@ protected: QVector _radiusMiddles; QVector _radiusFinishes; QVector _particleColors; + QVector _colorStarts; + QVector _colorMiddles; + QVector _colorFinishes; QVector _particleAlphas; QVector _alphaStarts; QVector _alphaMiddles; From 57c27f70490ec1d3dbeaa0bee3ae387f70c4a3c4 Mon Sep 17 00:00:00 2001 From: Brad Hefta-Gaub Date: Tue, 8 Sep 2015 13:06:20 -0700 Subject: [PATCH 36/37] added an example script that detects being touched by avatars hand --- examples/entityScripts/detectTouchExample.js | 76 ++++++++++++++++++++ examples/libraries/utils.js | 6 ++ 2 files changed, 82 insertions(+) create mode 100644 examples/entityScripts/detectTouchExample.js diff --git a/examples/entityScripts/detectTouchExample.js b/examples/entityScripts/detectTouchExample.js new file mode 100644 index 0000000000..6129dac558 --- /dev/null +++ b/examples/entityScripts/detectTouchExample.js @@ -0,0 +1,76 @@ +// +// detectTouchExample.js +// examples/entityScripts +// +// Created by Brad Hefta-Gaub on 9/3/15. +// Copyright 2015 High Fidelity, Inc. +// +// This is an example of an entity script which when assigned to an entity, will detect when the entity is being touched by the avatars hands +// +// Distributed under the Apache License, Version 2.0. +// See the accompanying file LICENSE or http://www.apache.org/licenses/LICENSE-2.0.html +// + +(function() { + Script.include("../libraries/utils.js"); + + var _this; + + // this is the "constructor" for the entity as a JS object we don't do much here, but we do want to remember + // our this object, so we can access it in cases where we're called without a this (like in the case of various global signals) + DetectTouched = function() { + _this = this; + }; + + DetectTouched.prototype = { + + // update() will be called regulary, because we've hooked the update signal in our preload() function. + // we will check the avatars hand positions and if either hand is in our bounding box, we will notice that + update: function() { + // because the update() signal doesn't have a valid this, we need to use our memorized _this to access our entityID + var entityID = _this.entityID; + + var leftHandPosition = MyAvatar.getLeftPalmPosition(); + var rightHandPosition = MyAvatar.getRightPalmPosition(); + var props = Entities.getEntityProperties(entityID); + var entityMinPoint = props.boundingBox.brn; + var entityMaxPoint = props.boundingBox.tfl; + + if (pointInExtents(leftHandPosition, entityMinPoint, entityMaxPoint) || pointInExtents(rightHandPosition, entityMinPoint, entityMaxPoint)) { + + // remember we're being grabbed so we can detect being released + _this.beingTouched = true; + + // print out that we're being grabbed + print("I'm being touched..."); + + } else if (_this.beingTouched) { + + // if we are not being grabbed, and we previously were, then we were just released, remember that + // and print out a message + _this.beingTouched = false; + print("I'm am no longer being touched..."); + } + }, + + // preload() will be called when the entity has become visible (or known) to the interface + // it gives us a chance to set our local JavaScript object up. In this case it means: + // * remembering our entityID, so we can access it in cases where we're called without an entityID + // * connecting to the update signal so we can check our grabbed state + preload: function(entityID) { + print("preload!"); + this.entityID = entityID; + Script.update.connect(this.update); + }, + + // unload() will be called when our entity is no longer available. It may be because we were deleted, + // or because we've left the domain or quit the application. In all cases we want to unhook our connection + // to the update signal + unload: function(entityID) { + Script.update.disconnect(this.update); + }, + }; + + // entity scripts always need to return a newly constructed object of our type + return new DetectTouched(); +}) diff --git a/examples/libraries/utils.js b/examples/libraries/utils.js index c6143a51a8..10694b11f5 100644 --- a/examples/libraries/utils.js +++ b/examples/libraries/utils.js @@ -146,3 +146,9 @@ getEyeRelativePosition = function(v) { getAvatarRelativeRotation = function(q) { return Quat.multiply(MyAvatar.orientation, q); } + +pointInExtents = function(point, minPoint, maxPoint) { + return (point.x >= minPoint.x && point.x <= maxPoint.x) && + (point.y >= minPoint.y && point.y <= maxPoint.y) && + (point.z >= minPoint.z && point.z <= maxPoint.z); +} \ No newline at end of file From 99c1e06201df8c20d7b094de0498a98d394876e5 Mon Sep 17 00:00:00 2001 From: David Rowe Date: Tue, 8 Sep 2015 13:25:15 -0700 Subject: [PATCH 37/37] Code tidying --- .../entities/src/EntityItemProperties.cpp | 42 +++++----- libraries/entities/src/EntityItemProperties.h | 12 +-- .../entities/src/ParticleEffectEntityItem.cpp | 76 ++++++++++--------- .../entities/src/ParticleEffectEntityItem.h | 30 ++++---- 4 files changed, 82 insertions(+), 78 deletions(-) diff --git a/libraries/entities/src/EntityItemProperties.cpp b/libraries/entities/src/EntityItemProperties.cpp index 66153342e7..eec872153d 100644 --- a/libraries/entities/src/EntityItemProperties.cpp +++ b/libraries/entities/src/EntityItemProperties.cpp @@ -55,13 +55,13 @@ CONSTRUCT_PROPERTY(script, ENTITY_ITEM_DEFAULT_SCRIPT), CONSTRUCT_PROPERTY(scriptTimestamp, ENTITY_ITEM_DEFAULT_SCRIPT_TIMESTAMP), CONSTRUCT_PROPERTY(collisionSoundURL, ENTITY_ITEM_DEFAULT_COLLISION_SOUND_URL), CONSTRUCT_PROPERTY(color, ), +CONSTRUCT_PROPERTY(colorSpread, ParticleEffectEntityItem::DEFAULT_COLOR_SPREAD), CONSTRUCT_PROPERTY(colorStart, ParticleEffectEntityItem::DEFAULT_COLOR), CONSTRUCT_PROPERTY(colorFinish, ParticleEffectEntityItem::DEFAULT_COLOR), -CONSTRUCT_PROPERTY(colorSpread, ParticleEffectEntityItem::DEFAULT_COLOR_SPREAD), CONSTRUCT_PROPERTY(alpha, ENTITY_ITEM_DEFAULT_ALPHA), +CONSTRUCT_PROPERTY(alphaSpread, ParticleEffectEntityItem::DEFAULT_ALPHA_SPREAD), CONSTRUCT_PROPERTY(alphaStart, ParticleEffectEntityItem::DEFAULT_ALPHA_START), CONSTRUCT_PROPERTY(alphaFinish, ParticleEffectEntityItem::DEFAULT_ALPHA_FINISH), -CONSTRUCT_PROPERTY(alphaSpread, ParticleEffectEntityItem::DEFAULT_ALPHA_SPREAD), CONSTRUCT_PROPERTY(modelURL, ""), CONSTRUCT_PROPERTY(compoundShapeURL, ""), CONSTRUCT_PROPERTY(animationURL, ""), @@ -96,9 +96,9 @@ CONSTRUCT_PROPERTY(velocitySpread, ParticleEffectEntityItem::DEFAULT_VELOCITY_SP CONSTRUCT_PROPERTY(emitAcceleration, ParticleEffectEntityItem::DEFAULT_EMIT_ACCELERATION), CONSTRUCT_PROPERTY(accelerationSpread, ParticleEffectEntityItem::DEFAULT_ACCELERATION_SPREAD), CONSTRUCT_PROPERTY(particleRadius, ParticleEffectEntityItem::DEFAULT_PARTICLE_RADIUS), +CONSTRUCT_PROPERTY(radiusSpread, ParticleEffectEntityItem::DEFAULT_RADIUS_SPREAD), CONSTRUCT_PROPERTY(radiusStart, ParticleEffectEntityItem::DEFAULT_RADIUS_START), CONSTRUCT_PROPERTY(radiusFinish, ParticleEffectEntityItem::DEFAULT_RADIUS_FINISH), -CONSTRUCT_PROPERTY(radiusSpread, ParticleEffectEntityItem::DEFAULT_RADIUS_SPREAD), CONSTRUCT_PROPERTY(marketplaceID, ENTITY_ITEM_DEFAULT_MARKETPLACE_ID), CONSTRUCT_PROPERTY(keyLightColor, ZoneEntityItem::DEFAULT_KEYLIGHT_COLOR), CONSTRUCT_PROPERTY(keyLightIntensity, ZoneEntityItem::DEFAULT_KEYLIGHT_INTENSITY), @@ -338,13 +338,13 @@ EntityPropertyFlags EntityItemProperties::getChangedProperties() const { CHECK_PROPERTY_CHANGE(PROP_SCRIPT_TIMESTAMP, scriptTimestamp); CHECK_PROPERTY_CHANGE(PROP_COLLISION_SOUND_URL, collisionSoundURL); CHECK_PROPERTY_CHANGE(PROP_COLOR, color); + CHECK_PROPERTY_CHANGE(PROP_COLOR_SPREAD, colorSpread); CHECK_PROPERTY_CHANGE(PROP_COLOR_START, colorStart); CHECK_PROPERTY_CHANGE(PROP_COLOR_FINISH, colorFinish); - CHECK_PROPERTY_CHANGE(PROP_COLOR_SPREAD, colorSpread); CHECK_PROPERTY_CHANGE(PROP_ALPHA, alpha); + CHECK_PROPERTY_CHANGE(PROP_ALPHA_SPREAD, alphaSpread); CHECK_PROPERTY_CHANGE(PROP_ALPHA_START, alphaStart); CHECK_PROPERTY_CHANGE(PROP_ALPHA_FINISH, alphaFinish); - CHECK_PROPERTY_CHANGE(PROP_ALPHA_SPREAD, alphaSpread); CHECK_PROPERTY_CHANGE(PROP_MODEL_URL, modelURL); CHECK_PROPERTY_CHANGE(PROP_COMPOUND_SHAPE_URL, compoundShapeURL); CHECK_PROPERTY_CHANGE(PROP_ANIMATION_URL, animationURL); @@ -379,9 +379,9 @@ EntityPropertyFlags EntityItemProperties::getChangedProperties() const { CHECK_PROPERTY_CHANGE(PROP_EMIT_ACCELERATION, emitAcceleration); CHECK_PROPERTY_CHANGE(PROP_ACCELERATION_SPREAD, accelerationSpread); CHECK_PROPERTY_CHANGE(PROP_PARTICLE_RADIUS, particleRadius); + CHECK_PROPERTY_CHANGE(PROP_RADIUS_SPREAD, radiusSpread); CHECK_PROPERTY_CHANGE(PROP_RADIUS_START, radiusStart); CHECK_PROPERTY_CHANGE(PROP_RADIUS_FINISH, radiusFinish); - CHECK_PROPERTY_CHANGE(PROP_RADIUS_SPREAD, radiusSpread); CHECK_PROPERTY_CHANGE(PROP_MARKETPLACE_ID, marketplaceID); CHECK_PROPERTY_CHANGE(PROP_NAME, name); CHECK_PROPERTY_CHANGE(PROP_KEYLIGHT_COLOR, keyLightColor); @@ -459,13 +459,13 @@ QScriptValue EntityItemProperties::copyToScriptValue(QScriptEngine* engine, bool COPY_PROPERTY_TO_QSCRIPTVALUE(angularDamping); COPY_PROPERTY_TO_QSCRIPTVALUE(visible); COPY_PROPERTY_TO_QSCRIPTVALUE(color); + COPY_PROPERTY_TO_QSCRIPTVALUE(colorSpread); COPY_PROPERTY_TO_QSCRIPTVALUE(colorStart); COPY_PROPERTY_TO_QSCRIPTVALUE(colorFinish); - COPY_PROPERTY_TO_QSCRIPTVALUE(colorSpread); COPY_PROPERTY_TO_QSCRIPTVALUE(alpha); + COPY_PROPERTY_TO_QSCRIPTVALUE(alphaSpread); COPY_PROPERTY_TO_QSCRIPTVALUE(alphaStart); COPY_PROPERTY_TO_QSCRIPTVALUE(alphaFinish); - COPY_PROPERTY_TO_QSCRIPTVALUE(alphaSpread); COPY_PROPERTY_TO_QSCRIPTVALUE(modelURL); COPY_PROPERTY_TO_QSCRIPTVALUE(compoundShapeURL); COPY_PROPERTY_TO_QSCRIPTVALUE(animationURL); @@ -498,9 +498,9 @@ QScriptValue EntityItemProperties::copyToScriptValue(QScriptEngine* engine, bool COPY_PROPERTY_TO_QSCRIPTVALUE(emitAcceleration); COPY_PROPERTY_TO_QSCRIPTVALUE(accelerationSpread); COPY_PROPERTY_TO_QSCRIPTVALUE(particleRadius); + COPY_PROPERTY_TO_QSCRIPTVALUE(radiusSpread); COPY_PROPERTY_TO_QSCRIPTVALUE(radiusStart); COPY_PROPERTY_TO_QSCRIPTVALUE(radiusFinish); - COPY_PROPERTY_TO_QSCRIPTVALUE(radiusSpread); COPY_PROPERTY_TO_QSCRIPTVALUE(marketplaceID); COPY_PROPERTY_TO_QSCRIPTVALUE(name); COPY_PROPERTY_TO_QSCRIPTVALUE(collisionSoundURL); @@ -599,13 +599,13 @@ void EntityItemProperties::copyFromScriptValue(const QScriptValue& object, bool COPY_PROPERTY_FROM_QSCRIPTVALUE(angularDamping, float, setAngularDamping); COPY_PROPERTY_FROM_QSCRIPTVALUE(visible, bool, setVisible); COPY_PROPERTY_FROM_QSCRIPTVALUE(color, xColor, setColor); + COPY_PROPERTY_FROM_QSCRIPTVALUE(colorSpread, xColor, setColorSpread); COPY_PROPERTY_FROM_QSCRIPTVALUE(colorStart, xColor, setColorStart); COPY_PROPERTY_FROM_QSCRIPTVALUE(colorFinish, xColor, setColorFinish); - COPY_PROPERTY_FROM_QSCRIPTVALUE(colorSpread, xColor, setColorSpread); COPY_PROPERTY_FROM_QSCRIPTVALUE(alpha, float, setAlpha); + COPY_PROPERTY_FROM_QSCRIPTVALUE(alphaSpread, float, setAlphaSpread); COPY_PROPERTY_FROM_QSCRIPTVALUE(alphaStart, float, setAlphaStart); COPY_PROPERTY_FROM_QSCRIPTVALUE(alphaFinish, float, setAlphaFinish); - COPY_PROPERTY_FROM_QSCRIPTVALUE(alphaSpread, float, setAlphaSpread); COPY_PROPERTY_FROM_QSCRIPTVALUE(modelURL, QString, setModelURL); COPY_PROPERTY_FROM_QSCRIPTVALUE(compoundShapeURL, QString, setCompoundShapeURL); COPY_PROPERTY_FROM_QSCRIPTVALUE(animationURL, QString, setAnimationURL); @@ -637,9 +637,9 @@ void EntityItemProperties::copyFromScriptValue(const QScriptValue& object, bool COPY_PROPERTY_FROM_QSCRIPTVALUE(emitAcceleration, glmVec3, setEmitAcceleration); COPY_PROPERTY_FROM_QSCRIPTVALUE(accelerationSpread, glmVec3, setAccelerationSpread); COPY_PROPERTY_FROM_QSCRIPTVALUE(particleRadius, float, setParticleRadius); + COPY_PROPERTY_FROM_QSCRIPTVALUE(radiusSpread, float, setRadiusSpread); COPY_PROPERTY_FROM_QSCRIPTVALUE(radiusStart, float, setRadiusStart); COPY_PROPERTY_FROM_QSCRIPTVALUE(radiusFinish, float, setRadiusFinish); - COPY_PROPERTY_FROM_QSCRIPTVALUE(radiusSpread, float, setRadiusSpread); COPY_PROPERTY_FROM_QSCRIPTVALUE(marketplaceID, QString, setMarketplaceID); COPY_PROPERTY_FROM_QSCRIPTVALUE(name, QString, setName); COPY_PROPERTY_FROM_QSCRIPTVALUE(collisionSoundURL, QString, setCollisionSoundURL); @@ -890,15 +890,15 @@ bool EntityItemProperties::encodeEntityEditPacket(PacketType::Value command, Ent APPEND_ENTITY_PROPERTY(PROP_EMIT_ACCELERATION, properties.getEmitAcceleration()); APPEND_ENTITY_PROPERTY(PROP_ACCELERATION_SPREAD, properties.getAccelerationSpread()); APPEND_ENTITY_PROPERTY(PROP_PARTICLE_RADIUS, properties.getParticleRadius()); + APPEND_ENTITY_PROPERTY(PROP_RADIUS_SPREAD, properties.getRadiusSpread()); APPEND_ENTITY_PROPERTY(PROP_RADIUS_START, properties.getRadiusStart()); APPEND_ENTITY_PROPERTY(PROP_RADIUS_FINISH, properties.getRadiusFinish()); - APPEND_ENTITY_PROPERTY(PROP_RADIUS_SPREAD, properties.getRadiusSpread()); + APPEND_ENTITY_PROPERTY(PROP_COLOR_SPREAD, properties.getColorSpread()); APPEND_ENTITY_PROPERTY(PROP_COLOR_START, properties.getColorStart()); APPEND_ENTITY_PROPERTY(PROP_COLOR_FINISH, properties.getColorFinish()); - APPEND_ENTITY_PROPERTY(PROP_COLOR_SPREAD, properties.getColorSpread()); + APPEND_ENTITY_PROPERTY(PROP_ALPHA_SPREAD, properties.getAlphaSpread()); APPEND_ENTITY_PROPERTY(PROP_ALPHA_START, properties.getAlphaStart()); APPEND_ENTITY_PROPERTY(PROP_ALPHA_FINISH, properties.getAlphaFinish()); - APPEND_ENTITY_PROPERTY(PROP_ALPHA_SPREAD, properties.getAlphaSpread()); } if (properties.getType() == EntityTypes::Zone) { @@ -1174,15 +1174,15 @@ bool EntityItemProperties::decodeEntityEditPacket(const unsigned char* data, int READ_ENTITY_PROPERTY_TO_PROPERTIES(PROP_EMIT_ACCELERATION, glm::vec3, setEmitAcceleration); READ_ENTITY_PROPERTY_TO_PROPERTIES(PROP_ACCELERATION_SPREAD, glm::vec3, setAccelerationSpread); READ_ENTITY_PROPERTY_TO_PROPERTIES(PROP_PARTICLE_RADIUS, float, setParticleRadius); + READ_ENTITY_PROPERTY_TO_PROPERTIES(PROP_RADIUS_SPREAD, float, setRadiusSpread); READ_ENTITY_PROPERTY_TO_PROPERTIES(PROP_RADIUS_START, float, setRadiusStart); READ_ENTITY_PROPERTY_TO_PROPERTIES(PROP_RADIUS_FINISH, float, setRadiusFinish); - READ_ENTITY_PROPERTY_TO_PROPERTIES(PROP_RADIUS_SPREAD, float, setRadiusSpread); + READ_ENTITY_PROPERTY_TO_PROPERTIES(PROP_COLOR_SPREAD, xColor, setColorSpread); READ_ENTITY_PROPERTY_TO_PROPERTIES(PROP_COLOR_START, xColor, setColorStart); READ_ENTITY_PROPERTY_TO_PROPERTIES(PROP_COLOR_FINISH, xColor, setColorFinish); - READ_ENTITY_PROPERTY_TO_PROPERTIES(PROP_COLOR_SPREAD, xColor, setColorSpread); + READ_ENTITY_PROPERTY_TO_PROPERTIES(PROP_ALPHA_SPREAD, float, setAlphaSpread); READ_ENTITY_PROPERTY_TO_PROPERTIES(PROP_ALPHA_START, float, setAlphaStart); READ_ENTITY_PROPERTY_TO_PROPERTIES(PROP_ALPHA_FINISH, float, setAlphaFinish); - READ_ENTITY_PROPERTY_TO_PROPERTIES(PROP_ALPHA_SPREAD, float, setAlphaSpread); } if (properties.getType() == EntityTypes::Zone) { @@ -1323,15 +1323,15 @@ void EntityItemProperties::markAllChanged() { _emitAccelerationChanged = true; _accelerationSpreadChanged = true; _particleRadiusChanged = true; + _radiusSpreadChanged = true; _radiusStartChanged = true; _radiusFinishChanged = true; - _radiusSpreadChanged = true; + _colorSpreadChanged = true; _colorStartChanged = true; _colorFinishChanged = true; - _colorSpreadChanged = true; + _alphaSpreadChanged = true; _alphaStartChanged = true; _alphaFinishChanged = true; - _alphaSpreadChanged = true; _marketplaceIDChanged = true; diff --git a/libraries/entities/src/EntityItemProperties.h b/libraries/entities/src/EntityItemProperties.h index 1c5913fc88..2731ab19d5 100644 --- a/libraries/entities/src/EntityItemProperties.h +++ b/libraries/entities/src/EntityItemProperties.h @@ -103,13 +103,13 @@ public: DEFINE_PROPERTY(PROP_SCRIPT_TIMESTAMP, ScriptTimestamp, scriptTimestamp, quint64); DEFINE_PROPERTY_REF(PROP_COLLISION_SOUND_URL, CollisionSoundURL, collisionSoundURL, QString); DEFINE_PROPERTY_REF(PROP_COLOR, Color, color, xColor); + DEFINE_PROPERTY_REF(PROP_COLOR_SPREAD, ColorSpread, colorSpread, xColor); DEFINE_PROPERTY_REF(PROP_COLOR_START, ColorStart, colorStart, xColor); DEFINE_PROPERTY_REF(PROP_COLOR_FINISH, ColorFinish, colorFinish, xColor); - DEFINE_PROPERTY_REF(PROP_COLOR_SPREAD, ColorSpread, colorSpread, xColor); DEFINE_PROPERTY(PROP_ALPHA, Alpha, alpha, float); + DEFINE_PROPERTY(PROP_ALPHA_SPREAD, AlphaSpread, alphaSpread, float); DEFINE_PROPERTY(PROP_ALPHA_START, AlphaStart, alphaStart, float); DEFINE_PROPERTY(PROP_ALPHA_FINISH, AlphaFinish, alphaFinish, float); - DEFINE_PROPERTY(PROP_ALPHA_SPREAD, AlphaSpread, alphaSpread, float); DEFINE_PROPERTY_REF(PROP_MODEL_URL, ModelURL, modelURL, QString); DEFINE_PROPERTY_REF(PROP_COMPOUND_SHAPE_URL, CompoundShapeURL, compoundShapeURL, QString); DEFINE_PROPERTY_REF(PROP_ANIMATION_URL, AnimationURL, animationURL, QString); @@ -143,9 +143,9 @@ public: DEFINE_PROPERTY(PROP_EMIT_ACCELERATION, EmitAcceleration, emitAcceleration, glm::vec3); DEFINE_PROPERTY(PROP_ACCELERATION_SPREAD, AccelerationSpread, accelerationSpread, glm::vec3); DEFINE_PROPERTY(PROP_PARTICLE_RADIUS, ParticleRadius, particleRadius, float); + DEFINE_PROPERTY(PROP_RADIUS_SPREAD, RadiusSpread, radiusSpread, float); DEFINE_PROPERTY(PROP_RADIUS_START, RadiusStart, radiusStart, float); DEFINE_PROPERTY(PROP_RADIUS_FINISH, RadiusFinish, radiusFinish, float); - DEFINE_PROPERTY(PROP_RADIUS_SPREAD, RadiusSpread, radiusSpread, float); DEFINE_PROPERTY_REF(PROP_MARKETPLACE_ID, MarketplaceID, marketplaceID, QString); DEFINE_PROPERTY_REF(PROP_KEYLIGHT_COLOR, KeyLightColor, keyLightColor, xColor); DEFINE_PROPERTY(PROP_KEYLIGHT_INTENSITY, KeyLightIntensity, keyLightIntensity, float); @@ -301,13 +301,13 @@ inline QDebug operator<<(QDebug debug, const EntityItemProperties& properties) { DEBUG_PROPERTY_IF_CHANGED(debug, properties, ScriptTimestamp, scriptTimestamp, ""); DEBUG_PROPERTY_IF_CHANGED(debug, properties, CollisionSoundURL, collisionSoundURL, ""); DEBUG_PROPERTY_IF_CHANGED(debug, properties, Color, color, ""); + DEBUG_PROPERTY_IF_CHANGED(debug, properties, ColorSpread, colorSpread, ""); DEBUG_PROPERTY_IF_CHANGED(debug, properties, ColorStart, colorStart, ""); DEBUG_PROPERTY_IF_CHANGED(debug, properties, ColorFinish, colorFinish, ""); - DEBUG_PROPERTY_IF_CHANGED(debug, properties, ColorSpread, colorSpread, ""); DEBUG_PROPERTY_IF_CHANGED(debug, properties, Alpha, alpha, ""); + DEBUG_PROPERTY_IF_CHANGED(debug, properties, AlphaSpread, alphaSpread, ""); DEBUG_PROPERTY_IF_CHANGED(debug, properties, AlphaStart, alphaStart, ""); DEBUG_PROPERTY_IF_CHANGED(debug, properties, AlphaFinish, alphaFinish, ""); - DEBUG_PROPERTY_IF_CHANGED(debug, properties, AlphaSpread, alphaSpread, ""); DEBUG_PROPERTY_IF_CHANGED(debug, properties, ModelURL, modelURL, ""); DEBUG_PROPERTY_IF_CHANGED(debug, properties, CompoundShapeURL, compoundShapeURL, ""); DEBUG_PROPERTY_IF_CHANGED(debug, properties, AnimationURL, animationURL, ""); @@ -339,9 +339,9 @@ inline QDebug operator<<(QDebug debug, const EntityItemProperties& properties) { DEBUG_PROPERTY_IF_CHANGED(debug, properties, EmitAcceleration, emitAcceleration, ""); DEBUG_PROPERTY_IF_CHANGED(debug, properties, AccelerationSpread, accelerationSpread, ""); DEBUG_PROPERTY_IF_CHANGED(debug, properties, ParticleRadius, particleRadius, ""); + DEBUG_PROPERTY_IF_CHANGED(debug, properties, RadiusSpread, radiusSpread, ""); DEBUG_PROPERTY_IF_CHANGED(debug, properties, RadiusStart, radiusStart, ""); DEBUG_PROPERTY_IF_CHANGED(debug, properties, RadiusFinish, radiusFinish, ""); - DEBUG_PROPERTY_IF_CHANGED(debug, properties, RadiusSpread, radiusSpread, ""); DEBUG_PROPERTY_IF_CHANGED(debug, properties, MarketplaceID, marketplaceID, ""); DEBUG_PROPERTY_IF_CHANGED(debug, properties, BackgroundMode, backgroundMode, ""); DEBUG_PROPERTY_IF_CHANGED(debug, properties, VoxelVolumeSize, voxelVolumeSize, ""); diff --git a/libraries/entities/src/ParticleEffectEntityItem.cpp b/libraries/entities/src/ParticleEffectEntityItem.cpp index 0686c3a996..dce4445336 100644 --- a/libraries/entities/src/ParticleEffectEntityItem.cpp +++ b/libraries/entities/src/ParticleEffectEntityItem.cpp @@ -45,10 +45,9 @@ const xColor ParticleEffectEntityItem::DEFAULT_COLOR = { 255, 255, 255 }; const xColor ParticleEffectEntityItem::DEFAULT_COLOR_SPREAD = { 0, 0, 0 }; const float ParticleEffectEntityItem::DEFAULT_ALPHA = 1.0f; -const float ParticleEffectEntityItem::ALPHA_UNINITIALIZED = -1.0f; -const float ParticleEffectEntityItem::DEFAULT_ALPHA_START = ALPHA_UNINITIALIZED; -const float ParticleEffectEntityItem::DEFAULT_ALPHA_FINISH = ALPHA_UNINITIALIZED; const float ParticleEffectEntityItem::DEFAULT_ALPHA_SPREAD = 0.0f; +const float ParticleEffectEntityItem::DEFAULT_ALPHA_START = DEFAULT_ALPHA; +const float ParticleEffectEntityItem::DEFAULT_ALPHA_FINISH = DEFAULT_ALPHA; const float ParticleEffectEntityItem::DEFAULT_ANIMATION_FRAME_INDEX = 0.0f; const bool ParticleEffectEntityItem::DEFAULT_ANIMATION_IS_PLAYING = false; const float ParticleEffectEntityItem::DEFAULT_ANIMATION_FPS = 30.0f; @@ -60,10 +59,9 @@ const glm::vec3 ParticleEffectEntityItem::DEFAULT_VELOCITY_SPREAD(3.0f, 0.0f, 3. const glm::vec3 ParticleEffectEntityItem::DEFAULT_EMIT_ACCELERATION(0.0f, -9.8f, 0.0f); const glm::vec3 ParticleEffectEntityItem::DEFAULT_ACCELERATION_SPREAD(0.0f, 0.0f, 0.0f); const float ParticleEffectEntityItem::DEFAULT_PARTICLE_RADIUS = 0.025f; -const float ParticleEffectEntityItem::RADIUS_UNINITIALIZED = -1.0f; -const float ParticleEffectEntityItem::DEFAULT_RADIUS_START = RADIUS_UNINITIALIZED; -const float ParticleEffectEntityItem::DEFAULT_RADIUS_FINISH = RADIUS_UNINITIALIZED; const float ParticleEffectEntityItem::DEFAULT_RADIUS_SPREAD = 0.0f; +const float ParticleEffectEntityItem::DEFAULT_RADIUS_START = DEFAULT_PARTICLE_RADIUS; +const float ParticleEffectEntityItem::DEFAULT_RADIUS_FINISH = DEFAULT_PARTICLE_RADIUS; const QString ParticleEffectEntityItem::DEFAULT_TEXTURES = ""; @@ -82,24 +80,26 @@ ParticleEffectEntityItem::ParticleEffectEntityItem(const EntityItemID& entityIte _emitAcceleration(DEFAULT_EMIT_ACCELERATION), _accelerationSpread(DEFAULT_ACCELERATION_SPREAD), _particleRadius(DEFAULT_PARTICLE_RADIUS), + _radiusSpread(DEFAULT_RADIUS_SPREAD), _radiusStart(DEFAULT_RADIUS_START), _radiusFinish(DEFAULT_RADIUS_FINISH), - _radiusSpread(DEFAULT_RADIUS_SPREAD), _lastAnimated(usecTimestampNow()), _animationLoop(), _animationSettings(), _textures(DEFAULT_TEXTURES), _texturesChangedFlag(false), _shapeType(SHAPE_TYPE_NONE), - _isColorStartInitialized(false), - _isColorFinishInitialized(false), + _colorSpread(DEFAULT_COLOR_SPREAD), _colorStart(DEFAULT_COLOR), _colorFinish(DEFAULT_COLOR), - _colorSpread(DEFAULT_COLOR_SPREAD), + _isColorStartInitialized(false), + _isColorFinishInitialized(false), _alpha(DEFAULT_ALPHA), + _alphaSpread(DEFAULT_ALPHA_SPREAD), _alphaStart(DEFAULT_ALPHA_START), _alphaFinish(DEFAULT_ALPHA_FINISH), - _alphaSpread(DEFAULT_ALPHA_SPREAD), + _isAlphaStartInitialized(false), + _isAlphaFinishInitialized(false), _particleLifetimes(DEFAULT_MAX_PARTICLES, 0.0f), _particlePositions(DEFAULT_MAX_PARTICLES, glm::vec3(0.0f, 0.0f, 0.0f)), _particleVelocities(DEFAULT_MAX_PARTICLES, glm::vec3(0.0f, 0.0f, 0.0f)), @@ -108,14 +108,14 @@ ParticleEffectEntityItem::ParticleEffectEntityItem(const EntityItemID& entityIte _radiusStarts(DEFAULT_MAX_PARTICLES, DEFAULT_PARTICLE_RADIUS), _radiusMiddles(DEFAULT_MAX_PARTICLES, DEFAULT_PARTICLE_RADIUS), _radiusFinishes(DEFAULT_MAX_PARTICLES, DEFAULT_PARTICLE_RADIUS), + _particleColors(DEFAULT_MAX_PARTICLES, DEFAULT_COLOR), _colorStarts(DEFAULT_MAX_PARTICLES, DEFAULT_COLOR), _colorMiddles(DEFAULT_MAX_PARTICLES, DEFAULT_COLOR), _colorFinishes(DEFAULT_MAX_PARTICLES, DEFAULT_COLOR), - _particleColors(DEFAULT_MAX_PARTICLES, DEFAULT_COLOR), + _particleAlphas(DEFAULT_MAX_PARTICLES, DEFAULT_ALPHA), _alphaStarts(DEFAULT_MAX_PARTICLES, DEFAULT_ALPHA), _alphaMiddles(DEFAULT_MAX_PARTICLES, DEFAULT_ALPHA), _alphaFinishes(DEFAULT_MAX_PARTICLES, DEFAULT_ALPHA), - _particleAlphas(DEFAULT_MAX_PARTICLES, DEFAULT_ALPHA), _timeUntilNextEmit(0.0f), _particleHeadIndex(0), _particleTailIndex(0), @@ -193,15 +193,15 @@ EntityItemProperties ParticleEffectEntityItem::getProperties() const { COPY_ENTITY_PROPERTY_TO_PROPERTIES(emitAcceleration, getEmitAcceleration); COPY_ENTITY_PROPERTY_TO_PROPERTIES(accelerationSpread, getAccelerationSpread); COPY_ENTITY_PROPERTY_TO_PROPERTIES(particleRadius, getParticleRadius); + COPY_ENTITY_PROPERTY_TO_PROPERTIES(radiusSpread, getRadiusSpread); COPY_ENTITY_PROPERTY_TO_PROPERTIES(radiusStart, getRadiusStart); COPY_ENTITY_PROPERTY_TO_PROPERTIES(radiusFinish, getRadiusFinish); - COPY_ENTITY_PROPERTY_TO_PROPERTIES(radiusSpread, getRadiusSpread); + COPY_ENTITY_PROPERTY_TO_PROPERTIES(colorSpread, getColorSpread); COPY_ENTITY_PROPERTY_TO_PROPERTIES(colorStart, getColorStart); COPY_ENTITY_PROPERTY_TO_PROPERTIES(colorFinish, getColorFinish); - COPY_ENTITY_PROPERTY_TO_PROPERTIES(colorSpread, getColorSpread); + COPY_ENTITY_PROPERTY_TO_PROPERTIES(alphaSpread, getAlphaSpread); COPY_ENTITY_PROPERTY_TO_PROPERTIES(alphaStart, getAlphaStart); COPY_ENTITY_PROPERTY_TO_PROPERTIES(alphaFinish, getAlphaFinish); - COPY_ENTITY_PROPERTY_TO_PROPERTIES(alphaSpread, getAlphaSpread); COPY_ENTITY_PROPERTY_TO_PROPERTIES(textures, getTextures); return properties; @@ -226,15 +226,15 @@ bool ParticleEffectEntityItem::setProperties(const EntityItemProperties& propert SET_ENTITY_PROPERTY_FROM_PROPERTIES(emitAcceleration, setEmitAcceleration); SET_ENTITY_PROPERTY_FROM_PROPERTIES(accelerationSpread, setAccelerationSpread); SET_ENTITY_PROPERTY_FROM_PROPERTIES(particleRadius, setParticleRadius); + SET_ENTITY_PROPERTY_FROM_PROPERTIES(radiusSpread, setRadiusSpread); SET_ENTITY_PROPERTY_FROM_PROPERTIES(radiusStart, setRadiusStart); SET_ENTITY_PROPERTY_FROM_PROPERTIES(radiusFinish, setRadiusFinish); - SET_ENTITY_PROPERTY_FROM_PROPERTIES(radiusSpread, setRadiusSpread); + SET_ENTITY_PROPERTY_FROM_PROPERTIES(colorSpread, setColorSpread); SET_ENTITY_PROPERTY_FROM_PROPERTIES(colorStart, setColorStart); SET_ENTITY_PROPERTY_FROM_PROPERTIES(colorFinish, setColorFinish); - SET_ENTITY_PROPERTY_FROM_PROPERTIES(colorSpread, setColorSpread); + SET_ENTITY_PROPERTY_FROM_PROPERTIES(alphaSpread, setAlphaSpread); SET_ENTITY_PROPERTY_FROM_PROPERTIES(alphaStart, setAlphaStart); SET_ENTITY_PROPERTY_FROM_PROPERTIES(alphaFinish, setAlphaFinish); - SET_ENTITY_PROPERTY_FROM_PROPERTIES(alphaSpread, setAlphaSpread); SET_ENTITY_PROPERTY_FROM_PROPERTIES(textures, setTextures); if (somethingChanged) { @@ -773,25 +773,29 @@ float ParticleEffectEntityItem::cubicInterpolate(float y0, float y1, float y2, f } float ParticleEffectEntityItem::interpolate(float start, float middle, float finish, float age) { - if (start == middle && middle == finish) { - return middle; - } else { - float y0, y1, y2, y3, u; + float y0, y1, y2, y3, u; - if (age <= 0.5f) { - y1 = start; - y2 = middle; - y3 = finish; - y0 = 2.0f * y1 - y2; - u = 2.0f * age; - } else { - y0 = start; - y1 = middle; - y2 = finish; - y3 = 2.0f * y2 - y1; - u = 2.0f * age - 1.0f; + if (age <= 0.5f) { + if (start == middle) { + return middle; } - return cubicInterpolate(y0, y1, y2, y3, u); + y1 = start; + y2 = middle; + y3 = finish; + y0 = 2.0f * y1 - y2; + u = 2.0f * age; + } else { + if (middle == finish) { + return middle; + } + + y0 = start; + y1 = middle; + y2 = finish; + y3 = 2.0f * y2 - y1; + u = 2.0f * age - 1.0f; } + + return cubicInterpolate(y0, y1, y2, y3, u); } diff --git a/libraries/entities/src/ParticleEffectEntityItem.h b/libraries/entities/src/ParticleEffectEntityItem.h index 9511dde152..4e3c4b57b9 100644 --- a/libraries/entities/src/ParticleEffectEntityItem.h +++ b/libraries/entities/src/ParticleEffectEntityItem.h @@ -57,30 +57,30 @@ public: } bool _isColorStartInitialized; - void setColorStart(xColor colorStart) { _colorStart = colorStart; _isColorStartInitialized = true; } + void setColorStart(const xColor& colorStart) { _colorStart = colorStart; _isColorStartInitialized = true; } xColor getColorStart() const { return _isColorStartInitialized ? _colorStart : getXColor(); } bool _isColorFinishInitialized; - void setColorFinish(xColor colorFinish) { _colorFinish = colorFinish; _isColorFinishInitialized = true; } + void setColorFinish(const xColor& colorFinish) { _colorFinish = colorFinish; _isColorFinishInitialized = true; } xColor getColorFinish() const { return _isColorFinishInitialized ? _colorFinish : getXColor(); } static const xColor DEFAULT_COLOR_SPREAD; - void setColorSpread(const xColor colorSpread) { _colorSpread = colorSpread; } + void setColorSpread(const xColor& colorSpread) { _colorSpread = colorSpread; } xColor getColorSpread() const { return _colorSpread; } static const float DEFAULT_ALPHA; void setAlpha(float alpha) { _alpha = alpha; } float getAlpha() const { return _alpha; } - static const float ALPHA_UNINITIALIZED; - static const float DEFAULT_ALPHA_START; - void setAlphaStart(float alphaStart) { _alphaStart = alphaStart; } - float getAlphaStart() const { return _alphaStart == ALPHA_UNINITIALIZED ? _alpha : _alphaStart; } + bool _isAlphaStartInitialized; + void setAlphaStart(float alphaStart) { _alphaStart = alphaStart; _isAlphaStartInitialized = true; } + float getAlphaStart() const { return _isAlphaStartInitialized ? _alphaStart : _alpha; } static const float DEFAULT_ALPHA_FINISH; - void setAlphaFinish(float alphaFinish) { _alphaFinish = alphaFinish; } - float getAlphaFinish() const { return _alphaFinish == ALPHA_UNINITIALIZED ? _alpha : _alphaFinish; } + bool _isAlphaFinishInitialized; + void setAlphaFinish(float alphaFinish) { _alphaFinish = alphaFinish; _isAlphaFinishInitialized = true; } + float getAlphaFinish() const { return _isAlphaFinishInitialized ? _alphaFinish : _alpha; } static const float DEFAULT_ALPHA_SPREAD; void setAlphaSpread(float alphaSpread) { _alphaSpread = alphaSpread; } @@ -148,15 +148,15 @@ public: void setParticleRadius(float particleRadius) { _particleRadius = particleRadius; } float getParticleRadius() const { return _particleRadius; } - static const float RADIUS_UNINITIALIZED; - static const float DEFAULT_RADIUS_START; - void setRadiusStart(float radiusStart) { _radiusStart = radiusStart; } - float getRadiusStart() const { return _radiusStart == RADIUS_UNINITIALIZED ? _particleRadius : _radiusStart; } + bool _isRadiusStartInitialized; + void setRadiusStart(float radiusStart) { _radiusStart = radiusStart; _isRadiusStartInitialized = true; } + float getRadiusStart() const { return _isRadiusStartInitialized ? _radiusStart : _particleRadius; } static const float DEFAULT_RADIUS_FINISH; - void setRadiusFinish(float radiusFinish) { _radiusFinish = radiusFinish; } - float getRadiusFinish() const { return _radiusFinish == RADIUS_UNINITIALIZED ? _particleRadius : _radiusFinish; } + bool _isRadiusFinishInitialized; + void setRadiusFinish(float radiusFinish) { _radiusFinish = radiusFinish; _isRadiusFinishInitialized = true; } + float getRadiusFinish() const { return _isRadiusFinishInitialized ? _radiusFinish : _particleRadius; } static const float DEFAULT_RADIUS_SPREAD; void setRadiusSpread(float radiusSpread) { _radiusSpread = radiusSpread; }