mirror of
https://github.com/overte-org/overte.git
synced 2025-06-18 15:00:18 +02:00
trying to update the transform at the right time in overlays
This commit is contained in:
parent
01e4bfc53e
commit
3669e66619
7 changed files with 48 additions and 68 deletions
|
@ -191,6 +191,7 @@ void Base3DOverlay::setProperties(const QVariantMap& originalProperties) {
|
||||||
|
|
||||||
// Communicate changes to the renderItem if needed
|
// Communicate changes to the renderItem if needed
|
||||||
if (needRenderItemUpdate) {
|
if (needRenderItemUpdate) {
|
||||||
|
notifyRenderTransformChange();
|
||||||
|
|
||||||
/*auto itemID = getRenderItemID();
|
/*auto itemID = getRenderItemID();
|
||||||
if (render::Item::isValidID(itemID)) {
|
if (render::Item::isValidID(itemID)) {
|
||||||
|
|
|
@ -45,3 +45,4 @@ bool Billboard3DOverlay::applyTransformTo(Transform& transform, bool force) {
|
||||||
}
|
}
|
||||||
return transformChanged;
|
return transformChanged;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
|
@ -59,20 +59,6 @@ void ModelOverlay::update(float deltatime) {
|
||||||
_model->simulate(deltatime);
|
_model->simulate(deltatime);
|
||||||
}
|
}
|
||||||
_isLoaded = _model->isActive();
|
_isLoaded = _model->isActive();
|
||||||
}
|
|
||||||
|
|
||||||
bool ModelOverlay::addToScene(Overlay::Pointer overlay, const render::ScenePointer& scene, render::Transaction& transaction) {
|
|
||||||
Volume3DOverlay::addToScene(overlay, scene, transaction);
|
|
||||||
_model->addToScene(scene, transaction);
|
|
||||||
return true;
|
|
||||||
}
|
|
||||||
|
|
||||||
void ModelOverlay::removeFromScene(Overlay::Pointer overlay, const render::ScenePointer& scene, render::Transaction& transaction) {
|
|
||||||
Volume3DOverlay::removeFromScene(overlay, scene, transaction);
|
|
||||||
_model->removeFromScene(scene, transaction);
|
|
||||||
}
|
|
||||||
|
|
||||||
void ModelOverlay::render(RenderArgs* args) {
|
|
||||||
|
|
||||||
// check to see if when we added our model to the scene they were ready, if they were not ready, then
|
// check to see if when we added our model to the scene they were ready, if they were not ready, then
|
||||||
// fix them up in the scene
|
// fix them up in the scene
|
||||||
|
@ -89,6 +75,35 @@ void ModelOverlay::render(RenderArgs* args) {
|
||||||
scene->enqueueTransaction(transaction);
|
scene->enqueueTransaction(transaction);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
bool ModelOverlay::addToScene(Overlay::Pointer overlay, const render::ScenePointer& scene, render::Transaction& transaction) {
|
||||||
|
Volume3DOverlay::addToScene(overlay, scene, transaction);
|
||||||
|
_model->addToScene(scene, transaction);
|
||||||
|
return true;
|
||||||
|
}
|
||||||
|
|
||||||
|
void ModelOverlay::removeFromScene(Overlay::Pointer overlay, const render::ScenePointer& scene, render::Transaction& transaction) {
|
||||||
|
Volume3DOverlay::removeFromScene(overlay, scene, transaction);
|
||||||
|
_model->removeFromScene(scene, transaction);
|
||||||
|
}
|
||||||
|
|
||||||
|
void ModelOverlay::render(RenderArgs* args) {
|
||||||
|
/*
|
||||||
|
// check to see if when we added our model to the scene they were ready, if they were not ready, then
|
||||||
|
// fix them up in the scene
|
||||||
|
render::ScenePointer scene = qApp->getMain3DScene();
|
||||||
|
render::Transaction transaction;
|
||||||
|
if (_model->needsFixupInScene()) {
|
||||||
|
_model->removeFromScene(scene, transaction);
|
||||||
|
_model->addToScene(scene, transaction);
|
||||||
|
}
|
||||||
|
|
||||||
|
_model->setVisibleInScene(_visible, scene);
|
||||||
|
_model->setLayeredInFront(getDrawInFront(), scene);
|
||||||
|
|
||||||
|
scene->enqueueTransaction(transaction);
|
||||||
|
*/
|
||||||
|
}
|
||||||
|
|
||||||
void ModelOverlay::setProperties(const QVariantMap& properties) {
|
void ModelOverlay::setProperties(const QVariantMap& properties) {
|
||||||
auto origPosition = getPosition();
|
auto origPosition = getPosition();
|
||||||
auto origRotation = getRotation();
|
auto origRotation = getRotation();
|
||||||
|
@ -280,11 +295,12 @@ ModelOverlay* ModelOverlay::createClone() const {
|
||||||
|
|
||||||
void ModelOverlay::locationChanged(bool tellPhysics) {
|
void ModelOverlay::locationChanged(bool tellPhysics) {
|
||||||
Base3DOverlay::locationChanged(tellPhysics);
|
Base3DOverlay::locationChanged(tellPhysics);
|
||||||
|
/*
|
||||||
if (_model && _model->isActive()) {
|
if (_model && _model->isActive()) {
|
||||||
_model->setRotation(getRotation());
|
_model->setRotation(getRotation());
|
||||||
_model->setTranslation(getPosition());
|
_model->setTranslation(getPosition());
|
||||||
}
|
}*/
|
||||||
|
_updateModel = true;
|
||||||
}
|
}
|
||||||
|
|
||||||
QString ModelOverlay::getName() const {
|
QString ModelOverlay::getName() const {
|
||||||
|
|
|
@ -66,3 +66,13 @@ bool Planar3DOverlay::findRayIntersection(const glm::vec3& origin, const glm::ve
|
||||||
// FIXME - face and surfaceNormal not being returned
|
// FIXME - face and surfaceNormal not being returned
|
||||||
return findRayRectangleIntersection(origin, direction, getRotation(), getPosition(), getDimensions(), distance);
|
return findRayRectangleIntersection(origin, direction, getRotation(), getPosition(), getDimensions(), distance);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
Transform Planar3DOverlay::evalRenderTransform() const {
|
||||||
|
auto transform = getTransform();
|
||||||
|
|
||||||
|
if (glm::length2(getDimensions()) != 1.0f) {
|
||||||
|
transform.postScale(vec3(getDimensions(), 1.0f));
|
||||||
|
}
|
||||||
|
|
||||||
|
return transform;
|
||||||
|
}
|
|
@ -33,6 +33,8 @@ public:
|
||||||
virtual bool findRayIntersection(const glm::vec3& origin, const glm::vec3& direction, float& distance,
|
virtual bool findRayIntersection(const glm::vec3& origin, const glm::vec3& direction, float& distance,
|
||||||
BoxFace& face, glm::vec3& surfaceNormal) override;
|
BoxFace& face, glm::vec3& surfaceNormal) override;
|
||||||
|
|
||||||
|
Transform evalRenderTransform() const override;
|
||||||
|
|
||||||
protected:
|
protected:
|
||||||
glm::vec2 _dimensions;
|
glm::vec2 _dimensions;
|
||||||
};
|
};
|
||||||
|
|
|
@ -180,22 +180,6 @@ void Web3DOverlay::buildWebSurface() {
|
||||||
|
|
||||||
|
|
||||||
void Web3DOverlay::update(float deltatime) {
|
void Web3DOverlay::update(float deltatime) {
|
||||||
/* if (_renderTransformDirty) {
|
|
||||||
auto updateTransform = evalRenderTransform();
|
|
||||||
auto itemID = getRenderItemID();
|
|
||||||
if (render::Item::isValidID(itemID)) {
|
|
||||||
render::ScenePointer scene = qApp->getMain3DScene();
|
|
||||||
render::Transaction transaction;
|
|
||||||
transaction.updateItem<Overlay>(itemID, [updateTransform](Overlay& data) {
|
|
||||||
auto web3D = dynamic_cast<Web3DOverlay*>(&data);
|
|
||||||
if (web3D) {
|
|
||||||
web3D->setRenderTransform(updateTransform);// evalRenderTransform();
|
|
||||||
}
|
|
||||||
});
|
|
||||||
scene->enqueueTransaction(transaction);
|
|
||||||
}
|
|
||||||
}*/
|
|
||||||
|
|
||||||
if (_webSurface) {
|
if (_webSurface) {
|
||||||
// update globalPosition
|
// update globalPosition
|
||||||
_webSurface->getSurfaceContext()->setContextProperty("globalPosition", vec3toVariant(getPosition()));
|
_webSurface->getSurfaceContext()->setContextProperty("globalPosition", vec3toVariant(getPosition()));
|
||||||
|
@ -205,23 +189,6 @@ void Web3DOverlay::update(float deltatime) {
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|
||||||
Transform Web3DOverlay::evalRenderTransform() const {
|
|
||||||
auto transform = getTransform();
|
|
||||||
|
|
||||||
// FIXME: applyTransformTo causes tablet overlay to detach from tablet entity.
|
|
||||||
// Perhaps rather than deleting the following code it should be run only if isFacingAvatar() is true?
|
|
||||||
/*
|
|
||||||
applyTransformTo(transform, true);
|
|
||||||
setTransform(transform);
|
|
||||||
*/
|
|
||||||
|
|
||||||
if (glm::length2(getDimensions()) != 1.0f) {
|
|
||||||
transform.postScale(vec3(getDimensions(), 1.0f));
|
|
||||||
}
|
|
||||||
|
|
||||||
return transform;
|
|
||||||
}
|
|
||||||
|
|
||||||
QString Web3DOverlay::pickURL() {
|
QString Web3DOverlay::pickURL() {
|
||||||
QUrl sourceUrl(_url);
|
QUrl sourceUrl(_url);
|
||||||
if (sourceUrl.scheme() == "http" || sourceUrl.scheme() == "https" ||
|
if (sourceUrl.scheme() == "http" || sourceUrl.scheme() == "https" ||
|
||||||
|
@ -341,20 +308,6 @@ void Web3DOverlay::render(RenderArgs* args) {
|
||||||
|
|
||||||
vec2 halfSize = getSize() / 2.0f;
|
vec2 halfSize = getSize() / 2.0f;
|
||||||
vec4 color(toGlm(getColor()), getAlpha());
|
vec4 color(toGlm(getColor()), getAlpha());
|
||||||
/*
|
|
||||||
Transform transform = getTransform();
|
|
||||||
|
|
||||||
// FIXME: applyTransformTo causes tablet overlay to detach from tablet entity.
|
|
||||||
// Perhaps rather than deleting the following code it should be run only if isFacingAvatar() is true?
|
|
||||||
/*
|
|
||||||
applyTransformTo(transform, true);
|
|
||||||
setTransform(transform);
|
|
||||||
*/
|
|
||||||
/*
|
|
||||||
if (glm::length2(getDimensions()) != 1.0f) {
|
|
||||||
transform.postScale(vec3(getDimensions(), 1.0f));
|
|
||||||
}
|
|
||||||
*/
|
|
||||||
|
|
||||||
if (!_texture) {
|
if (!_texture) {
|
||||||
_texture = gpu::Texture::createExternal(OffscreenQmlSurface::getDiscardLambda());
|
_texture = gpu::Texture::createExternal(OffscreenQmlSurface::getDiscardLambda());
|
||||||
|
@ -369,7 +322,6 @@ void Web3DOverlay::render(RenderArgs* args) {
|
||||||
Q_ASSERT(args->_batch);
|
Q_ASSERT(args->_batch);
|
||||||
gpu::Batch& batch = *args->_batch;
|
gpu::Batch& batch = *args->_batch;
|
||||||
batch.setResourceTexture(0, _texture);
|
batch.setResourceTexture(0, _texture);
|
||||||
// batch.setModelTransform(transform);
|
|
||||||
batch.setModelTransform(_renderTransform);
|
batch.setModelTransform(_renderTransform);
|
||||||
auto geometryCache = DependencyManager::get<GeometryCache>();
|
auto geometryCache = DependencyManager::get<GeometryCache>();
|
||||||
if (color.a < OPAQUE_ALPHA_THRESHOLD) {
|
if (color.a < OPAQUE_ALPHA_THRESHOLD) {
|
||||||
|
|
|
@ -37,8 +37,6 @@ public:
|
||||||
|
|
||||||
virtual void update(float deltatime) override;
|
virtual void update(float deltatime) override;
|
||||||
|
|
||||||
Transform evalRenderTransform() const override;
|
|
||||||
|
|
||||||
QObject* getEventHandler();
|
QObject* getEventHandler();
|
||||||
void setProxyWindow(QWindow* proxyWindow);
|
void setProxyWindow(QWindow* proxyWindow);
|
||||||
void handlePointerEvent(const PointerEvent& event);
|
void handlePointerEvent(const PointerEvent& event);
|
||||||
|
|
Loading…
Reference in a new issue