mirror of
https://github.com/HifiExperiments/overte.git
synced 2025-08-09 04:58:08 +02:00
Glow when moving.
This commit is contained in:
parent
ff245427fd
commit
7da9556815
5 changed files with 49 additions and 4 deletions
|
@ -105,7 +105,8 @@ Avatar::Avatar(Node* owningNode) :
|
||||||
_initialized(false),
|
_initialized(false),
|
||||||
_handHoldingPosition(0.0f, 0.0f, 0.0f),
|
_handHoldingPosition(0.0f, 0.0f, 0.0f),
|
||||||
_maxArmLength(0.0f),
|
_maxArmLength(0.0f),
|
||||||
_pelvisStandingHeight(0.0f)
|
_pelvisStandingHeight(0.0f),
|
||||||
|
_moving(false)
|
||||||
{
|
{
|
||||||
// give the pointer to our head to inherited _headData variable from AvatarData
|
// give the pointer to our head to inherited _headData variable from AvatarData
|
||||||
_headData = &_head;
|
_headData = &_head;
|
||||||
|
@ -695,6 +696,10 @@ float Avatar::getBallRenderAlpha(int ball, bool lookingInMirror) const {
|
||||||
}
|
}
|
||||||
|
|
||||||
void Avatar::renderBody(bool lookingInMirror, bool renderAvatarBalls) {
|
void Avatar::renderBody(bool lookingInMirror, bool renderAvatarBalls) {
|
||||||
|
|
||||||
|
// glow when moving
|
||||||
|
Glower glower(_moving ? 1.0f : 0.0f);
|
||||||
|
|
||||||
if (_head.getFace().isFullFrame()) {
|
if (_head.getFace().isFullFrame()) {
|
||||||
// Render the full-frame video
|
// Render the full-frame video
|
||||||
float alpha = getBallRenderAlpha(BODY_BALL_HEAD_BASE, lookingInMirror);
|
float alpha = getBallRenderAlpha(BODY_BALL_HEAD_BASE, lookingInMirror);
|
||||||
|
@ -793,6 +798,14 @@ void Avatar::getBodyBallTransform(AvatarJointID jointID, glm::vec3& position, gl
|
||||||
rotation = _bodyBall[jointID].rotation;
|
rotation = _bodyBall[jointID].rotation;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
int Avatar::parseData(unsigned char* sourceBuffer, int numBytes) {
|
||||||
|
// change in position implies movement
|
||||||
|
glm::vec3 oldPosition = _position;
|
||||||
|
AvatarData::parseData(sourceBuffer, numBytes);
|
||||||
|
const float MOVE_DISTANCE_THRESHOLD = 0.001f;
|
||||||
|
_moving = glm::distance(oldPosition, _position) > MOVE_DISTANCE_THRESHOLD;
|
||||||
|
}
|
||||||
|
|
||||||
void Avatar::saveData(QSettings* set) {
|
void Avatar::saveData(QSettings* set) {
|
||||||
set->beginGroup("Avatar");
|
set->beginGroup("Avatar");
|
||||||
|
|
||||||
|
|
|
@ -164,6 +164,8 @@ public:
|
||||||
// Get the position/rotation of a single body ball
|
// Get the position/rotation of a single body ball
|
||||||
void getBodyBallTransform(AvatarJointID jointID, glm::vec3& position, glm::quat& rotation) const;
|
void getBodyBallTransform(AvatarJointID jointID, glm::vec3& position, glm::quat& rotation) const;
|
||||||
|
|
||||||
|
virtual int parseData(unsigned char* sourceBuffer, int numBytes);
|
||||||
|
|
||||||
static void renderJointConnectingCone(glm::vec3 position1, glm::vec3 position2, float radius1, float radius2);
|
static void renderJointConnectingCone(glm::vec3 position1, glm::vec3 position2, float radius1, float radius2);
|
||||||
|
|
||||||
public slots:
|
public slots:
|
||||||
|
@ -219,6 +221,8 @@ protected:
|
||||||
float _stringLength;
|
float _stringLength;
|
||||||
AvatarVoxelSystem _voxels;
|
AvatarVoxelSystem _voxels;
|
||||||
|
|
||||||
|
bool _moving; ///< set when position is changing
|
||||||
|
|
||||||
// protected methods...
|
// protected methods...
|
||||||
glm::vec3 getBodyRightDirection() const { return getOrientation() * IDENTITY_RIGHT; }
|
glm::vec3 getBodyRightDirection() const { return getOrientation() * IDENTITY_RIGHT; }
|
||||||
glm::vec3 getBodyUpDirection() const { return getOrientation() * IDENTITY_UP; }
|
glm::vec3 getBodyUpDirection() const { return getOrientation() * IDENTITY_UP; }
|
||||||
|
|
|
@ -318,6 +318,10 @@ void MyAvatar::simulate(float deltaTime, Transmitter* transmitter, float gyroCam
|
||||||
_mode = AVATAR_MODE_INTERACTING;
|
_mode = AVATAR_MODE_INTERACTING;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
// update moving flag based on speed
|
||||||
|
const float MOVING_SPEED_THRESHOLD = 0.01f;
|
||||||
|
_moving = _speed > MOVING_SPEED_THRESHOLD;
|
||||||
|
|
||||||
// update position by velocity, and subtract the change added earlier for gravity
|
// update position by velocity, and subtract the change added earlier for gravity
|
||||||
_position += _velocity * deltaTime;
|
_position += _velocity * deltaTime;
|
||||||
|
|
||||||
|
@ -511,7 +515,13 @@ void MyAvatar::renderBody(bool lookingInMirror, bool renderAvatarBalls) {
|
||||||
|
|
||||||
if (Application::getInstance()->getCamera()->getMode() == CAMERA_MODE_FIRST_PERSON) {
|
if (Application::getInstance()->getCamera()->getMode() == CAMERA_MODE_FIRST_PERSON) {
|
||||||
// Dont display body
|
// Dont display body
|
||||||
} else if (_head.getFace().isFullFrame()) {
|
return;
|
||||||
|
}
|
||||||
|
|
||||||
|
// glow when moving
|
||||||
|
Glower glower(_moving ? 1.0f : 0.0f);
|
||||||
|
|
||||||
|
if (_head.getFace().isFullFrame()) {
|
||||||
// Render the full-frame video
|
// Render the full-frame video
|
||||||
float alpha = getBallRenderAlpha(BODY_BALL_HEAD_BASE, lookingInMirror);
|
float alpha = getBallRenderAlpha(BODY_BALL_HEAD_BASE, lookingInMirror);
|
||||||
if (alpha > 0.0f) {
|
if (alpha > 0.0f) {
|
||||||
|
@ -1032,4 +1042,4 @@ void MyAvatar::setOrientation(const glm::quat& orientation) {
|
||||||
|
|
||||||
void MyAvatar::setNewScale(const float scale) {
|
void MyAvatar::setNewScale(const float scale) {
|
||||||
_newScale = scale;
|
_newScale = scale;
|
||||||
}
|
}
|
||||||
|
|
|
@ -73,10 +73,11 @@ void GlowEffect::begin(float intensity) {
|
||||||
// store the current intensity and add the new amount
|
// store the current intensity and add the new amount
|
||||||
_intensityStack.push(_intensity);
|
_intensityStack.push(_intensity);
|
||||||
glBlendColor(0.0f, 0.0f, 0.0f, _intensity += intensity);
|
glBlendColor(0.0f, 0.0f, 0.0f, _intensity += intensity);
|
||||||
_isEmpty = false;
|
_isEmpty &= (_intensity == 0.0f);
|
||||||
}
|
}
|
||||||
|
|
||||||
void GlowEffect::end() {
|
void GlowEffect::end() {
|
||||||
|
// restore the saved intensity
|
||||||
glBlendColor(0.0f, 0.0f, 0.0f, _intensity = _intensityStack.pop());
|
glBlendColor(0.0f, 0.0f, 0.0f, _intensity = _intensityStack.pop());
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -270,3 +271,12 @@ void GlowEffect::cycleRenderMode() {
|
||||||
break;
|
break;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
Glower::Glower(float amount) {
|
||||||
|
Application::getInstance()->getGlowEffect()->begin(amount);
|
||||||
|
}
|
||||||
|
|
||||||
|
Glower::~Glower() {
|
||||||
|
Application::getInstance()->getGlowEffect()->end();
|
||||||
|
}
|
||||||
|
|
||||||
|
|
|
@ -69,4 +69,12 @@ private:
|
||||||
QStack<float> _intensityStack;
|
QStack<float> _intensityStack;
|
||||||
};
|
};
|
||||||
|
|
||||||
|
/// RAII-style glow handler. Applies glow when in scope.
|
||||||
|
class Glower {
|
||||||
|
public:
|
||||||
|
|
||||||
|
Glower(float amount = 1.0f);
|
||||||
|
~Glower();
|
||||||
|
};
|
||||||
|
|
||||||
#endif /* defined(__interface__GlowEffect__) */
|
#endif /* defined(__interface__GlowEffect__) */
|
||||||
|
|
Loading…
Reference in a new issue