mirror of
https://github.com/overte-org/overte.git
synced 2025-08-08 06:57:37 +02:00
Changed updates locations
This commit is contained in:
parent
293c2e94ad
commit
110b034bcb
4 changed files with 59 additions and 51 deletions
|
@ -103,6 +103,31 @@ float Avatar::getLODDistance() const {
|
||||||
|
|
||||||
void Avatar::simulate(float deltaTime) {
|
void Avatar::simulate(float deltaTime) {
|
||||||
PerformanceTimer perfTimer("simulate");
|
PerformanceTimer perfTimer("simulate");
|
||||||
|
|
||||||
|
// update the avatar's position according to its referential
|
||||||
|
if (_referential) {
|
||||||
|
if (_referential->hasExtraData()) {
|
||||||
|
ModelTree* tree = Application::getInstance()->getModels()->getTree();
|
||||||
|
switch (_referential->type()) {
|
||||||
|
case Referential::MODEL:
|
||||||
|
_referential = new ModelReferential(_referential,
|
||||||
|
tree,
|
||||||
|
this);
|
||||||
|
break;
|
||||||
|
case Referential::JOINT:
|
||||||
|
_referential = new JointReferential(_referential,
|
||||||
|
tree,
|
||||||
|
this);
|
||||||
|
break;
|
||||||
|
default:
|
||||||
|
qDebug() << "[WARNING] Avatar::simulate(): Unknown referential type.";
|
||||||
|
break;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
_referential->update();
|
||||||
|
}
|
||||||
|
|
||||||
if (_scale != _targetScale) {
|
if (_scale != _targetScale) {
|
||||||
setScale(_targetScale);
|
setScale(_targetScale);
|
||||||
}
|
}
|
||||||
|
@ -180,28 +205,6 @@ void Avatar::simulate(float deltaTime) {
|
||||||
}
|
}
|
||||||
_displayNameAlpha = abs(_displayNameAlpha - _displayNameTargetAlpha) < 0.01f ? _displayNameTargetAlpha : _displayNameAlpha;
|
_displayNameAlpha = abs(_displayNameAlpha - _displayNameTargetAlpha) < 0.01f ? _displayNameTargetAlpha : _displayNameAlpha;
|
||||||
}
|
}
|
||||||
if (_referential) {
|
|
||||||
if (_referential->hasExtraData()) {
|
|
||||||
ModelTree* tree = Application::getInstance()->getModels()->getTree();
|
|
||||||
switch (_referential->type()) {
|
|
||||||
case Referential::MODEL:
|
|
||||||
_referential = new ModelReferential(_referential,
|
|
||||||
tree,
|
|
||||||
this);
|
|
||||||
break;
|
|
||||||
case Referential::JOINT:
|
|
||||||
_referential = new JointReferential(_referential,
|
|
||||||
tree,
|
|
||||||
this);
|
|
||||||
break;
|
|
||||||
default:
|
|
||||||
qDebug() << "[WARNING] Avatar::simulate(): Unknown referential type.";
|
|
||||||
break;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
_referential->update();
|
|
||||||
}
|
|
||||||
}
|
}
|
||||||
|
|
||||||
void Avatar::updateAcceleration(float deltaTime) {
|
void Avatar::updateAcceleration(float deltaTime) {
|
||||||
|
@ -241,18 +244,9 @@ static TextRenderer* textRenderer(TextRendererType type) {
|
||||||
}
|
}
|
||||||
|
|
||||||
void Avatar::render(const glm::vec3& cameraPosition, RenderMode renderMode) {
|
void Avatar::render(const glm::vec3& cameraPosition, RenderMode renderMode) {
|
||||||
// make sure we have the right position
|
if (_referential) {
|
||||||
_skeletonModel.setTranslation(getPosition());
|
_referential->update();
|
||||||
static const glm::quat refOrientation = glm::angleAxis(PI, glm::vec3(0.0f, 1.0f, 0.0f));
|
}
|
||||||
_skeletonModel.setRotation(getOrientation() * refOrientation);
|
|
||||||
const float MODEL_SCALE = 0.0006f;
|
|
||||||
_skeletonModel.setScale(glm::vec3(1.0f, 1.0f, 1.0f) * getScale() * MODEL_SCALE);
|
|
||||||
|
|
||||||
glm::vec3 headPosition = _position;
|
|
||||||
_skeletonModel.getHeadPosition(headPosition);
|
|
||||||
Head* head = getHead();
|
|
||||||
head->setPosition(headPosition);
|
|
||||||
head->setScale(_scale);
|
|
||||||
|
|
||||||
if (glm::distance(Application::getInstance()->getAvatar()->getPosition(),
|
if (glm::distance(Application::getInstance()->getAvatar()->getPosition(),
|
||||||
_position) < 10.0f) {
|
_position) < 10.0f) {
|
||||||
|
@ -303,7 +297,7 @@ void Avatar::render(const glm::vec3& cameraPosition, RenderMode renderMode) {
|
||||||
float boundingRadius = getBillboardSize();
|
float boundingRadius = getBillboardSize();
|
||||||
ViewFrustum* frustum = (renderMode == Avatar::SHADOW_RENDER_MODE) ?
|
ViewFrustum* frustum = (renderMode == Avatar::SHADOW_RENDER_MODE) ?
|
||||||
Application::getInstance()->getShadowViewFrustum() : Application::getInstance()->getViewFrustum();
|
Application::getInstance()->getShadowViewFrustum() : Application::getInstance()->getViewFrustum();
|
||||||
if (frustum->sphereInFrustum(_position, boundingRadius) == ViewFrustum::OUTSIDE) {
|
if (frustum->sphereInFrustum(getPosition(), boundingRadius) == ViewFrustum::OUTSIDE) {
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
|
@ -70,7 +70,7 @@ void ModelReferential::update() {
|
||||||
bool somethingChanged = false;
|
bool somethingChanged = false;
|
||||||
if (item->getRadius() != _refScale) {
|
if (item->getRadius() != _refScale) {
|
||||||
_refScale = item->getRadius();
|
_refScale = item->getRadius();
|
||||||
_avatar->setTargetScale(_refScale * _scale);
|
_avatar->setTargetScale(_refScale * _scale, true);
|
||||||
somethingChanged = true;
|
somethingChanged = true;
|
||||||
}
|
}
|
||||||
if (item->getModelRotation() != _refRotation) {
|
if (item->getModelRotation() != _refRotation) {
|
||||||
|
@ -147,17 +147,17 @@ void JointReferential::update() {
|
||||||
bool somethingChanged = false;
|
bool somethingChanged = false;
|
||||||
if (item->getRadius() != _refScale) {
|
if (item->getRadius() != _refScale) {
|
||||||
_refScale = item->getRadius();
|
_refScale = item->getRadius();
|
||||||
_avatar->setTargetScale(_refScale * _scale);
|
_avatar->setTargetScale(_refScale * _scale, true);
|
||||||
somethingChanged = true;
|
somethingChanged = true;
|
||||||
}
|
}
|
||||||
if (item->getModelRotation() != _refRotation) {
|
if (item->getModelRotation() != _refRotation) {
|
||||||
model->getJointRotationInWorldFrame(_jointIndex, _refRotation);
|
model->getJointRotationInWorldFrame(_jointIndex, _refRotation);
|
||||||
_avatar->setOrientation(_refRotation * _rotation);
|
_avatar->setOrientation(_refRotation * _rotation, true);
|
||||||
somethingChanged = true;
|
somethingChanged = true;
|
||||||
}
|
}
|
||||||
if (item->getPosition() != _refPosition || somethingChanged) {
|
if (item->getPosition() != _refPosition || somethingChanged) {
|
||||||
model->getJointPositionInWorldFrame(_jointIndex, _refPosition);
|
model->getJointPositionInWorldFrame(_jointIndex, _refPosition);
|
||||||
_avatar->setPosition(_refPosition + _refRotation * (_translation * _refScale));
|
_avatar->setPosition(_refPosition + _refRotation * (_translation * _refScale), true);
|
||||||
somethingChanged = true;
|
somethingChanged = true;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
|
@ -94,7 +94,29 @@ void AvatarData::setOrientation(const glm::quat& orientation, bool overideRefere
|
||||||
_bodyYaw = eulerAngles.y;
|
_bodyYaw = eulerAngles.y;
|
||||||
_bodyRoll = eulerAngles.z;
|
_bodyRoll = eulerAngles.z;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
float AvatarData::getTargetScale() const {
|
||||||
|
if (_referential) {
|
||||||
|
_referential->update();
|
||||||
|
}
|
||||||
|
|
||||||
|
return _targetScale;
|
||||||
|
}
|
||||||
|
|
||||||
|
void AvatarData::setTargetScale(float targetScale, bool overideReferential) {
|
||||||
|
if (!_referential || overideReferential) {
|
||||||
|
_targetScale = targetScale;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
void AvatarData::setClampedTargetScale(float targetScale, bool overideReferential) {
|
||||||
|
|
||||||
|
targetScale = glm::clamp(targetScale, MIN_AVATAR_SCALE, MAX_AVATAR_SCALE);
|
||||||
|
|
||||||
|
setTargetScale(targetScale, overideReferential);
|
||||||
|
qDebug() << "Changed scale to " << _targetScale;
|
||||||
|
}
|
||||||
|
|
||||||
glm::vec3 AvatarData::getHandPosition() const {
|
glm::vec3 AvatarData::getHandPosition() const {
|
||||||
return getOrientation() * _handPosition + _position;
|
return getOrientation() * _handPosition + _position;
|
||||||
|
@ -868,14 +890,6 @@ void AvatarData::setJointMappingsFromNetworkReply() {
|
||||||
networkReply->deleteLater();
|
networkReply->deleteLater();
|
||||||
}
|
}
|
||||||
|
|
||||||
void AvatarData::setClampedTargetScale(float targetScale) {
|
|
||||||
|
|
||||||
targetScale = glm::clamp(targetScale, MIN_AVATAR_SCALE, MAX_AVATAR_SCALE);
|
|
||||||
|
|
||||||
_targetScale = targetScale;
|
|
||||||
qDebug() << "Changed scale to " << _targetScale;
|
|
||||||
}
|
|
||||||
|
|
||||||
void AvatarData::sendIdentityPacket() {
|
void AvatarData::sendIdentityPacket() {
|
||||||
QByteArray identityPacket = byteArrayWithPopulatedHeader(PacketTypeAvatarIdentity);
|
QByteArray identityPacket = byteArrayWithPopulatedHeader(PacketTypeAvatarIdentity);
|
||||||
identityPacket.append(identityByteArray());
|
identityPacket.append(identityByteArray());
|
||||||
|
|
|
@ -190,9 +190,9 @@ public:
|
||||||
void setAudioAverageLoudness(float value) { _headData->setAudioAverageLoudness(value); }
|
void setAudioAverageLoudness(float value) { _headData->setAudioAverageLoudness(value); }
|
||||||
|
|
||||||
// Scale
|
// Scale
|
||||||
float getTargetScale() const { return _targetScale; }
|
float getTargetScale() const;
|
||||||
void setTargetScale(float targetScale) { _targetScale = targetScale; }
|
void setTargetScale(float targetScale, bool overideReferential = false);
|
||||||
void setClampedTargetScale(float targetScale);
|
void setClampedTargetScale(float targetScale, bool overideReferential = false);
|
||||||
|
|
||||||
// Hand State
|
// Hand State
|
||||||
Q_INVOKABLE void setHandState(char s) { _handState = s; }
|
Q_INVOKABLE void setHandState(char s) { _handState = s; }
|
||||||
|
|
Loading…
Reference in a new issue