mirror of
https://github.com/overte-org/overte.git
synced 2025-04-20 18:23:54 +02:00
Fix model overlay scaling
This commit is contained in:
parent
965d6bb006
commit
7c9022fb3e
3 changed files with 23 additions and 22 deletions
|
@ -45,7 +45,7 @@ void ModelOverlay::update(float deltatime) {
|
|||
_updateModel = false;
|
||||
|
||||
_model.setSnapModelToCenter(true);
|
||||
_model.setScale(getScale());
|
||||
_model.setScale(getDimensions());
|
||||
_model.setRotation(getRotation());
|
||||
_model.setTranslation(getPosition());
|
||||
_model.setURL(_url);
|
||||
|
@ -82,22 +82,6 @@ void ModelOverlay::render(RenderArgs* args) {
|
|||
if (!_visible) {
|
||||
return;
|
||||
}
|
||||
|
||||
/*
|
||||
if (_model.isActive()) {
|
||||
if (_model.isRenderable()) {
|
||||
float glowLevel = getGlowLevel();
|
||||
Glower* glower = NULL;
|
||||
if (glowLevel > 0.0f) {
|
||||
glower = new Glower(glowLevel);
|
||||
}
|
||||
_model.render(args, getAlpha());
|
||||
if (glower) {
|
||||
delete glower;
|
||||
}
|
||||
}
|
||||
}
|
||||
*/
|
||||
}
|
||||
|
||||
void ModelOverlay::setProperties(const QScriptValue &properties) {
|
||||
|
@ -107,10 +91,19 @@ void ModelOverlay::setProperties(const QScriptValue &properties) {
|
|||
|
||||
Volume3DOverlay::setProperties(properties);
|
||||
|
||||
if (position != getPosition() || rotation != getRotation() || scale != getDimensions()) {
|
||||
_model.setScaleToFit(true, getScale());
|
||||
if (position != getPosition() || rotation != getRotation()) {
|
||||
_updateModel = true;
|
||||
}
|
||||
|
||||
if (scale != getDimensions()) {
|
||||
auto newScale = getDimensions();
|
||||
if (newScale.x <= 0 || newScale.y <= 0 || newScale.z <= 0) {
|
||||
setDimensions(scale);
|
||||
} else {
|
||||
_model.setScaleToFit(true, getDimensions());
|
||||
_updateModel = true;
|
||||
}
|
||||
}
|
||||
|
||||
QScriptValue urlValue = properties.property("url");
|
||||
if (urlValue.isValid() && urlValue.isString()) {
|
||||
|
@ -140,7 +133,7 @@ QScriptValue ModelOverlay::getProperty(const QString& property) {
|
|||
if (property == "url") {
|
||||
return _url.toString();
|
||||
}
|
||||
if (property == "dimensions") {
|
||||
if (property == "dimensions" || property == "scale" || property == "size") {
|
||||
return vec3toScriptValue(_scriptEngine, _model.getScaleToFitDimensions());
|
||||
}
|
||||
if (property == "textures") {
|
||||
|
|
|
@ -43,7 +43,7 @@ Model::Model(RigPointer rig, QObject* parent) :
|
|||
_rotation(),
|
||||
_scale(1.0f, 1.0f, 1.0f),
|
||||
_scaleToFit(false),
|
||||
_scaleToFitDimensions(0.0f),
|
||||
_scaleToFitDimensions(1.0f),
|
||||
_scaledToFit(false),
|
||||
_snapModelToRegistrationPoint(false),
|
||||
_snappedToRegistrationPoint(false),
|
||||
|
@ -909,6 +909,14 @@ void Model::setScaleToFit(bool scaleToFit, float largestDimension, bool forceRes
|
|||
}
|
||||
}
|
||||
|
||||
glm::vec3 Model::getScaleToFitDimensions() const {
|
||||
if (_scaleToFitDimensions.y == FAKE_DIMENSION_PLACEHOLDER &&
|
||||
_scaleToFitDimensions.z == FAKE_DIMENSION_PLACEHOLDER) {
|
||||
return glm::vec3(_scaleToFitDimensions.x);
|
||||
}
|
||||
return _scaleToFitDimensions;
|
||||
}
|
||||
|
||||
void Model::scaleToFit() {
|
||||
// If our _scaleToFitDimensions.y/z are FAKE_DIMENSION_PLACEHOLDER then it means our
|
||||
// user asked to scale us in a fixed aspect ratio to a single largest dimension, but
|
||||
|
|
|
@ -197,7 +197,7 @@ public:
|
|||
|
||||
/// enables/disables scale to fit behavior, the model will be automatically scaled to the specified largest dimension
|
||||
bool getIsScaledToFit() const { return _scaledToFit; } /// is model scaled to fit
|
||||
const glm::vec3& getScaleToFitDimensions() const { return _scaleToFitDimensions; } /// the dimensions model is scaled to
|
||||
glm::vec3 getScaleToFitDimensions() const; /// the dimensions model is scaled to, including inferred y/z
|
||||
|
||||
void setCauterizeBones(bool flag) { _cauterizeBones = flag; }
|
||||
bool getCauterizeBones() const { return _cauterizeBones; }
|
||||
|
|
Loading…
Reference in a new issue