From 5d5624053f99f164c9b21625e74848349ab6246b Mon Sep 17 00:00:00 2001 From: Seth Alves Date: Thu, 30 Apr 2015 13:15:55 -0700 Subject: [PATCH 01/12] drow boxes as aabox when we are the simulator --- .../src/RenderableBoxEntityItem.cpp | 37 +++++++++++++------ 1 file changed, 26 insertions(+), 11 deletions(-) diff --git a/libraries/entities-renderer/src/RenderableBoxEntityItem.cpp b/libraries/entities-renderer/src/RenderableBoxEntityItem.cpp index f7828806ab..d756b37797 100644 --- a/libraries/entities-renderer/src/RenderableBoxEntityItem.cpp +++ b/libraries/entities-renderer/src/RenderableBoxEntityItem.cpp @@ -35,16 +35,31 @@ void RenderableBoxEntityItem::render(RenderArgs* args) { glm::vec4 cubeColor(getColor()[RED_INDEX] / MAX_COLOR, getColor()[GREEN_INDEX] / MAX_COLOR, getColor()[BLUE_INDEX] / MAX_COLOR, getLocalRenderAlpha()); - glPushMatrix(); - glTranslatef(position.x, position.y, position.z); - glm::vec3 axis = glm::axis(rotation); - glRotatef(glm::degrees(glm::angle(rotation)), axis.x, axis.y, axis.z); - glPushMatrix(); - glm::vec3 positionToCenter = center - position; - glTranslatef(positionToCenter.x, positionToCenter.y, positionToCenter.z); - glScalef(dimensions.x, dimensions.y, dimensions.z); - DependencyManager::get()->renderSolidCube(1.0f, cubeColor); - glPopMatrix(); - glPopMatrix(); + bool highlightSimulationOwnership = false; + if (args->_debugFlags & RenderArgs::RENDER_DEBUG_SIMULATION_OWNERSHIP) { + auto nodeList = DependencyManager::get(); + const QUuid& myNodeID = nodeList->getSessionUUID(); + highlightSimulationOwnership = (getSimulatorID() == myNodeID); + } + + if (highlightSimulationOwnership) { + float size = glm::length(dimensions); + glPushMatrix(); + glTranslatef(position.x, position.y, position.z); + DependencyManager::get()->renderWireCube(size, cubeColor); + glPopMatrix(); + } else { + glPushMatrix(); + glTranslatef(position.x, position.y, position.z); + glm::vec3 axis = glm::axis(rotation); + glRotatef(glm::degrees(glm::angle(rotation)), axis.x, axis.y, axis.z); + glPushMatrix(); + glm::vec3 positionToCenter = center - position; + glTranslatef(positionToCenter.x, positionToCenter.y, positionToCenter.z); + glScalef(dimensions.x, dimensions.y, dimensions.z); + DependencyManager::get()->renderSolidCube(1.0f, cubeColor); + glPopMatrix(); + glPopMatrix(); + } }; From 3c24d42d933d8cb97adaca8c971c2bb0008bc979 Mon Sep 17 00:00:00 2001 From: Seth Alves Date: Thu, 30 Apr 2015 14:17:20 -0700 Subject: [PATCH 02/12] improve display of box and model entities when in simulator-id debug mode --- .../src/RenderableBoxEntityItem.cpp | 26 ++++----- .../src/RenderableModelEntityItem.cpp | 55 ++++++++++++------- .../src/RenderableModelEntityItem.h | 1 + 3 files changed, 46 insertions(+), 36 deletions(-) diff --git a/libraries/entities-renderer/src/RenderableBoxEntityItem.cpp b/libraries/entities-renderer/src/RenderableBoxEntityItem.cpp index d756b37797..2f40b6ce6b 100644 --- a/libraries/entities-renderer/src/RenderableBoxEntityItem.cpp +++ b/libraries/entities-renderer/src/RenderableBoxEntityItem.cpp @@ -43,23 +43,19 @@ void RenderableBoxEntityItem::render(RenderArgs* args) { highlightSimulationOwnership = (getSimulatorID() == myNodeID); } - if (highlightSimulationOwnership) { - float size = glm::length(dimensions); - glPushMatrix(); + glPushMatrix(); glTranslatef(position.x, position.y, position.z); - DependencyManager::get()->renderWireCube(size, cubeColor); - glPopMatrix(); - } else { + glm::vec3 axis = glm::axis(rotation); + glRotatef(glm::degrees(glm::angle(rotation)), axis.x, axis.y, axis.z); glPushMatrix(); - glTranslatef(position.x, position.y, position.z); - glm::vec3 axis = glm::axis(rotation); - glRotatef(glm::degrees(glm::angle(rotation)), axis.x, axis.y, axis.z); - glPushMatrix(); - glm::vec3 positionToCenter = center - position; - glTranslatef(positionToCenter.x, positionToCenter.y, positionToCenter.z); - glScalef(dimensions.x, dimensions.y, dimensions.z); + glm::vec3 positionToCenter = center - position; + glTranslatef(positionToCenter.x, positionToCenter.y, positionToCenter.z); + glScalef(dimensions.x, dimensions.y, dimensions.z); + if (highlightSimulationOwnership) { + DependencyManager::get()->renderWireCube(1.0f, cubeColor); + } else { DependencyManager::get()->renderSolidCube(1.0f, cubeColor); - glPopMatrix(); + } glPopMatrix(); - } + glPopMatrix(); }; diff --git a/libraries/entities-renderer/src/RenderableModelEntityItem.cpp b/libraries/entities-renderer/src/RenderableModelEntityItem.cpp index b9bf1d39a8..cedb5b9924 100644 --- a/libraries/entities-renderer/src/RenderableModelEntityItem.cpp +++ b/libraries/entities-renderer/src/RenderableModelEntityItem.cpp @@ -109,6 +109,33 @@ void RenderableModelEntityItem::remapTextures() { } +void RenderableModelEntityItem::renderBoundingBox(RenderArgs* args) { + glm::vec3 position = getPosition(); + glm::vec3 center = getCenter(); + glm::vec3 dimensions = getDimensions(); + glm::quat rotation = getRotation(); + // float size = glm::length(dimensions) / 2.0f; + + const float MAX_COLOR = 255.0f; + glm::vec4 cubeColor(getColor()[RED_INDEX] / MAX_COLOR, + getColor()[GREEN_INDEX] / MAX_COLOR, + getColor()[BLUE_INDEX] / MAX_COLOR, + getLocalRenderAlpha()); + + glPushMatrix(); + glTranslatef(position.x, position.y, position.z); + glm::vec3 axis = glm::axis(rotation); + glRotatef(glm::degrees(glm::angle(rotation)), axis.x, axis.y, axis.z); + glPushMatrix(); + glm::vec3 positionToCenter = center - position; + glTranslatef(positionToCenter.x, positionToCenter.y, positionToCenter.z); + glScalef(dimensions.x, dimensions.y, dimensions.z); + DependencyManager::get()->renderWireCube(1.0f, cubeColor); + glPopMatrix(); + glPopMatrix(); +} + + void RenderableModelEntityItem::render(RenderArgs* args) { PerformanceTimer perfTimer("RMEIrender"); assert(getType() == EntityTypes::Model); @@ -117,7 +144,6 @@ void RenderableModelEntityItem::render(RenderArgs* args) { glm::vec3 position = getPosition(); glm::vec3 dimensions = getDimensions(); - float size = glm::length(dimensions); bool highlightSimulationOwnership = false; if (args->_debugFlags & RenderArgs::RENDER_DEBUG_SIMULATION_OWNERSHIP) { @@ -126,6 +152,7 @@ void RenderableModelEntityItem::render(RenderArgs* args) { highlightSimulationOwnership = (getSimulatorID() == myNodeID); } + bool didDraw = false; if (drawAsModel && !highlightSimulationOwnership) { remapTextures(); glPushMatrix(); @@ -179,34 +206,20 @@ void RenderableModelEntityItem::render(RenderArgs* args) { if (args && (args->_renderMode == RenderArgs::SHADOW_RENDER_MODE)) { if (movingOrAnimating) { _model->renderInScene(alpha, args); + didDraw = true; } } else { _model->renderInScene(alpha, args); + didDraw = true; } - } else { - // if we couldn't get a model, then just draw a cube - glm::vec4 color(getColor()[RED_INDEX]/255, getColor()[GREEN_INDEX]/255, getColor()[BLUE_INDEX]/255, 1.0f); - glPushMatrix(); - glTranslatef(position.x, position.y, position.z); - DependencyManager::get()->renderWireCube(size, color); - glPopMatrix(); } - } else { - // if we couldn't get a model, then just draw a cube - glm::vec4 color(getColor()[RED_INDEX]/255, getColor()[GREEN_INDEX]/255, getColor()[BLUE_INDEX]/255, 1.0f); - glPushMatrix(); - glTranslatef(position.x, position.y, position.z); - DependencyManager::get()->renderWireCube(size, color); - glPopMatrix(); } } glPopMatrix(); - } else { - glm::vec4 color(getColor()[RED_INDEX]/255, getColor()[GREEN_INDEX]/255, getColor()[BLUE_INDEX]/255, 1.0f); - glPushMatrix(); - glTranslatef(position.x, position.y, position.z); - DependencyManager::get()->renderWireCube(size, color); - glPopMatrix(); + } + + if (!didDraw) { + renderBoundingBox(args); } } diff --git a/libraries/entities-renderer/src/RenderableModelEntityItem.h b/libraries/entities-renderer/src/RenderableModelEntityItem.h index 43f18af0db..ec0e30985c 100644 --- a/libraries/entities-renderer/src/RenderableModelEntityItem.h +++ b/libraries/entities-renderer/src/RenderableModelEntityItem.h @@ -42,6 +42,7 @@ public: virtual void somethingChangedNotification() { _needsInitialSimulation = true; } + void renderBoundingBox(RenderArgs* args); virtual void render(RenderArgs* args); virtual bool supportsDetailedRayIntersection() const { return true; } virtual bool findDetailedRayIntersection(const glm::vec3& origin, const glm::vec3& direction, From 6da796f7357134fa54577b7abeb7f07a1c55b662 Mon Sep 17 00:00:00 2001 From: samcake Date: Thu, 30 Apr 2015 23:31:56 -0700 Subject: [PATCH 03/12] fix the bug with sahdows on Mac due to the fbo needing a colorbuffer even though it's not needed --- libraries/gpu/src/gpu/GLBackendOutput.cpp | 13 +++++++++++++ 1 file changed, 13 insertions(+) diff --git a/libraries/gpu/src/gpu/GLBackendOutput.cpp b/libraries/gpu/src/gpu/GLBackendOutput.cpp index 2529070b18..dd8e9c68b6 100755 --- a/libraries/gpu/src/gpu/GLBackendOutput.cpp +++ b/libraries/gpu/src/gpu/GLBackendOutput.cpp @@ -74,6 +74,19 @@ GLBackend::GLFramebuffer* GLBackend::syncGPUObject(const Framebuffer& framebuffe } } } +#if (GPU_FEATURE_PROFILE == GPU_LEGACY) + // for reasons that i don;t understand yet, it seems that on mac gl, a fbo must have a color buffer... + else { + GLuint renderBuffer = 0; + glGenRenderbuffers(1, &renderBuffer); + glBindRenderbuffer(GL_RENDERBUFFER, renderBuffer); + glRenderbufferStorage(GL_RENDERBUFFER, GL_RGBA, framebuffer.getWidth(), framebuffer.getHeight()); + glBindRenderbuffer(GL_RENDERBUFFER, 0); + glFramebufferRenderbuffer(GL_FRAMEBUFFER, GL_COLOR_ATTACHMENT0, GL_RENDERBUFFER, renderBuffer); + CHECK_GL_ERROR(); + } +#endif + if (framebuffer.hasDepthStencil()) { auto surface = framebuffer.getDepthStencilBuffer(); From e560687371f56111b072bf9b7804963e3485b21b Mon Sep 17 00:00:00 2001 From: samcake Date: Fri, 1 May 2015 00:14:23 -0700 Subject: [PATCH 04/12] fixing the shader not compiling --- libraries/render-utils/src/model.slf | 4 +-- libraries/render-utils/src/model.slv | 6 ++--- libraries/render-utils/src/model_lightmap.slf | 4 +-- libraries/render-utils/src/model_lightmap.slv | 6 ++--- .../src/model_lightmap_specular_map.slf | 4 +-- .../render-utils/src/model_specular_map.slf | 4 +-- .../render-utils/src/model_translucent.slf | 4 +-- libraries/render-utils/src/simple.slf | 4 +-- libraries/render-utils/src/simple.slv | 4 +-- libraries/render-utils/src/skin_model.slv | 26 +++++++++---------- .../src/skin_model_normal_map.slv | 26 +++++++++---------- 11 files changed, 46 insertions(+), 46 deletions(-) diff --git a/libraries/render-utils/src/model.slf b/libraries/render-utils/src/model.slf index adf80d01bf..7648cac429 100755 --- a/libraries/render-utils/src/model.slf +++ b/libraries/render-utils/src/model.slf @@ -19,7 +19,7 @@ uniform sampler2D diffuseMap; // the interpolated normal -varying vec4 normal; +varying vec4 interpolatedNormal; varying vec3 color; @@ -31,7 +31,7 @@ void main(void) { Material mat = getMaterial(); packDeferredFragment( - normalize(normal.xyz), + normalize(interpolatedNormal.xyz), evalOpaqueFinalAlpha(getMaterialOpacity(mat), diffuse.a), getMaterialDiffuse(mat) * diffuse.rgb * color, getMaterialSpecular(mat), diff --git a/libraries/render-utils/src/model.slv b/libraries/render-utils/src/model.slv index f4511da944..97b5eb640b 100755 --- a/libraries/render-utils/src/model.slv +++ b/libraries/render-utils/src/model.slv @@ -20,7 +20,7 @@ const int MAX_TEXCOORDS = 2; uniform mat4 texcoordMatrices[MAX_TEXCOORDS]; // the interpolated normal -varying vec4 normal; +varying vec4 interpolatedNormal; varying vec3 color; @@ -36,7 +36,7 @@ void main(void) { TransformCamera cam = getTransformCamera(); TransformObject obj = getTransformObject(); <$transformModelToClipPos(cam, obj, gl_Vertex, gl_Position)$> - <$transformModelToEyeDir(cam, obj, gl_Normal, normal.xyz)$> + <$transformModelToEyeDir(cam, obj, gl_Normal, interpolatedNormal.xyz)$> - normal = vec4(normalize(normal.xyz), 0.0); + interpolatedNormal = vec4(normalize(interpolatedNormal.xyz), 0.0); } diff --git a/libraries/render-utils/src/model_lightmap.slf b/libraries/render-utils/src/model_lightmap.slf index b7660da16d..00d74ed997 100755 --- a/libraries/render-utils/src/model_lightmap.slf +++ b/libraries/render-utils/src/model_lightmap.slf @@ -24,7 +24,7 @@ uniform sampler2D emissiveMap; uniform vec2 emissiveParams; // the interpolated normal -varying vec4 normal; +varying vec4 interpolatedNormal; varying vec3 color; @@ -39,7 +39,7 @@ void main(void) { Material mat = getMaterial(); packDeferredFragmentLightmap( - normalize(normal.xyz), + normalize(interpolatedNormal.xyz), evalOpaqueFinalAlpha(getMaterialOpacity(mat), diffuse.a), getMaterialDiffuse(mat) * diffuse.rgb * color, getMaterialSpecular(mat), diff --git a/libraries/render-utils/src/model_lightmap.slv b/libraries/render-utils/src/model_lightmap.slv index 56b34a5aa8..54d9bd21e1 100755 --- a/libraries/render-utils/src/model_lightmap.slv +++ b/libraries/render-utils/src/model_lightmap.slv @@ -23,7 +23,7 @@ uniform mat4 texcoordMatrices[MAX_TEXCOORDS]; attribute vec2 texcoord1; // the interpolated normal -varying vec4 normal; +varying vec4 interpolatedNormal; // the interpolated texcoord1 varying vec2 interpolatedTexcoord1; @@ -44,8 +44,8 @@ void main(void) { TransformCamera cam = getTransformCamera(); TransformObject obj = getTransformObject(); <$transformModelToClipPos(cam, obj, gl_Vertex, gl_Position)$> - <$transformModelToEyeDir(cam, obj, gl_Normal, normal.xyz)$> + <$transformModelToEyeDir(cam, obj, gl_Normal, interpolatedNormal.xyz)$> - normal = vec4(normalize(normal.xyz), 0.0); + interpolatedNormal = vec4(normalize(interpolatedNormal.xyz), 0.0); } diff --git a/libraries/render-utils/src/model_lightmap_specular_map.slf b/libraries/render-utils/src/model_lightmap_specular_map.slf index e4bb682601..daabfe2d07 100755 --- a/libraries/render-utils/src/model_lightmap_specular_map.slf +++ b/libraries/render-utils/src/model_lightmap_specular_map.slf @@ -27,7 +27,7 @@ uniform vec2 emissiveParams; uniform sampler2D specularMap; // the interpolated normal -varying vec4 normal; +varying vec4 interpolatedNormal; varying vec2 interpolatedTexcoord1; @@ -42,7 +42,7 @@ void main(void) { Material mat = getMaterial(); packDeferredFragmentLightmap( - normalize(normal.xyz), + normalize(interpolatedNormal.xyz), evalOpaqueFinalAlpha(getMaterialOpacity(mat), diffuse.a), getMaterialDiffuse(mat) * diffuse.rgb * color, specular, // no use of getMaterialSpecular(mat) diff --git a/libraries/render-utils/src/model_specular_map.slf b/libraries/render-utils/src/model_specular_map.slf index a0203d74af..46f565de6c 100755 --- a/libraries/render-utils/src/model_specular_map.slf +++ b/libraries/render-utils/src/model_specular_map.slf @@ -23,7 +23,7 @@ uniform sampler2D diffuseMap; uniform sampler2D specularMap; // the interpolated normal -varying vec4 normal; +varying vec4 interpolatedNormal; varying vec3 color; @@ -35,7 +35,7 @@ void main(void) { Material mat = getMaterial(); packDeferredFragment( - normalize(normal.xyz), + normalize(interpolatedNormal.xyz), evalOpaqueFinalAlpha(getMaterialOpacity(mat), diffuse.a), getMaterialDiffuse(mat) * diffuse.rgb * color, specular, //getMaterialSpecular(mat), diff --git a/libraries/render-utils/src/model_translucent.slf b/libraries/render-utils/src/model_translucent.slf index 9b8eb97f70..9b34951f88 100755 --- a/libraries/render-utils/src/model_translucent.slf +++ b/libraries/render-utils/src/model_translucent.slf @@ -19,7 +19,7 @@ // the diffuse texture uniform sampler2D diffuseMap; -varying vec4 normal; +varying vec4 interpolatedNormal; varying vec3 color; @@ -31,7 +31,7 @@ void main(void) { Material mat = getMaterial(); packDeferredFragmentTranslucent( - normalize(normal.xyz), + normalize(interpolatedNormal.xyz), getMaterialOpacity(mat) * diffuse.a, getMaterialDiffuse(mat) * diffuse.rgb * color, getMaterialSpecular(mat), diff --git a/libraries/render-utils/src/simple.slf b/libraries/render-utils/src/simple.slf index 3e70674e33..4e1a09fb92 100644 --- a/libraries/render-utils/src/simple.slf +++ b/libraries/render-utils/src/simple.slf @@ -15,7 +15,7 @@ <@include DeferredBufferWrite.slh@> // the interpolated normal -varying vec4 normal; +varying vec4 interpolatedNormal; // the glow intensity //uniform float glowIntensity; @@ -28,7 +28,7 @@ void main(void) { */ packDeferredFragment( - normalize(normal.xyz), + normalize(interpolatedNormal.xyz), glowIntensity, gl_Color.rgb, gl_FrontMaterial.specular.rgb, diff --git a/libraries/render-utils/src/simple.slv b/libraries/render-utils/src/simple.slv index 61338b440d..9ad47a3e66 100644 --- a/libraries/render-utils/src/simple.slv +++ b/libraries/render-utils/src/simple.slv @@ -13,11 +13,11 @@ // // the interpolated normal -varying vec4 normal; +varying vec4 interpolatedNormal; void main(void) { // transform and store the normal for interpolation - normal = normalize(gl_ModelViewMatrix * vec4(gl_Normal, 0.0)); + interpolatedNormal = normalize(gl_ModelViewMatrix * vec4(gl_Normal, 0.0)); // pass along the diffuse color gl_FrontColor = gl_Color; diff --git a/libraries/render-utils/src/skin_model.slv b/libraries/render-utils/src/skin_model.slv index f475cbd1f5..fdde2e8295 100755 --- a/libraries/render-utils/src/skin_model.slv +++ b/libraries/render-utils/src/skin_model.slv @@ -1,5 +1,5 @@ -<@include gpu/Config.slh@> -<$VERSION_HEADER$> +<@include gpu/Config.slh@> +<$VERSION_HEADER$> // Generated on <$_SCRIBE_DATE$> // // skin_model.vert @@ -12,8 +12,8 @@ // See the accompanying file LICENSE or http://www.apache.org/licenses/LICENSE-2.0.html // -<@include gpu/Transform.slh@> -<$declareStandardTransform()$> +<@include gpu/Transform.slh@> +<$declareStandardTransform()$> const int MAX_TEXCOORDS = 2; const int MAX_CLUSTERS = 128; @@ -26,7 +26,7 @@ attribute vec4 clusterIndices; attribute vec4 clusterWeights; // the interpolated normal -varying vec4 normal; +varying vec4 interpolatedNormal; varying vec3 color; @@ -37,7 +37,7 @@ void main(void) { mat4 clusterMatrix = clusterMatrices[int(clusterIndices[i])]; float clusterWeight = clusterWeights[i]; position += clusterMatrix * gl_Vertex * clusterWeight; - normal += clusterMatrix * vec4(gl_Normal, 0.0) * clusterWeight; + interpolatedNormal += clusterMatrix * vec4(gl_Normal, 0.0) * clusterWeight; } // pass along the diffuse color @@ -46,11 +46,11 @@ void main(void) { // and the texture coordinates gl_TexCoord[0] = texcoordMatrices[0] * vec4(gl_MultiTexCoord0.xy, 0.0, 1.0); - // standard transform - TransformCamera cam = getTransformCamera(); - TransformObject obj = getTransformObject(); - <$transformModelToClipPos(cam, obj, position, gl_Position)$> - <$transformModelToEyeDir(cam, obj, normal.xyz, normal.xyz)$> - - normal = vec4(normalize(normal.xyz), 0.0); + // standard transform + TransformCamera cam = getTransformCamera(); + TransformObject obj = getTransformObject(); + <$transformModelToClipPos(cam, obj, position, gl_Position)$> + <$transformModelToEyeDir(cam, obj, interpolatedNormal.xyz, interpolatedNormal.xyz)$> + + interpolatedNormal = vec4(normalize(interpolatedNormal.xyz), 0.0); } diff --git a/libraries/render-utils/src/skin_model_normal_map.slv b/libraries/render-utils/src/skin_model_normal_map.slv index bbc8f81d12..ed552a7aca 100755 --- a/libraries/render-utils/src/skin_model_normal_map.slv +++ b/libraries/render-utils/src/skin_model_normal_map.slv @@ -1,5 +1,5 @@ -<@include gpu/Config.slh@> -<$VERSION_HEADER$> +<@include gpu/Config.slh@> +<$VERSION_HEADER$> // Generated on <$_SCRIBE_DATE$> // // skin_model_normal_map.vert @@ -12,8 +12,8 @@ // See the accompanying file LICENSE or http://www.apache.org/licenses/LICENSE-2.0.html // -<@include gpu/Transform.slh@> -<$declareStandardTransform()$> +<@include gpu/Transform.slh@> +<$declareStandardTransform()$> const int MAX_TEXCOORDS = 2; const int MAX_CLUSTERS = 128; @@ -54,16 +54,16 @@ void main(void) { // and the texture coordinates gl_TexCoord[0] = texcoordMatrices[0] * vec4(gl_MultiTexCoord0.xy, 0.0, 1.0); - interpolatedNormal = vec4(normalize(interpolatedNormal.xyz), 0.0); + interpolatedNormal = vec4(normalize(interpolatedNormal.xyz), 0.0); interpolatedTangent = vec4(normalize(interpolatedTangent.xyz), 0.0); - // standard transform - TransformCamera cam = getTransformCamera(); - TransformObject obj = getTransformObject(); - <$transformModelToClipPos(cam, obj, interpolatedPosition, gl_Position)$> - <$transformModelToEyeDir(cam, obj, interpolatedNormal.xyz, interpolatedNormal.xyz)$> - <$transformModelToEyeDir(cam, obj, interpolatedTangent.xyz, interpolatedTangent.xyz)$> - - interpolatedNormal = vec4(normalize(interpolatedNormal.xyz), 0.0); + // standard transform + TransformCamera cam = getTransformCamera(); + TransformObject obj = getTransformObject(); + <$transformModelToClipPos(cam, obj, interpolatedPosition, gl_Position)$> + <$transformModelToEyeDir(cam, obj, interpolatedNormal.xyz, interpolatedNormal.xyz)$> + <$transformModelToEyeDir(cam, obj, interpolatedTangent.xyz, interpolatedTangent.xyz)$> + + interpolatedNormal = vec4(normalize(interpolatedNormal.xyz), 0.0); interpolatedTangent = vec4(normalize(interpolatedTangent.xyz), 0.0); } From 2b631efb5d25e7231c5b48f04d948b381a5ca0bb Mon Sep 17 00:00:00 2001 From: samcake Date: Fri, 1 May 2015 00:21:58 -0700 Subject: [PATCH 05/12] shader not compiling properly have been fixed --- .../render-utils/src/model_normal_map.slv | 28 +++++++++---------- libraries/render-utils/src/skin_model.slv | 2 +- 2 files changed, 15 insertions(+), 15 deletions(-) diff --git a/libraries/render-utils/src/model_normal_map.slv b/libraries/render-utils/src/model_normal_map.slv index e702b446b8..2f493053dd 100755 --- a/libraries/render-utils/src/model_normal_map.slv +++ b/libraries/render-utils/src/model_normal_map.slv @@ -1,5 +1,5 @@ -<@include gpu/Config.slh@> -<$VERSION_HEADER$> +<@include gpu/Config.slh@> +<$VERSION_HEADER$> // Generated on <$_SCRIBE_DATE$> // // model.vert @@ -12,9 +12,9 @@ // See the accompanying file LICENSE or http://www.apache.org/licenses/LICENSE-2.0.html // -<@include gpu/Transform.slh@> - -<$declareStandardTransform()$> +<@include gpu/Transform.slh@> + +<$declareStandardTransform()$> const int MAX_TEXCOORDS = 2; @@ -29,7 +29,7 @@ varying vec4 interpolatedNormal; // the interpolated tangent varying vec4 interpolatedTangent; -varying vec3 color; +varying vec3 color; void main(void) { // transform and store the normal and tangent for interpolation @@ -42,13 +42,13 @@ void main(void) { // and the texture coordinates gl_TexCoord[0] = texcoordMatrices[0] * vec4(gl_MultiTexCoord0.xy, 0.0, 1.0); - // standard transform - TransformCamera cam = getTransformCamera(); - TransformObject obj = getTransformObject(); - <$transformModelToClipPos(cam, obj, gl_Vertex, gl_Position)$> - <$transformModelToEyeDir(cam, obj, gl_Normal, interpolatedNormal.xyz)$> - <$transformModelToEyeDir(cam, obj, tangent, interpolatedTangent.xyz)$> - - interpolatedNormal = vec4(normalize(interpolatedNormal.xyz), 0.0); + // standard transform + TransformCamera cam = getTransformCamera(); + TransformObject obj = getTransformObject(); + <$transformModelToClipPos(cam, obj, gl_Vertex, gl_Position)$> + <$transformModelToEyeDir(cam, obj, gl_Normal, interpolatedNormal.xyz)$> + <$transformModelToEyeDir(cam, obj, tangent, interpolatedTangent.xyz)$> + + interpolatedNormal = vec4(normalize(interpolatedNormal.xyz), 0.0); interpolatedTangent = vec4(normalize(interpolatedTangent.xyz), 0.0); } diff --git a/libraries/render-utils/src/skin_model.slv b/libraries/render-utils/src/skin_model.slv index fdde2e8295..c94fc0d151 100755 --- a/libraries/render-utils/src/skin_model.slv +++ b/libraries/render-utils/src/skin_model.slv @@ -32,7 +32,7 @@ varying vec3 color; void main(void) { vec4 position = vec4(0.0, 0.0, 0.0, 0.0); - normal = vec4(0.0, 0.0, 0.0, 0.0); + interpolatedNormal = vec4(0.0, 0.0, 0.0, 0.0); for (int i = 0; i < INDICES_PER_VERTEX; i++) { mat4 clusterMatrix = clusterMatrices[int(clusterIndices[i])]; float clusterWeight = clusterWeights[i]; From b49a04c63882939e03e2d098c0000587d8110555 Mon Sep 17 00:00:00 2001 From: Ryan Huffman Date: Fri, 1 May 2015 08:40:24 -0700 Subject: [PATCH 06/12] Add name property to entities --- libraries/entities/src/EntityItem.cpp | 9 ++++++++- libraries/entities/src/EntityItem.h | 4 ++++ libraries/entities/src/EntityItemProperties.cpp | 7 +++++++ libraries/entities/src/EntityItemProperties.h | 3 +++ libraries/entities/src/EntityItemPropertiesDefaults.h | 2 ++ libraries/networking/src/PacketHeaders.cpp | 2 +- libraries/networking/src/PacketHeaders.h | 1 + 7 files changed, 26 insertions(+), 2 deletions(-) diff --git a/libraries/entities/src/EntityItem.cpp b/libraries/entities/src/EntityItem.cpp index 1d358f175a..7c0598fbfa 100644 --- a/libraries/entities/src/EntityItem.cpp +++ b/libraries/entities/src/EntityItem.cpp @@ -63,6 +63,7 @@ EntityItem::EntityItem(const EntityItemID& entityItemID) : _simulatorID(ENTITY_ITEM_DEFAULT_SIMULATOR_ID), _simulatorIDChangedTime(0), _marketplaceID(ENTITY_ITEM_DEFAULT_MARKETPLACE_ID), + _name(ENTITY_ITEM_DEFAULT_NAME), _physicsInfo(NULL), _dirtyFlags(0), _element(NULL) @@ -105,6 +106,7 @@ EntityPropertyFlags EntityItem::getEntityProperties(EncodeBitstreamParams& param requestedProperties += PROP_LOCKED; requestedProperties += PROP_USER_DATA; requestedProperties += PROP_MARKETPLACE_ID; + requestedProperties += PROP_NAME; requestedProperties += PROP_SIMULATOR_ID; return requestedProperties; @@ -231,6 +233,7 @@ OctreeElement::AppendState EntityItem::appendEntityData(OctreePacketData* packet APPEND_ENTITY_PROPERTY(PROP_USER_DATA, appendValue, getUserData()); APPEND_ENTITY_PROPERTY(PROP_SIMULATOR_ID, appendValue, getSimulatorID()); APPEND_ENTITY_PROPERTY(PROP_MARKETPLACE_ID, appendValue, getMarketplaceID()); + APPEND_ENTITY_PROPERTY(PROP_NAME, appendValue, getName()); appendSubclassData(packetData, params, entityTreeElementExtraEncodeData, requestedProperties, @@ -528,7 +531,7 @@ int EntityItem::readEntityDataFromBuffer(const unsigned char* data, int bytesLef READ_ENTITY_PROPERTY_SETTER(PROP_DIMENSIONS, glm::vec3, updateDimensionsInDomainUnits); } } - + READ_ENTITY_PROPERTY_QUAT_SETTER(PROP_ROTATION, updateRotation); READ_ENTITY_PROPERTY_SETTER(PROP_DENSITY, float, updateDensity); if (useMeters) { @@ -566,6 +569,8 @@ int EntityItem::readEntityDataFromBuffer(const unsigned char* data, int bytesLef READ_ENTITY_PROPERTY_STRING(PROP_MARKETPLACE_ID, setMarketplaceID); } + READ_ENTITY_PROPERTY_STRING(PROP_NAME, setName); + bytesRead += readEntitySubclassDataFromBuffer(dataAt, (bytesLeftToRead - bytesRead), args, propertyFlags, overwriteLocalData); //////////////////////////////////// @@ -897,6 +902,7 @@ EntityItemProperties EntityItem::getProperties() const { COPY_ENTITY_PROPERTY_TO_PROPERTIES(userData, getUserData); COPY_ENTITY_PROPERTY_TO_PROPERTIES(simulatorID, getSimulatorID); COPY_ENTITY_PROPERTY_TO_PROPERTIES(marketplaceID, getMarketplaceID); + COPY_ENTITY_PROPERTY_TO_PROPERTIES(name, getName); properties._defaultSettings = false; @@ -928,6 +934,7 @@ bool EntityItem::setProperties(const EntityItemProperties& properties) { SET_ENTITY_PROPERTY_FROM_PROPERTIES(userData, setUserData); SET_ENTITY_PROPERTY_FROM_PROPERTIES(simulatorID, setSimulatorID); SET_ENTITY_PROPERTY_FROM_PROPERTIES(marketplaceID, setMarketplaceID); + SET_ENTITY_PROPERTY_FROM_PROPERTIES(name, setName); if (somethingChanged) { somethingChangedNotification(); // notify derived classes that something has changed diff --git a/libraries/entities/src/EntityItem.h b/libraries/entities/src/EntityItem.h index e71f88d723..648ef7aece 100644 --- a/libraries/entities/src/EntityItem.h +++ b/libraries/entities/src/EntityItem.h @@ -229,6 +229,9 @@ public: float getAngularDamping() const { return _angularDamping; } void setAngularDamping(float value) { _angularDamping = value; } + QString getName() const { return _name; } + void setName(const QString& value) { _name = value; } + bool getVisible() const { return _visible; } void setVisible(bool value) { _visible = value; } bool isVisible() const { return _visible; } @@ -340,6 +343,7 @@ protected: glm::vec3 _registrationPoint; glm::vec3 _angularVelocity; float _angularDamping; + QString _name; bool _visible; bool _ignoreForCollisions; bool _collisionsWillMove; diff --git a/libraries/entities/src/EntityItemProperties.cpp b/libraries/entities/src/EntityItemProperties.cpp index 734f7897bb..4376d89314 100644 --- a/libraries/entities/src/EntityItemProperties.cpp +++ b/libraries/entities/src/EntityItemProperties.cpp @@ -86,6 +86,7 @@ EntityItemProperties::EntityItemProperties() : CONSTRUCT_PROPERTY(stageAltitude, ZoneEntityItem::DEFAULT_STAGE_ALTITUDE), CONSTRUCT_PROPERTY(stageDay, ZoneEntityItem::DEFAULT_STAGE_DAY), CONSTRUCT_PROPERTY(stageHour, ZoneEntityItem::DEFAULT_STAGE_HOUR), + CONSTRUCT_PROPERTY(name, ENTITY_ITEM_DEFAULT_NAME), _id(UNKNOWN_ENTITY_ID), _idSet(false), @@ -291,6 +292,7 @@ EntityPropertyFlags EntityItemProperties::getChangedProperties() const { CHECK_PROPERTY_CHANGE(PROP_STAGE_ALTITUDE, stageAltitude); CHECK_PROPERTY_CHANGE(PROP_STAGE_DAY, stageDay); CHECK_PROPERTY_CHANGE(PROP_STAGE_HOUR, stageHour); + CHECK_PROPERTY_CHANGE(PROP_NAME, name); return changedProperties; } @@ -356,6 +358,7 @@ QScriptValue EntityItemProperties::copyToScriptValue(QScriptEngine* engine) cons COPY_PROPERTY_TO_QSCRIPTVALUE(localGravity); COPY_PROPERTY_TO_QSCRIPTVALUE(particleRadius); COPY_PROPERTY_TO_QSCRIPTVALUE(marketplaceID); + COPY_PROPERTY_TO_QSCRIPTVALUE(name); COPY_PROPERTY_TO_QSCRIPTVALUE_COLOR(keyLightColor); COPY_PROPERTY_TO_QSCRIPTVALUE(keyLightIntensity); @@ -451,6 +454,7 @@ void EntityItemProperties::copyFromScriptValue(const QScriptValue& object) { COPY_PROPERTY_FROM_QSCRIPTVALUE_FLOAT(localGravity, setLocalGravity); COPY_PROPERTY_FROM_QSCRIPTVALUE_FLOAT(particleRadius, setParticleRadius); COPY_PROPERTY_FROM_QSCRIPTVALUE_STRING(marketplaceID, setMarketplaceID); + COPY_PROPERTY_FROM_QSCRIPTVALUE_STRING(name, setName); COPY_PROPERTY_FROM_QSCRIPTVALUE_COLOR(keyLightColor, setKeyLightColor); COPY_PROPERTY_FROM_QSCRIPTVALUE_FLOAT(keyLightIntensity, setKeyLightIntensity); @@ -666,6 +670,7 @@ bool EntityItemProperties::encodeEntityEditPacket(PacketType command, EntityItem } APPEND_ENTITY_PROPERTY(PROP_MARKETPLACE_ID, appendValue, properties.getMarketplaceID()); + APPEND_ENTITY_PROPERTY(PROP_NAME, appendValue, properties.getName()); } if (propertyCount > 0) { int endOfEntityItemData = packetData->getUncompressedByteOffset(); @@ -914,6 +919,7 @@ bool EntityItemProperties::decodeEntityEditPacket(const unsigned char* data, int } READ_ENTITY_PROPERTY_STRING_TO_PROPERTIES(PROP_MARKETPLACE_ID, setMarketplaceID); + READ_ENTITY_PROPERTY_STRING_TO_PROPERTIES(PROP_NAME, setName); return valid; } @@ -963,6 +969,7 @@ void EntityItemProperties::markAllChanged() { _registrationPointChanged = true; _angularVelocityChanged = true; _angularDampingChanged = true; + _nameChanged = true; _visibleChanged = true; _colorChanged = true; _modelURLChanged = true; diff --git a/libraries/entities/src/EntityItemProperties.h b/libraries/entities/src/EntityItemProperties.h index faec9e1206..950f12577b 100644 --- a/libraries/entities/src/EntityItemProperties.h +++ b/libraries/entities/src/EntityItemProperties.h @@ -97,6 +97,7 @@ enum EntityPropertyList { PROP_MARKETPLACE_ID, PROP_ACCELERATION, PROP_SIMULATOR_ID, + PROP_NAME, //////////////////////////////////////////////////////////////////////////////////////////////////// // ATTENTION: add new properties ABOVE this line @@ -188,6 +189,7 @@ public: DEFINE_PROPERTY_REF_WITH_SETTER(PROP_POSITION, Position, position, glm::vec3); DEFINE_PROPERTY_REF(PROP_DIMENSIONS, Dimensions, dimensions, glm::vec3); DEFINE_PROPERTY_REF(PROP_ROTATION, Rotation, rotation, glm::quat); + DEFINE_PROPERTY_REF(PROP_NAME, Name, name, QString); DEFINE_PROPERTY(PROP_DENSITY, Density, density, float); DEFINE_PROPERTY_REF(PROP_VELOCITY, Velocity, velocity, glm::vec3); DEFINE_PROPERTY_REF(PROP_GRAVITY, Gravity, gravity, glm::vec3); @@ -330,6 +332,7 @@ inline QDebug operator<<(QDebug debug, const EntityItemProperties& properties) { DEBUG_PROPERTY_IF_CHANGED(debug, properties, Dimensions, dimensions, "in meters"); DEBUG_PROPERTY_IF_CHANGED(debug, properties, Velocity, velocity, "in meters"); + DEBUG_PROPERTY_IF_CHANGED(debug, properties, Name, name, ""); DEBUG_PROPERTY_IF_CHANGED(debug, properties, Visible, visible, ""); DEBUG_PROPERTY_IF_CHANGED(debug, properties, Rotation, rotation, ""); DEBUG_PROPERTY_IF_CHANGED(debug, properties, Density, density, ""); diff --git a/libraries/entities/src/EntityItemPropertiesDefaults.h b/libraries/entities/src/EntityItemPropertiesDefaults.h index 001f963ecb..bdc1fb37e6 100644 --- a/libraries/entities/src/EntityItemPropertiesDefaults.h +++ b/libraries/entities/src/EntityItemPropertiesDefaults.h @@ -55,4 +55,6 @@ const float ENTITY_ITEM_DEFAULT_ANGULAR_DAMPING = 0.39347f; // approx timescale const bool ENTITY_ITEM_DEFAULT_IGNORE_FOR_COLLISIONS = false; const bool ENTITY_ITEM_DEFAULT_COLLISIONS_WILL_MOVE = false; +const QString ENTITY_ITEM_DEFAULT_NAME = QString(""); + #endif // hifi_EntityItemPropertiesDefaults_h diff --git a/libraries/networking/src/PacketHeaders.cpp b/libraries/networking/src/PacketHeaders.cpp index 8fedc6b979..a9ccec34bb 100644 --- a/libraries/networking/src/PacketHeaders.cpp +++ b/libraries/networking/src/PacketHeaders.cpp @@ -74,7 +74,7 @@ PacketVersion versionForPacketType(PacketType type) { return 1; case PacketTypeEntityAddOrEdit: case PacketTypeEntityData: - return VERSION_ENTITIES_ZONE_ENTITIES_HAVE_DYNAMIC_SHAPE; + return VERSION_ENTITIES_HAVE_NAMES; case PacketTypeEntityErase: return 2; case PacketTypeAudioStreamStats: diff --git a/libraries/networking/src/PacketHeaders.h b/libraries/networking/src/PacketHeaders.h index 01302f5568..7b12b1a089 100644 --- a/libraries/networking/src/PacketHeaders.h +++ b/libraries/networking/src/PacketHeaders.h @@ -139,5 +139,6 @@ const PacketVersion VERSION_ENTITIES_HAVE_ACCELERATION = 15; const PacketVersion VERSION_ENTITIES_HAVE_UUIDS = 16; const PacketVersion VERSION_ENTITIES_ZONE_ENTITIES_EXIST = 17; const PacketVersion VERSION_ENTITIES_ZONE_ENTITIES_HAVE_DYNAMIC_SHAPE = 18; +const PacketVersion VERSION_ENTITIES_HAVE_NAMES = 19; #endif // hifi_PacketHeaders_h From 73a5b8c4e2b94565c6eb02f8546b9fa8a7fabd5c Mon Sep 17 00:00:00 2001 From: Ryan Huffman Date: Fri, 1 May 2015 08:42:23 -0700 Subject: [PATCH 07/12] Add support for 'name' to edit.js --- examples/edit.js | 3 +++ examples/html/entityList.html | 21 +++++++++++++++------ examples/html/entityProperties.html | 10 ++++++++++ examples/html/style.css | 4 ++++ examples/libraries/entityList.js | 5 +++-- 5 files changed, 35 insertions(+), 8 deletions(-) diff --git a/examples/edit.js b/examples/edit.js index e6dd03de96..93c06c38f2 100644 --- a/examples/edit.js +++ b/examples/edit.js @@ -1213,6 +1213,9 @@ PropertiesTool = function(opts) { data.properties.rotation = Quat.fromPitchYawRollDegrees(rotation.x, rotation.y, rotation.z); } Entities.editEntity(selectionManager.selections[0], data.properties); + if (data.properties.name != undefined) { + entityListTool.sendUpdate(); + } } pushCommandForSelections(); selectionManager._update(); diff --git a/examples/html/entityList.html b/examples/html/entityList.html index bcc1c117ea..5795cc2acb 100644 --- a/examples/html/entityList.html +++ b/examples/html/entityList.html @@ -13,7 +13,7 @@ var DESC_STRING = ' ▴'; function loaded() { - entityList = new List('entity-list', { valueNames: ['type', 'url']}); + entityList = new List('entity-list', { valueNames: ['name', 'type', 'url']}); entityList.clear(); elEntityTable = document.getElementById("entity-table"); elEntityTableBody = document.getElementById("entity-table-body"); @@ -22,6 +22,9 @@ elTeleport = document.getElementById("teleport"); elNoEntitiesMessage = document.getElementById("no-entities"); + document.getElementById("entity-name").onclick = function() { + setSortColumn('name'); + }; document.getElementById("entity-type").onclick = function() { setSortColumn('type'); }; @@ -56,31 +59,34 @@ })); } - function addEntity(id, type, url) { + function addEntity(id, name, type, url) { if (entities[id] === undefined) { var urlParts = url.split('/'); var filename = urlParts[urlParts.length - 1]; - entityList.add([{ id: id, type: type, url: filename }], function(items) { + entityList.add([{ id: id, name: name, type: type, url: filename }], function(items) { var el = items[0].elm; var id = items[0]._values.id; entities[id] = { id: id, - name: id, + name: name, el: el, + item: items[0], }; el.setAttribute('id', 'entity_' + id); el.setAttribute('title', url); el.dataset.entityId = id; el.onclick = onRowClicked; el.ondblclick = onRowDoubleClicked; - el.innerHTML }); if (refreshEntityListTimer) { clearTimeout(refreshEntityListTimer); } refreshEntityListTimer = setTimeout(refreshEntityListObject, 50); + } else { + var item = entities[id].item; + item.values({ name: name, url: url }); } } @@ -90,6 +96,7 @@ } var elSortOrder = { + name: document.querySelector('#entity-name .sort-order'), type: document.querySelector('#entity-type .sort-order'), url: document.querySelector('#entity-url .sort-order'), } @@ -164,7 +171,7 @@ elNoEntitiesMessage.style.display = "none"; for (var i = 0; i < newEntities.length; i++) { var id = newEntities[i].id; - addEntity(id, newEntities[i].type, newEntities[i].url); + addEntity(id, newEntities[i].name, newEntities[i].type, newEntities[i].url); } updateSelectedEntities(data.selectedIDs); } @@ -190,6 +197,7 @@ Type  ▾ + Name  ▾ URL @@ -197,6 +205,7 @@ Type Type + Name
URL
diff --git a/examples/html/entityProperties.html b/examples/html/entityProperties.html index c01b2a6d10..b2f5cbb82c 100644 --- a/examples/html/entityProperties.html +++ b/examples/html/entityProperties.html @@ -98,6 +98,7 @@ var allSections = []; var elID = document.getElementById("property-id"); var elType = document.getElementById("property-type"); + var elName = document.getElementById("property-name"); var elLocked = document.getElementById("property-locked"); var elVisible = document.getElementById("property-visible"); var elPositionX = document.getElementById("property-pos-x"); @@ -262,6 +263,8 @@ enableChildren(document.getElementById("properties-list"), 'input'); } + elName.value = properties.name; + elVisible.checked = properties.visible; elPositionX.value = properties.position.x.toFixed(2); @@ -395,6 +398,7 @@ } elLocked.addEventListener('change', createEmitCheckedPropertyUpdateFunction('locked')); + elName.addEventListener('change', createEmitTextPropertyUpdateFunction('name')); elVisible.addEventListener('change', createEmitCheckedPropertyUpdateFunction('visible')); var positionChangeFunction = createEmitVec3PropertyUpdateFunction( @@ -590,6 +594,12 @@ +
+ Name +
+ +
+
Locked diff --git a/examples/html/style.css b/examples/html/style.css index 6a258d8f02..8be9b92a51 100644 --- a/examples/html/style.css +++ b/examples/html/style.css @@ -301,3 +301,7 @@ input[type="number"]::-webkit-inner-spin-button:hover, input[type="number"]::-webkit-inner-spin-button:active{ opacity: .8; } + +input#property-name { + width: 100%; +} diff --git a/examples/libraries/entityList.js b/examples/libraries/entityList.js index d0b8ddac7f..e10aed4051 100644 --- a/examples/libraries/entityList.js +++ b/examples/libraries/entityList.js @@ -31,7 +31,7 @@ EntityListTool = function(opts) { webView.eventBridge.emitScriptEvent(JSON.stringify(data)); }); - function sendUpdate() { + that.sendUpdate = function() { var entities = []; var ids = Entities.findEntities(MyAvatar.position, 100); for (var i = 0; i < ids.length; i++) { @@ -39,6 +39,7 @@ EntityListTool = function(opts) { var properties = Entities.getEntityProperties(id); entities.push({ id: id.id, + name: properties.name, type: properties.type, url: properties.type == "Model" ? properties.modelURL : "", }); @@ -76,7 +77,7 @@ EntityListTool = function(opts) { Menu.isOptionChecked(MENU_EASE_ON_FOCUS)); } } else if (data.type == "refresh") { - sendUpdate(); + that.sendUpdate(); } else if (data.type == "teleport") { if (selectionManager.hasSelection()) { MyAvatar.position = selectionManager.worldPosition; From cac5fa1371e8a93bdc4bceb016ddcb577085f98e Mon Sep 17 00:00:00 2001 From: Eric Levin Date: Fri, 1 May 2015 09:39:39 -0700 Subject: [PATCH 08/12] refactored grab script using velocity and spring force --- examples/grab.js | 214 ++++++++++++++++------------------------------- 1 file changed, 74 insertions(+), 140 deletions(-) diff --git a/examples/grab.js b/examples/grab.js index 88e23c9a46..cd7d59701e 100644 --- a/examples/grab.js +++ b/examples/grab.js @@ -5,17 +5,13 @@ var deltaMouse = { z: 0 } var entityProps; -var box, box2, ground; -var baseMoveFactor = .001; -var finalMoveMultiplier; -var avatarEntityDistance; -var camYaw, dv; -var prevPosition; -var newPosition; -var flingVelocity; -var flingMultiplier = 10; +var targetPosition; var moveUpDown = false; -var savedGravity; + +var currentPosition, currentVelocity; + +var grabSound = SoundCache.getSound("https://hifi-public.s3.amazonaws.com/eric/sounds/CloseClamp.wav"); +var releaseSound = SoundCache.getSound("https://hifi-public.s3.amazonaws.com/eric/sounds/ReleaseClamp.wav"); var DROP_DISTANCE = 5.0; var DROP_COLOR = { @@ -23,14 +19,9 @@ var DROP_COLOR = { green: 200, blue: 200 }; -var DROP_WIDTH = 4; +var DROP_WIDTH = 2; -var autoBox = false; -if (autoBox) { - setUpTestObjects(); -} - var dropLine = Overlays.addOverlay("line3d", { start: { x: 0, @@ -50,104 +41,80 @@ var dropLine = Overlays.addOverlay("line3d", { function mousePressEvent(event) { - if(!event.isLeftButton){ + if (!event.isLeftButton) { return; - } + } var pickRay = Camera.computePickRay(event.x, event.y); var intersection = Entities.findRayIntersection(pickRay); if (intersection.intersects && intersection.properties.collisionsWillMove) { grabbedEntity = intersection.entityID; var props = Entities.getEntityProperties(grabbedEntity) - prevPosition = props.position; isGrabbing = true; - savedGravity = props.gravity; - Overlays.editOverlay(dropLine, { + targetPosition = props.position; + currentPosition = props.position; + currentVelocity = props.velocity; + updateDropLine(targetPosition); + Audio.playSound(grabSound, { + position: props.position, + volume: 0.4 + }); + } +} + +function updateDropLine(position) { + Overlays.editOverlay(dropLine, { visible: true, - start: props.position, - end: Vec3.sum(props.position, { + start: position, + end: Vec3.sum(position, { x: 0, y: -DROP_DISTANCE, z: 0 }) - }); - Entities.editEntity(grabbedEntity, { - gravity: { - x: 0, - y: 0, - z: 0 - } - }); - //We need to store entity's current gravity, and then disable it while we move - - } - + }) } function mouseReleaseEvent() { if (isGrabbing) { - // flingObject(); - Entities.editEntity(grabbedEntity, { - gravity: savedGravity + isGrabbing = false; + Overlays.editOverlay(dropLine, { + visible: false }); + targetPosition = null; + Audio.playSound(grabSound, { + position: entityProps.position, + volume: 0.25 + }); + } - isGrabbing = false; - Overlays.editOverlay(dropLine, { - visible: false - }); -} - -function flingObject() { - //calculate velocity to give object base on current and previous position - entityProps = Entities.getEntityProperties(grabbedEntity); - - flingVelocity = Vec3.subtract(entityProps.position, prevPosition); - flingVelocity = Vec3.multiply(flingMultiplier, flingVelocity); - Entities.editEntity(grabbedEntity, { - velocity: flingVelocity - }); } function mouseMoveEvent(event) { if (isGrabbing) { - entityProps = Entities.getEntityProperties(grabbedEntity); - avatarEntityDistance = Vec3.distance(MyAvatar.position, entityProps.position); - finalMoveMultiplier = baseMoveFactor * Math.pow(avatarEntityDistance, 1.5); deltaMouse.x = event.x - prevMouse.x; if (!moveUpDown) { deltaMouse.z = event.y - prevMouse.y; + deltaMouse.y = 0; } else { deltaMouse.y = (event.y - prevMouse.y) * -1; + deltaMouse.z = 0; } - finalMoveMultiplier = baseMoveFactor * Math.pow(avatarEntityDistance, 1.5); - deltaMouse = Vec3.multiply(deltaMouse, finalMoveMultiplier); - camYaw = Quat.safeEulerAngles(Camera.getOrientation()).y; - dv = Vec3.multiplyQbyV(Quat.fromPitchYawRollDegrees(0, camYaw, 0), deltaMouse); - newPosition = Vec3.sum(entityProps.position, dv); - Entities.editEntity(grabbedEntity, { - position: newPosition - }); - Overlays.editOverlay(dropLine, { - start: newPosition, - end: Vec3.sum(newPosition, { - x: 0, - y: -DROP_DISTANCE, - z: 0 - }) - }); - - flingVelocity = Vec3.subtract(entityProps.position, prevPosition); - flingVelocity = Vec3.multiply(flingMultiplier, flingVelocity); - Entities.editEntity(grabbedEntity, { - velocity: flingVelocity - }); - prevPosition = entityProps.position; + // Update the target position by the amount the mouse moved + var camYaw = Quat.safeEulerAngles(Camera.getOrientation()).y; + var dPosition = Vec3.multiplyQbyV(Quat.fromPitchYawRollDegrees(0, camYaw, 0), deltaMouse); + // Adjust target position for the object by the mouse move + var avatarEntityDistance = Vec3.distance(Camera.getPosition(), currentPosition); + // Scale distance we want to move by the distance from the camera to the grabbed object + // TODO: Correct SCREEN_TO_METERS to be correct for the actual FOV, resolution + var SCREEN_TO_METERS = 0.001; + targetPosition = Vec3.sum(targetPosition, Vec3.multiply(dPosition, avatarEntityDistance * SCREEN_TO_METERS)); } prevMouse.x = event.x; prevMouse.y = event.y; } + function keyReleaseEvent(event) { if (event.text === "SHIFT") { moveUpDown = false; @@ -160,69 +127,34 @@ function keyPressEvent(event) { } } +function update(deltaTime) { + if (isGrabbing) { -function setUpTestObjects() { - var distance = 4; - box = Entities.addEntity({ - type: 'Box', - position: Vec3.sum(MyAvatar.position, Vec3.multiply(distance, Quat.getFront(Camera.getOrientation()))), - dimensions: { - x: .5, - y: .5, - z: .5 - }, - color: { - red: 200, - green: 50, - blue: 192 - }, - collisionsWillMove: true, - gravity: { - x: 0, - y: -1, - z: 0 - } - }); + entityProps = Entities.getEntityProperties(grabbedEntity); + currentPosition = entityProps.position; + currentVelocity = entityProps.velocity; - box2 = Entities.addEntity({ - type: 'Box', - position: Vec3.sum(MyAvatar.position, Vec3.multiply(distance + 1, Quat.getFront(Camera.getOrientation()))), - dimensions: { - x: .5, - y: .5, - z: .5 - }, - color: { - red: 200, - green: 50, - blue: 192 - }, - collisionsWillMove: true, - gravity: { - x: 0, - y: -1, - z: 0 - } - }); - - ground = Entities.addEntity({ - type: 'Box', - position: { - x: MyAvatar.position.x, - y: MyAvatar.position.y - 5, - z: MyAvatar.position.z - }, - dimensions: { - x: 100, - y: 2, - z: 100 - }, - color: { - red: 20, - green: 200, - blue: 50 - } - }); + var dPosition = Vec3.subtract(targetPosition, currentPosition); + var CLOSE_ENOUGH = 0.001; + if (Vec3.length(dPosition) > CLOSE_ENOUGH) { + // compute current velocity in the direction we want to move + var velocityTowardTarget = Vec3.dot(currentVelocity, Vec3.normalize(dPosition)); + // compute the speed we would like to be going toward the target position + var SPRING_RATE = 0.35; + var DAMPING_RATE = 0.55; + var desiredVelocity = Vec3.multiply(dPosition, (1.0 / deltaTime) * SPRING_RATE); + // compute how much we want to add to the existing velocity + var addedVelocity = Vec3.subtract(desiredVelocity, velocityTowardTarget); + var newVelocity = Vec3.sum(currentVelocity, addedVelocity); + // Add Damping + newVelocity = Vec3.subtract(newVelocity, Vec3.multiply(newVelocity, DAMPING_RATE)); + // Update entity + Entities.editEntity(grabbedEntity, { + velocity: newVelocity + }) + } + updateDropLine(currentPosition); + } } Controller.mouseMoveEvent.connect(mouseMoveEvent); @@ -230,3 +162,5 @@ Controller.mousePressEvent.connect(mousePressEvent); Controller.mouseReleaseEvent.connect(mouseReleaseEvent); Controller.keyPressEvent.connect(keyPressEvent); Controller.keyReleaseEvent.connect(keyReleaseEvent); +Script.update.connect(update); + From 3ee111d7572ebaf3786e79bbf58bc8dde25c628b Mon Sep 17 00:00:00 2001 From: Eric Levin Date: Fri, 1 May 2015 09:56:21 -0700 Subject: [PATCH 09/12] added script to generate a lot of physical blocks within a specified range --- examples/lotsoBlocks.js | 63 +++++++++++++++++++++++++++++++++++++++++ 1 file changed, 63 insertions(+) create mode 100644 examples/lotsoBlocks.js diff --git a/examples/lotsoBlocks.js b/examples/lotsoBlocks.js new file mode 100644 index 0000000000..63ed774d2d --- /dev/null +++ b/examples/lotsoBlocks.js @@ -0,0 +1,63 @@ +var NUM_BLOCKS = 200; +var size; +var SPAWN_RANGE = 10; +var boxes = []; +var basePosition, avatarRot; +var isAssignmentScript = false; +if(isAssignmentScript){ + basePosition = {x: 8000, y: 8000, z: 8000}; +} +else { + avatarRot = Quat.fromPitchYawRollDegrees(0, MyAvatar.bodyYaw, 0.0); + basePosition = Vec3.sum(MyAvatar.position, Vec3.multiply(SPAWN_RANGE * 3, Quat.getFront(avatarRot))); +} +basePosition.y -= SPAWN_RANGE; + +var ground = Entities.addEntity({ + type: "Model", + modelURL: "https://hifi-public.s3.amazonaws.com/eric/models/woodFloor.fbx", + dimensions: { + x: 100, + y: 2, + z: 100 + }, + position: basePosition, + shapeType: 'box' +}); + + +basePosition.y += SPAWN_RANGE + 2; +for (var i = 0; i < NUM_BLOCKS; i++) { + size = randFloat(-.2, 0.7); + boxes.push(Entities.addEntity({ + type: 'Box', + dimensions: { + x: size, + y: size, + z: size + }, + position: { + x: basePosition.x + randFloat(-SPAWN_RANGE, SPAWN_RANGE), + y: basePosition.y - randFloat(-SPAWN_RANGE, SPAWN_RANGE), + z: basePosition.z + randFloat(-SPAWN_RANGE, SPAWN_RANGE) + }, + color: {red: Math.random() * 255, green: Math.random() * 255, blue: Math.random() * 255}, + collisionsWillMove: true, + gravity: {x: 0, y: 0, z: 0} + })); +} + + + +function cleanup() { + Entities.deleteEntity(ground); + boxes.forEach(function(box){ + Entities.deleteEntity(box); + }); +} + +Script.scriptEnding.connect(cleanup); + +function randFloat(low, high) { + return low + Math.random() * ( high - low ); +} \ No newline at end of file From c506c36d7c38e480506989b7ad6c4158cbdd01df Mon Sep 17 00:00:00 2001 From: Ryan Huffman Date: Fri, 1 May 2015 11:26:43 -0700 Subject: [PATCH 10/12] Fix initialized-out-of-order warnings for name property --- libraries/entities/src/EntityItem.h | 2 +- libraries/entities/src/EntityItemProperties.cpp | 2 +- libraries/entities/src/EntityItemProperties.h | 2 +- 3 files changed, 3 insertions(+), 3 deletions(-) diff --git a/libraries/entities/src/EntityItem.h b/libraries/entities/src/EntityItem.h index 648ef7aece..ef1612ab06 100644 --- a/libraries/entities/src/EntityItem.h +++ b/libraries/entities/src/EntityItem.h @@ -343,7 +343,6 @@ protected: glm::vec3 _registrationPoint; glm::vec3 _angularVelocity; float _angularDamping; - QString _name; bool _visible; bool _ignoreForCollisions; bool _collisionsWillMove; @@ -352,6 +351,7 @@ protected: QUuid _simulatorID; // id of Node which is currently responsible for simulating this Entity quint64 _simulatorIDChangedTime; // when was _simulatorID last updated? QString _marketplaceID; + QString _name; // NOTE: Damping is applied like this: v *= pow(1 - damping, dt) // diff --git a/libraries/entities/src/EntityItemProperties.cpp b/libraries/entities/src/EntityItemProperties.cpp index 4376d89314..9b9c3327e6 100644 --- a/libraries/entities/src/EntityItemProperties.cpp +++ b/libraries/entities/src/EntityItemProperties.cpp @@ -282,6 +282,7 @@ EntityPropertyFlags EntityItemProperties::getChangedProperties() const { CHECK_PROPERTY_CHANGE(PROP_LOCAL_GRAVITY, localGravity); CHECK_PROPERTY_CHANGE(PROP_PARTICLE_RADIUS, particleRadius); CHECK_PROPERTY_CHANGE(PROP_MARKETPLACE_ID, marketplaceID); + CHECK_PROPERTY_CHANGE(PROP_NAME, name); CHECK_PROPERTY_CHANGE(PROP_KEYLIGHT_COLOR, keyLightColor); CHECK_PROPERTY_CHANGE(PROP_KEYLIGHT_INTENSITY, keyLightIntensity); CHECK_PROPERTY_CHANGE(PROP_KEYLIGHT_AMBIENT_INTENSITY, keyLightAmbientIntensity); @@ -292,7 +293,6 @@ EntityPropertyFlags EntityItemProperties::getChangedProperties() const { CHECK_PROPERTY_CHANGE(PROP_STAGE_ALTITUDE, stageAltitude); CHECK_PROPERTY_CHANGE(PROP_STAGE_DAY, stageDay); CHECK_PROPERTY_CHANGE(PROP_STAGE_HOUR, stageHour); - CHECK_PROPERTY_CHANGE(PROP_NAME, name); return changedProperties; } diff --git a/libraries/entities/src/EntityItemProperties.h b/libraries/entities/src/EntityItemProperties.h index 950f12577b..67711d2168 100644 --- a/libraries/entities/src/EntityItemProperties.h +++ b/libraries/entities/src/EntityItemProperties.h @@ -189,7 +189,6 @@ public: DEFINE_PROPERTY_REF_WITH_SETTER(PROP_POSITION, Position, position, glm::vec3); DEFINE_PROPERTY_REF(PROP_DIMENSIONS, Dimensions, dimensions, glm::vec3); DEFINE_PROPERTY_REF(PROP_ROTATION, Rotation, rotation, glm::quat); - DEFINE_PROPERTY_REF(PROP_NAME, Name, name, QString); DEFINE_PROPERTY(PROP_DENSITY, Density, density, float); DEFINE_PROPERTY_REF(PROP_VELOCITY, Velocity, velocity, glm::vec3); DEFINE_PROPERTY_REF(PROP_GRAVITY, Gravity, gravity, glm::vec3); @@ -241,6 +240,7 @@ public: DEFINE_PROPERTY(PROP_STAGE_ALTITUDE, StageAltitude, stageAltitude, float); DEFINE_PROPERTY(PROP_STAGE_DAY, StageDay, stageDay, quint16); DEFINE_PROPERTY(PROP_STAGE_HOUR, StageHour, stageHour, float); + DEFINE_PROPERTY_REF(PROP_NAME, Name, name, QString); public: From 0883bde1be8ab8bfd85d00e20b62b1e5b7a5fda6 Mon Sep 17 00:00:00 2001 From: Ryan Huffman Date: Fri, 1 May 2015 11:29:23 -0700 Subject: [PATCH 11/12] Update compiler flags to produce warnings on non-gnu compilers --- CMakeLists.txt | 9 +++++---- 1 file changed, 5 insertions(+), 4 deletions(-) diff --git a/CMakeLists.txt b/CMakeLists.txt index b271664c35..347341efa0 100644 --- a/CMakeLists.txt +++ b/CMakeLists.txt @@ -45,10 +45,11 @@ if (WIN32) # Caveats: http://stackoverflow.com/questions/2288728/drawbacks-of-using-largeaddressaware-for-32-bit-windows-executables # TODO: Remove when building 64-bit. set(CMAKE_EXE_LINKER_FLAGS "${CMAKE_EXE_LINKER_FLAGS} /LARGEADDRESSAWARE") -elseif (CMAKE_COMPILER_IS_GNUCC OR CMAKE_COMPILER_IS_GNUCXX) - #SET(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} -Wall -Wno-long-long -pedantic") - #SET(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} -Wall -Wno-unknown-pragmas") - set(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} -Wall -Wextra -fno-strict-aliasing -Wno-unused-parameter -ggdb") +else () + set(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} -Wall -Wextra -fno-strict-aliasing -Wno-unused-parameter") + if (CMAKE_COMPILER_IS_GNUCC OR CMAKE_COMPILER_IS_GNUCXX) + set(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} -ggdb") + endif () endif(WIN32) if (NOT MSVC12) From 7f84b27880094d08cd3b9bef553eeaaa62844f4e Mon Sep 17 00:00:00 2001 From: Ryan Huffman Date: Fri, 1 May 2015 11:59:39 -0700 Subject: [PATCH 12/12] Add support for changing sphere color in edit.js --- examples/html/entityProperties.html | 46 ++++++++++++++--------------- 1 file changed, 23 insertions(+), 23 deletions(-) diff --git a/examples/html/entityProperties.html b/examples/html/entityProperties.html index c01b2a6d10..5d220788e8 100644 --- a/examples/html/entityProperties.html +++ b/examples/html/entityProperties.html @@ -146,11 +146,10 @@ var elScriptURL = document.getElementById("property-script-url"); var elUserData = document.getElementById("property-user-data"); - var elBoxSections = document.querySelectorAll(".box-section"); - allSections.push(elBoxSections); - var elBoxColorRed = document.getElementById("property-box-red"); - var elBoxColorGreen = document.getElementById("property-box-green"); - var elBoxColorBlue = document.getElementById("property-box-blue"); + var elColorSection = document.getElementById("color-section"); + var elColorRed = document.getElementById("property-color-red"); + var elColorGreen = document.getElementById("property-color-green"); + var elColorBlue = document.getElementById("property-color-blue"); var elLightSections = document.querySelectorAll(".light-section"); allSections.push(elLightSections); @@ -310,16 +309,17 @@ allSections[i][j].style.display = 'none'; } } - - if (properties.type == "Box") { - for (var i = 0; i < elBoxSections.length; i++) { - elBoxSections[i].style.display = 'block'; - } - elBoxColorRed.value = properties.color.red; - elBoxColorGreen.value = properties.color.green; - elBoxColorBlue.value = properties.color.blue; - } else if (properties.type == "Model") { + if (properties.type == "Box" || properties.type == "Sphere") { + elColorSection.style.display = 'block'; + elColorRed.value = properties.color.red; + elColorGreen.value = properties.color.green; + elColorBlue.value = properties.color.blue; + } else { + elColorSection.style.display = 'none'; + } + + if (properties.type == "Model") { for (var i = 0; i < elModelSections.length; i++) { elModelSections[i].style.display = 'block'; } @@ -454,11 +454,11 @@ elScriptURL.addEventListener('change', createEmitTextPropertyUpdateFunction('script')); elUserData.addEventListener('change', createEmitTextPropertyUpdateFunction('userData')); - var boxColorChangeFunction = createEmitColorPropertyUpdateFunction( - 'color', elBoxColorRed, elBoxColorGreen, elBoxColorBlue); - elBoxColorRed.addEventListener('change', boxColorChangeFunction); - elBoxColorGreen.addEventListener('change', boxColorChangeFunction); - elBoxColorBlue.addEventListener('change', boxColorChangeFunction); + var colorChangeFunction = createEmitColorPropertyUpdateFunction( + 'color', elColorRed, elColorGreen, elColorBlue); + elColorRed.addEventListener('change', colorChangeFunction); + elColorGreen.addEventListener('change', colorChangeFunction); + elColorBlue.addEventListener('change', colorChangeFunction); elLightSpotLight.addEventListener('change', createEmitCheckedPropertyUpdateFunction('isSpotlight')); @@ -743,12 +743,12 @@
-
+
Color
-
R
-
G
-
B
+
R
+
G
+
B