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)
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/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);
+
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 |
|
diff --git a/examples/html/entityProperties.html b/examples/html/entityProperties.html
index c01b2a6d10..3e775ec698 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");
@@ -146,11 +147,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);
@@ -262,6 +262,8 @@
enableChildren(document.getElementById("properties-list"), 'input');
}
+ elName.value = properties.name;
+
elVisible.checked = properties.visible;
elPositionX.value = properties.position.x.toFixed(2);
@@ -310,16 +312,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';
}
@@ -395,6 +398,7 @@
}
elLocked.addEventListener('change', createEmitCheckedPropertyUpdateFunction('locked'));
+ elName.addEventListener('change', createEmitTextPropertyUpdateFunction('name'));
elVisible.addEventListener('change', createEmitCheckedPropertyUpdateFunction('visible'));
var positionChangeFunction = createEmitVec3PropertyUpdateFunction(
@@ -454,11 +458,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'));
@@ -590,6 +594,12 @@
+
Locked
@@ -743,12 +753,12 @@
-
+
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;
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
diff --git a/libraries/entities-renderer/src/RenderableBoxEntityItem.cpp b/libraries/entities-renderer/src/RenderableBoxEntityItem.cpp
index f7828806ab..2f40b6ce6b 100644
--- a/libraries/entities-renderer/src/RenderableBoxEntityItem.cpp
+++ b/libraries/entities-renderer/src/RenderableBoxEntityItem.cpp
@@ -35,6 +35,14 @@ void RenderableBoxEntityItem::render(RenderArgs* args) {
glm::vec4 cubeColor(getColor()[RED_INDEX] / MAX_COLOR, getColor()[GREEN_INDEX] / MAX_COLOR,
getColor()[BLUE_INDEX] / MAX_COLOR, getLocalRenderAlpha());
+
+ bool highlightSimulationOwnership = false;
+ if (args->_debugFlags & RenderArgs::RENDER_DEBUG_SIMULATION_OWNERSHIP) {
+ auto nodeList = DependencyManager::get
();
+ const QUuid& myNodeID = nodeList->getSessionUUID();
+ highlightSimulationOwnership = (getSimulatorID() == myNodeID);
+ }
+
glPushMatrix();
glTranslatef(position.x, position.y, position.z);
glm::vec3 axis = glm::axis(rotation);
@@ -43,8 +51,11 @@ void RenderableBoxEntityItem::render(RenderArgs* args) {
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);
+ if (highlightSimulationOwnership) {
+ DependencyManager::get()->renderWireCube(1.0f, cubeColor);
+ } else {
+ DependencyManager::get()->renderSolidCube(1.0f, cubeColor);
+ }
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,
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..ef1612ab06 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; }
@@ -348,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 267cf75a11..0a416aeaf5 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),
@@ -281,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);
@@ -361,6 +363,7 @@ QScriptValue EntityItemProperties::copyToScriptValue(QScriptEngine* engine, bool
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);
@@ -462,6 +465,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);
@@ -681,6 +685,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();
@@ -929,6 +934,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;
}
@@ -978,6 +984,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 9a1c8ad5a6..ac25f83f2b 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
@@ -239,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:
@@ -331,6 +333,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/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();
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
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_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/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..c94fc0d151 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,18 +26,18 @@ attribute vec4 clusterIndices;
attribute vec4 clusterWeights;
// the interpolated normal
-varying vec4 normal;
+varying vec4 interpolatedNormal;
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];
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);
}