mirror of
https://github.com/overte-org/overte.git
synced 2025-07-22 21:06:24 +02:00
change color lerp to use HSV color
This commit is contained in:
parent
2e0cac4676
commit
c729ceccb5
1 changed files with 44 additions and 17 deletions
|
@ -20,15 +20,16 @@
|
||||||
|
|
||||||
var overlayPosition = Vec3.ZERO;
|
var overlayPosition = Vec3.ZERO;
|
||||||
var tweenPosition = 0;
|
var tweenPosition = 0;
|
||||||
|
// colors are in HSV, h needs to be a value from 0-1
|
||||||
var startColor = {
|
var startColor = {
|
||||||
red: 150,
|
h: 0,
|
||||||
green: 150,
|
s: 0,
|
||||||
blue: 150
|
v: 0.67
|
||||||
};
|
};
|
||||||
var endColor = {
|
var endColor = {
|
||||||
red: 255,
|
h: 0,
|
||||||
green: 0,
|
s: 1,
|
||||||
blue: 0
|
v: 1
|
||||||
};
|
};
|
||||||
var overlayID;
|
var overlayID;
|
||||||
|
|
||||||
|
@ -43,17 +44,39 @@
|
||||||
}
|
}
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
if (!overlayID) {
|
updateOverlay();
|
||||||
createOverlay();
|
|
||||||
} else {
|
|
||||||
updateOverlay();
|
|
||||||
}
|
|
||||||
}
|
}
|
||||||
|
|
||||||
function lerp(a, b, val) {
|
function lerp(a, b, val) {
|
||||||
return (1 - val) * a + val * b;
|
return (1 - val) * a + val * b;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
// hsv conversion expects 0-1 values
|
||||||
|
function hsvToRgb(h, s, v) {
|
||||||
|
var r, g, b;
|
||||||
|
|
||||||
|
var i = Math.floor(h * 6);
|
||||||
|
var f = h * 6 - i;
|
||||||
|
var p = v * (1 - s);
|
||||||
|
var q = v * (1 - f * s);
|
||||||
|
var t = v * (1 - (1 - f) * s);
|
||||||
|
|
||||||
|
switch (i % 6) {
|
||||||
|
case 0: r = v, g = t, b = p; break;
|
||||||
|
case 1: r = q, g = v, b = p; break;
|
||||||
|
case 2: r = p, g = v, b = t; break;
|
||||||
|
case 3: r = p, g = q, b = v; break;
|
||||||
|
case 4: r = t, g = p, b = v; break;
|
||||||
|
case 5: r = v, g = p, b = q; break;
|
||||||
|
}
|
||||||
|
|
||||||
|
return {
|
||||||
|
red: r * 255,
|
||||||
|
green: g * 255,
|
||||||
|
blue: b * 255
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
function getOffsetPosition() {
|
function getOffsetPosition() {
|
||||||
return Vec3.sum(MyAvatar.getHeadPosition(), Quat.getFront(Camera.orientation));
|
return Vec3.sum(MyAvatar.getHeadPosition(), Quat.getFront(Camera.orientation));
|
||||||
}
|
}
|
||||||
|
@ -98,11 +121,17 @@
|
||||||
overlayPosition.y = lerp(overlayPosition.y, offsetPosition.y, LERP_AMOUNT);
|
overlayPosition.y = lerp(overlayPosition.y, offsetPosition.y, LERP_AMOUNT);
|
||||||
overlayPosition.z = lerp(overlayPosition.z, offsetPosition.z, LERP_AMOUNT);
|
overlayPosition.z = lerp(overlayPosition.z, offsetPosition.z, LERP_AMOUNT);
|
||||||
|
|
||||||
|
var rgbColor = hsvToRgb(
|
||||||
|
lerp(startColor.h, endColor.h, tweenPosition),
|
||||||
|
lerp(startColor.s, endColor.s, tweenPosition),
|
||||||
|
lerp(startColor.v, endColor.v, tweenPosition)
|
||||||
|
);
|
||||||
|
|
||||||
Overlays.editOverlay(overlayID, {
|
Overlays.editOverlay(overlayID, {
|
||||||
color: {
|
color: {
|
||||||
red: lerp(startColor.red, endColor.red, tweenPosition),
|
red: rgbColor.red,
|
||||||
green: lerp(startColor.green, endColor.green, tweenPosition),
|
green: rgbColor.green,
|
||||||
blue: lerp(startColor.blue, endColor.blue, tweenPosition)
|
blue: rgbColor.blue
|
||||||
},
|
},
|
||||||
position: overlayPosition,
|
position: overlayPosition,
|
||||||
rotation: Camera.orientation
|
rotation: Camera.orientation
|
||||||
|
@ -114,9 +143,7 @@
|
||||||
}
|
}
|
||||||
|
|
||||||
function cleanup() {
|
function cleanup() {
|
||||||
if (overlayID) {
|
deleteOverlay();
|
||||||
deleteOverlay();
|
|
||||||
}
|
|
||||||
AudioDevice.muteToggled.disconnect(onMuteToggled);
|
AudioDevice.muteToggled.disconnect(onMuteToggled);
|
||||||
Script.update.disconnect(update);
|
Script.update.disconnect(update);
|
||||||
}
|
}
|
||||||
|
|
Loading…
Reference in a new issue