diff --git a/libraries/entities-renderer/src/RenderablePolyLineEntityItem.cpp b/libraries/entities-renderer/src/RenderablePolyLineEntityItem.cpp index 6278d8c4bd..33fc1726a8 100644 --- a/libraries/entities-renderer/src/RenderablePolyLineEntityItem.cpp +++ b/libraries/entities-renderer/src/RenderablePolyLineEntityItem.cpp @@ -205,7 +205,6 @@ std::vector PolyLineEntityRenderer::updateVertic float uCoord = 0.0f; int finalIndex = size - 1; glm::vec3 binormal; - // float accumulatedDistance = 0.0f; float distanceToLastPoint = 0.0f; float accumulatedStrokeWidth = 0.0f; @@ -213,8 +212,8 @@ std::vector PolyLineEntityRenderer::updateVertic bool doesStrokeWidthVary = false; - for (int i = 0; i < strokeWidths.size(); i++) { - if (i > 1 && strokeWidths[i] != strokeWidths[i - 1]) { + for (int i = 1; i < strokeWidths.size(); i++) { + if (strokeWidths[i] != strokeWidths[i - 1]) { doesStrokeWidthVary = true; break; } @@ -227,9 +226,8 @@ std::vector PolyLineEntityRenderer::updateVertic const auto& color = strokeColors.size() == normals.size() ? strokeColors.at(i) : strokeColors.at(0); int vertexIndex = i * 2; - //if (!isUVModeStretch && vertexIndex >= 2) { + if (!isUVModeStretch && i >= 1) { - //distanceToLastPoint = glm::distance(points.at(vertexIndex), points.at(vertexIndex - 2)); distanceToLastPoint = glm::distance(points.at(i), points.at(i - 1)); accumulatedDistance += distanceToLastPoint; strokeWidth = 2 * strokeWidths[i]; @@ -238,13 +236,17 @@ std::vector PolyLineEntityRenderer::updateVertic //If the stroke varies along the line the texture will stretch more or less depending on the speed //because it looks better than using the same method as below accumulatedStrokeWidth += strokeWidth; - float newUcoord = glm::ceil((textureAspectRatio * accumulatedDistance) / (accumulatedStrokeWidth / i)); - float increaseValue = newUcoord - uCoord; + float increaseValue = 1; + if (accumulatedStrokeWidth != 0) { + float newUcoord = glm::ceil(((1.0f / textureAspectRatio) * accumulatedDistance) / (accumulatedStrokeWidth / i)); + increaseValue = newUcoord - uCoord; + } + increaseValue = increaseValue > 0 ? increaseValue : 1; uCoord += increaseValue; } else { //If the stroke width is constant then the textures should keep the aspect ratio along the line - uCoord = (textureAspectRatio * accumulatedDistance) / strokeWidth; + uCoord = ((1.0f / textureAspectRatio) * accumulatedDistance) / strokeWidth; } } else if (vertexIndex >= 2) { uCoord += uCoordInc; @@ -261,11 +263,7 @@ std::vector PolyLineEntityRenderer::updateVertic } } - - - //const auto v1 = point + binormal; - //const auto v2 = point - binormal; - const auto v1 = points.at(i)+ binormal; + const auto v1 = points.at(i) + binormal; const auto v2 = points.at(i) - binormal; vertices.emplace_back(v1, normal, vec2(uCoord, 0.0f), color); vertices.emplace_back(v2, normal, vec2(uCoord, 1.0f), color); @@ -296,9 +294,7 @@ void PolyLineEntityRenderer::doRender(RenderArgs* args) { float textureWidth = (float)_texture->getOriginalWidth(); float textureHeight = (float)_texture->getOriginalHeight(); if (textureWidth != 0 && textureHeight != 0) { - _textureAspectRatio = textureWidth < textureHeight - ? textureWidth / textureHeight - : textureHeight / textureWidth; + _textureAspectRatio = textureWidth / textureHeight; } batch.setInputFormat(polylineFormat); diff --git a/libraries/entities-renderer/src/RenderablePolyLineEntityItem.h b/libraries/entities-renderer/src/RenderablePolyLineEntityItem.h index b2a11da926..1e27ac9ae7 100644 --- a/libraries/entities-renderer/src/RenderablePolyLineEntityItem.h +++ b/libraries/entities-renderer/src/RenderablePolyLineEntityItem.h @@ -70,7 +70,6 @@ protected: bool _empty{ true }; NetworkTexturePointer _texture; float _textureAspectRatio { 1.0f }; - QVector _vertices; }; diff --git a/libraries/entities/src/EntityItemProperties.cpp b/libraries/entities/src/EntityItemProperties.cpp index 7818e82598..296878bb79 100644 --- a/libraries/entities/src/EntityItemProperties.cpp +++ b/libraries/entities/src/EntityItemProperties.cpp @@ -541,7 +541,7 @@ QScriptValue EntityItemProperties::copyToScriptValue(QScriptEngine* engine, bool COPY_PROPERTY_TO_QSCRIPTVALUE(PROP_STROKE_COLORS, strokeColors); COPY_PROPERTY_TO_QSCRIPTVALUE(PROP_STROKE_WIDTHS, strokeWidths); COPY_PROPERTY_TO_QSCRIPTVALUE(PROP_TEXTURES, textures); - COPY_PROPERTY_TO_QSCRIPTVALUE(PROP_IS_UV_MODE_STRETCH, isUVModeStretch); + COPY_PROPERTY_TO_QSCRIPTVALUE(PROP_IS_UV_MODE_STRETCH, isUVModeStretch); } if (!skipDefaults && !strictSemantics) { @@ -693,7 +693,7 @@ void EntityItemProperties::copyFromScriptValue(const QScriptValue& object, bool COPY_PROPERTY_FROM_QSCRIPTVALUE(normals, qVectorVec3, setNormals); COPY_PROPERTY_FROM_QSCRIPTVALUE(strokeColors, qVectorVec3, setStrokeColors); COPY_PROPERTY_FROM_QSCRIPTVALUE(strokeWidths,qVectorFloat, setStrokeWidths); - COPY_PROPERTY_FROM_QSCRIPTVALUE(isUVModeStretch, bool, setIsUVModeStretch); + COPY_PROPERTY_FROM_QSCRIPTVALUE(isUVModeStretch, bool, setIsUVModeStretch); if (!honorReadOnly) { @@ -834,7 +834,7 @@ void EntityItemProperties::merge(const EntityItemProperties& other) { COPY_PROPERTY_IF_CHANGED(normals); COPY_PROPERTY_IF_CHANGED(strokeColors); COPY_PROPERTY_IF_CHANGED(strokeWidths); - COPY_PROPERTY_IF_CHANGED(isUVModeStretch); + COPY_PROPERTY_IF_CHANGED(isUVModeStretch); COPY_PROPERTY_IF_CHANGED(created); _animation.merge(other._animation); @@ -1010,7 +1010,7 @@ void EntityItemProperties::entityPropertyFlagsFromScriptValue(const QScriptValue ADD_PROPERTY_TO_MAP(PROP_NORMALS, Normals, normals, QVector); ADD_PROPERTY_TO_MAP(PROP_STROKE_COLORS, StrokeColors, strokeColors, QVector); ADD_PROPERTY_TO_MAP(PROP_STROKE_WIDTHS, StrokeWidths, strokeWidths, QVector); - ADD_PROPERTY_TO_MAP(PROP_IS_UV_MODE_STRETCH, IsUVModeStretch, isUVModeStretch, QVector); + ADD_PROPERTY_TO_MAP(PROP_IS_UV_MODE_STRETCH, IsUVModeStretch, isUVModeStretch, QVector); ADD_PROPERTY_TO_MAP(PROP_X_TEXTURE_URL, XTextureURL, xTextureURL, QString); ADD_PROPERTY_TO_MAP(PROP_Y_TEXTURE_URL, YTextureURL, yTextureURL, QString); ADD_PROPERTY_TO_MAP(PROP_Z_TEXTURE_URL, ZTextureURL, zTextureURL, QString); @@ -1338,7 +1338,7 @@ bool EntityItemProperties::encodeEntityEditPacket(PacketType command, EntityItem APPEND_ENTITY_PROPERTY(PROP_STROKE_COLORS, properties.getPackedStrokeColors()); APPEND_ENTITY_PROPERTY(PROP_STROKE_WIDTHS, properties.getStrokeWidths()); APPEND_ENTITY_PROPERTY(PROP_TEXTURES, properties.getTextures()); - APPEND_ENTITY_PROPERTY(PROP_IS_UV_MODE_STRETCH, properties.getIsUVModeStretch()); + APPEND_ENTITY_PROPERTY(PROP_IS_UV_MODE_STRETCH, properties.getIsUVModeStretch()); } // NOTE: Spheres and Boxes are just special cases of Shape, and they need to include their PROP_SHAPE // when encoding/decoding edits because otherwise they can't polymorph to other shape types @@ -1674,7 +1674,7 @@ bool EntityItemProperties::decodeEntityEditPacket(const unsigned char* data, int READ_ENTITY_PROPERTY_TO_PROPERTIES(PROP_STROKE_COLORS, QByteArray, setPackedStrokeColors); READ_ENTITY_PROPERTY_TO_PROPERTIES(PROP_STROKE_WIDTHS, QVector, setStrokeWidths); READ_ENTITY_PROPERTY_TO_PROPERTIES(PROP_TEXTURES, QString, setTextures); - READ_ENTITY_PROPERTY_TO_PROPERTIES(PROP_IS_UV_MODE_STRETCH, bool, setIsUVModeStretch); + READ_ENTITY_PROPERTY_TO_PROPERTIES(PROP_IS_UV_MODE_STRETCH, bool, setIsUVModeStretch); } // NOTE: Spheres and Boxes are just special cases of Shape, and they need to include their PROP_SHAPE @@ -1710,6 +1710,9 @@ QVector EntityItemProperties::unpackNormals(const QByteArray& normals unpackedNormals[j] = aux; j++; } + } else { + qCDebug(entities) << "WARNING - Expected received size for normals does not match. Expected: " << (int)normals[0] + << " Received: " << (normals.size() / 6); } return unpackedNormals; } @@ -1731,6 +1734,9 @@ QVector EntityItemProperties::unpackStrokeColors(const QByteArray& st float b = (uint8_t)strokeColors[i++] / 255.0f; unpackedStrokeColors[j++] = glmVec3(r, g, b); } + } else { + qCDebug(entities) << "WARNING - Expected received size for stroke colors does not match. Expected: " + << (int)strokeColors[0] << " Received: " << (strokeColors.size() / 3); } return unpackedStrokeColors; @@ -1866,7 +1872,7 @@ void EntityItemProperties::markAllChanged() { _normalsChanged = true; _strokeColorsChanged = true; _strokeWidthsChanged = true; - _isUVModeStretchChanged = true; + _isUVModeStretchChanged = true; _xTextureURLChanged = true; _yTextureURLChanged = true; @@ -2250,6 +2256,10 @@ QList EntityItemProperties::listChangedProperties() { out += "strokeColors"; } + if (isUVModeStretchChanged()) { + out += "isUVModeStretch"; + } + getAnimation().listChangedProperties(out); getKeyLight().listChangedProperties(out); getSkybox().listChangedProperties(out); diff --git a/libraries/networking/src/udt/PacketHeaders.cpp b/libraries/networking/src/udt/PacketHeaders.cpp index eeab32f34d..d9584ed394 100644 --- a/libraries/networking/src/udt/PacketHeaders.cpp +++ b/libraries/networking/src/udt/PacketHeaders.cpp @@ -31,7 +31,7 @@ PacketVersion versionForPacketType(PacketType packetType) { case PacketType::EntityData: return VERSION_ENTITIES_STROKE_COLOR_PROPERTY; case PacketType::EntityPhysics: - return VERSION_ENTITIES_UV_MODE_PROPERTY; + return VERSION_ENTITIES_ANIMATION_ALLOW_TRANSLATION_PROPERTIES; case PacketType::EntityQuery: return static_cast(EntityQueryPacketVersion::JSONFilterWithFamilyTree); case PacketType::AvatarIdentity: diff --git a/scripts/system/fingerPaint/html/main.html b/scripts/system/fingerPaint/html/main.html index e58d638c10..8a838ca61e 100644 --- a/scripts/system/fingerPaint/html/main.html +++ b/scripts/system/fingerPaint/html/main.html @@ -108,7 +108,6 @@ //Undo related logic function setUndoState(disabled) { - //document.getElementById("message").innerHTML = "message received!"; if (!disabled) { document.getElementById("undoButton").removeAttribute("disabled"); } else {