mirror of
https://github.com/AleziaKurdis/overte.git
synced 2025-08-06 15:09:32 +02:00
Added Billboard entity property and enabled billboarding for text entities
This commit is contained in:
parent
c315bcec24
commit
99cd9bada1
9 changed files with 39 additions and 8 deletions
|
@ -16,6 +16,9 @@
|
||||||
#include <DeferredLightingEffect.h>
|
#include <DeferredLightingEffect.h>
|
||||||
#include <GeometryCache.h>
|
#include <GeometryCache.h>
|
||||||
#include <PerfStat.h>
|
#include <PerfStat.h>
|
||||||
|
#include <Transform.h>
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
#include "RenderableTextEntityItem.h"
|
#include "RenderableTextEntityItem.h"
|
||||||
#include "GLMHelpers.h"
|
#include "GLMHelpers.h"
|
||||||
|
@ -37,14 +40,22 @@ void RenderableTextEntityItem::render(RenderArgs* args) {
|
||||||
transformToTopLeft.postTranslate(glm::vec3(-0.5f, 0.5f, 0.0f)); // Go to the top left
|
transformToTopLeft.postTranslate(glm::vec3(-0.5f, 0.5f, 0.0f)); // Go to the top left
|
||||||
transformToTopLeft.setScale(1.0f); // Use a scale of one so that the text is not deformed
|
transformToTopLeft.setScale(1.0f); // Use a scale of one so that the text is not deformed
|
||||||
|
|
||||||
|
// Render background
|
||||||
|
glm::vec3 minCorner = glm::vec3(0.0f, -dimensions.y, SLIGHTLY_BEHIND);
|
||||||
|
glm::vec3 maxCorner = glm::vec3(dimensions.x, 0.0f, SLIGHTLY_BEHIND);
|
||||||
|
|
||||||
|
// rotate about vertical to face the camera
|
||||||
|
if (getBillboarded()) {
|
||||||
|
glm::vec3 position = minCorner;
|
||||||
|
glm::quat rotation = args->_viewFrustum->getOrientation();
|
||||||
|
transformToTopLeft.setRotation(rotation);
|
||||||
|
}
|
||||||
|
|
||||||
// Batch render calls
|
// Batch render calls
|
||||||
Q_ASSERT(args->_batch);
|
Q_ASSERT(args->_batch);
|
||||||
gpu::Batch& batch = *args->_batch;
|
gpu::Batch& batch = *args->_batch;
|
||||||
batch.setModelTransform(transformToTopLeft);
|
batch.setModelTransform(transformToTopLeft);
|
||||||
|
|
||||||
// Render background
|
|
||||||
glm::vec3 minCorner = glm::vec3(0.0f, -dimensions.y, SLIGHTLY_BEHIND);
|
|
||||||
glm::vec3 maxCorner = glm::vec3(dimensions.x, 0.0f, SLIGHTLY_BEHIND);
|
|
||||||
DependencyManager::get<DeferredLightingEffect>()->renderQuad(batch, minCorner, maxCorner, backgroundColor);
|
DependencyManager::get<DeferredLightingEffect>()->renderQuad(batch, minCorner, maxCorner, backgroundColor);
|
||||||
|
|
||||||
float scale = _lineHeight / _textRenderer->getFontSize();
|
float scale = _lineHeight / _textRenderer->getFontSize();
|
||||||
|
@ -55,6 +66,7 @@ void RenderableTextEntityItem::render(RenderArgs* args) {
|
||||||
glm::vec2 bounds = glm::vec2(dimensions.x - 2.0f * leftMargin,
|
glm::vec2 bounds = glm::vec2(dimensions.x - 2.0f * leftMargin,
|
||||||
dimensions.y - 2.0f * topMargin);
|
dimensions.y - 2.0f * topMargin);
|
||||||
_textRenderer->draw(batch, leftMargin / scale, -topMargin / scale, _text, textColor, bounds / scale);
|
_textRenderer->draw(batch, leftMargin / scale, -topMargin / scale, _text, textColor, bounds / scale);
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
|
|
|
@ -69,6 +69,7 @@ EntityItem::EntityItem(const EntityItemID& entityItemID) :
|
||||||
_name(ENTITY_ITEM_DEFAULT_NAME),
|
_name(ENTITY_ITEM_DEFAULT_NAME),
|
||||||
_href(""),
|
_href(""),
|
||||||
_description(""),
|
_description(""),
|
||||||
|
_billBoarded(false),
|
||||||
_dirtyFlags(0),
|
_dirtyFlags(0),
|
||||||
_element(nullptr),
|
_element(nullptr),
|
||||||
_physicsInfo(nullptr),
|
_physicsInfo(nullptr),
|
||||||
|
@ -121,6 +122,7 @@ EntityPropertyFlags EntityItem::getEntityProperties(EncodeBitstreamParams& param
|
||||||
requestedProperties += PROP_SIMULATOR_ID;
|
requestedProperties += PROP_SIMULATOR_ID;
|
||||||
requestedProperties += PROP_HREF;
|
requestedProperties += PROP_HREF;
|
||||||
requestedProperties += PROP_DESCRIPTION;
|
requestedProperties += PROP_DESCRIPTION;
|
||||||
|
requestedProperties += PROP_BILLBOARDED;
|
||||||
|
|
||||||
return requestedProperties;
|
return requestedProperties;
|
||||||
}
|
}
|
||||||
|
@ -917,6 +919,7 @@ EntityItemProperties EntityItem::getProperties() const {
|
||||||
COPY_ENTITY_PROPERTY_TO_PROPERTIES(name, getName);
|
COPY_ENTITY_PROPERTY_TO_PROPERTIES(name, getName);
|
||||||
COPY_ENTITY_PROPERTY_TO_PROPERTIES(href, getHref);
|
COPY_ENTITY_PROPERTY_TO_PROPERTIES(href, getHref);
|
||||||
COPY_ENTITY_PROPERTY_TO_PROPERTIES(description, getDescription);
|
COPY_ENTITY_PROPERTY_TO_PROPERTIES(description, getDescription);
|
||||||
|
COPY_ENTITY_PROPERTY_TO_PROPERTIES(billBoarded, getBillboarded);
|
||||||
|
|
||||||
properties._defaultSettings = false;
|
properties._defaultSettings = false;
|
||||||
|
|
||||||
|
@ -977,6 +980,7 @@ bool EntityItem::setProperties(const EntityItemProperties& properties) {
|
||||||
SET_ENTITY_PROPERTY_FROM_PROPERTIES(name, setName);
|
SET_ENTITY_PROPERTY_FROM_PROPERTIES(name, setName);
|
||||||
SET_ENTITY_PROPERTY_FROM_PROPERTIES(href, setHref);
|
SET_ENTITY_PROPERTY_FROM_PROPERTIES(href, setHref);
|
||||||
SET_ENTITY_PROPERTY_FROM_PROPERTIES(description, setDescription);
|
SET_ENTITY_PROPERTY_FROM_PROPERTIES(description, setDescription);
|
||||||
|
SET_ENTITY_PROPERTY_FROM_PROPERTIES(billBoarded, setBillboarded);
|
||||||
|
|
||||||
if (somethingChanged) {
|
if (somethingChanged) {
|
||||||
uint64_t now = usecTimestampNow();
|
uint64_t now = usecTimestampNow();
|
||||||
|
|
|
@ -314,6 +314,9 @@ public:
|
||||||
const QString& getUserData() const { return _userData; }
|
const QString& getUserData() const { return _userData; }
|
||||||
void setUserData(const QString& value) { _userData = value; }
|
void setUserData(const QString& value) { _userData = value; }
|
||||||
|
|
||||||
|
bool getBillboarded() const { return _billBoarded; }
|
||||||
|
void setBillboarded(bool value) { _billBoarded = value; }
|
||||||
|
|
||||||
QUuid getSimulatorID() const { return _simulatorID; }
|
QUuid getSimulatorID() const { return _simulatorID; }
|
||||||
void setSimulatorID(const QUuid& value);
|
void setSimulatorID(const QUuid& value);
|
||||||
void updateSimulatorID(const QUuid& value);
|
void updateSimulatorID(const QUuid& value);
|
||||||
|
@ -427,6 +430,7 @@ protected:
|
||||||
QString _name;
|
QString _name;
|
||||||
QString _href; //Hyperlink href
|
QString _href; //Hyperlink href
|
||||||
QString _description; //Hyperlink description
|
QString _description; //Hyperlink description
|
||||||
|
bool _billBoarded;
|
||||||
|
|
||||||
// NOTE: Damping is applied like this: v *= pow(1 - damping, dt)
|
// NOTE: Damping is applied like this: v *= pow(1 - damping, dt)
|
||||||
//
|
//
|
||||||
|
|
|
@ -98,6 +98,7 @@ CONSTRUCT_PROPERTY(backgroundMode, BACKGROUND_MODE_INHERIT),
|
||||||
CONSTRUCT_PROPERTY(sourceUrl, ""),
|
CONSTRUCT_PROPERTY(sourceUrl, ""),
|
||||||
CONSTRUCT_PROPERTY(lineWidth, LineEntityItem::DEFAULT_LINE_WIDTH),
|
CONSTRUCT_PROPERTY(lineWidth, LineEntityItem::DEFAULT_LINE_WIDTH),
|
||||||
CONSTRUCT_PROPERTY(linePoints, QVector<glm::vec3>()),
|
CONSTRUCT_PROPERTY(linePoints, QVector<glm::vec3>()),
|
||||||
|
CONSTRUCT_PROPERTY(billBoarded, ENTITY_ITEM_DEFAULT_BILLBOARDED),
|
||||||
|
|
||||||
|
|
||||||
_id(UNKNOWN_ENTITY_ID),
|
_id(UNKNOWN_ENTITY_ID),
|
||||||
|
@ -444,6 +445,7 @@ QScriptValue EntityItemProperties::copyToScriptValue(QScriptEngine* engine, bool
|
||||||
COPY_PROPERTY_TO_QSCRIPTVALUE(linePoints);
|
COPY_PROPERTY_TO_QSCRIPTVALUE(linePoints);
|
||||||
COPY_PROPERTY_TO_QSCRIPTVALUE(href);
|
COPY_PROPERTY_TO_QSCRIPTVALUE(href);
|
||||||
COPY_PROPERTY_TO_QSCRIPTVALUE(description);
|
COPY_PROPERTY_TO_QSCRIPTVALUE(description);
|
||||||
|
COPY_PROPERTY_TO_QSCRIPTVALUE(billBoarded);
|
||||||
|
|
||||||
// Sitting properties support
|
// Sitting properties support
|
||||||
if (!skipDefaults) {
|
if (!skipDefaults) {
|
||||||
|
@ -555,7 +557,7 @@ void EntityItemProperties::copyFromScriptValue(const QScriptValue& object, bool
|
||||||
COPY_PROPERTY_FROM_QSCRIPTVALUE(linePoints, qVectorVec3, setLinePoints);
|
COPY_PROPERTY_FROM_QSCRIPTVALUE(linePoints, qVectorVec3, setLinePoints);
|
||||||
COPY_PROPERTY_FROM_QSCRIPTVALUE(href, QString, setHref);
|
COPY_PROPERTY_FROM_QSCRIPTVALUE(href, QString, setHref);
|
||||||
COPY_PROPERTY_FROM_QSCRIPTVALUE(description, QString, setDescription);
|
COPY_PROPERTY_FROM_QSCRIPTVALUE(description, QString, setDescription);
|
||||||
|
COPY_PROPERTY_FROM_QSCRIPTVALUE(billBoarded, bool, setBillboarded);
|
||||||
|
|
||||||
if (!honorReadOnly) {
|
if (!honorReadOnly) {
|
||||||
// this is used by the json reader to set things that we don't want javascript to able to affect.
|
// this is used by the json reader to set things that we don't want javascript to able to affect.
|
||||||
|
@ -722,6 +724,7 @@ bool EntityItemProperties::encodeEntityEditPacket(PacketType command, EntityItem
|
||||||
APPEND_ENTITY_PROPERTY(PROP_SIMULATOR_ID, properties.getSimulatorID());
|
APPEND_ENTITY_PROPERTY(PROP_SIMULATOR_ID, properties.getSimulatorID());
|
||||||
APPEND_ENTITY_PROPERTY(PROP_HREF, properties.getHref());
|
APPEND_ENTITY_PROPERTY(PROP_HREF, properties.getHref());
|
||||||
APPEND_ENTITY_PROPERTY(PROP_DESCRIPTION, properties.getDescription());
|
APPEND_ENTITY_PROPERTY(PROP_DESCRIPTION, properties.getDescription());
|
||||||
|
APPEND_ENTITY_PROPERTY(PROP_BILLBOARDED, properties.getBillboarded());
|
||||||
|
|
||||||
if (properties.getType() == EntityTypes::Web) {
|
if (properties.getType() == EntityTypes::Web) {
|
||||||
APPEND_ENTITY_PROPERTY(PROP_SOURCE_URL, properties.getSourceUrl());
|
APPEND_ENTITY_PROPERTY(PROP_SOURCE_URL, properties.getSourceUrl());
|
||||||
|
@ -974,6 +977,7 @@ bool EntityItemProperties::decodeEntityEditPacket(const unsigned char* data, int
|
||||||
READ_ENTITY_PROPERTY_TO_PROPERTIES(PROP_SIMULATOR_ID, QUuid, setSimulatorID);
|
READ_ENTITY_PROPERTY_TO_PROPERTIES(PROP_SIMULATOR_ID, QUuid, setSimulatorID);
|
||||||
READ_ENTITY_PROPERTY_TO_PROPERTIES(PROP_HREF, QString, setHref);
|
READ_ENTITY_PROPERTY_TO_PROPERTIES(PROP_HREF, QString, setHref);
|
||||||
READ_ENTITY_PROPERTY_TO_PROPERTIES(PROP_DESCRIPTION, QString, setDescription);
|
READ_ENTITY_PROPERTY_TO_PROPERTIES(PROP_DESCRIPTION, QString, setDescription);
|
||||||
|
READ_ENTITY_PROPERTY_TO_PROPERTIES(PROP_BILLBOARDED, bool, setBillboarded);
|
||||||
|
|
||||||
if (properties.getType() == EntityTypes::Web) {
|
if (properties.getType() == EntityTypes::Web) {
|
||||||
READ_ENTITY_PROPERTY_TO_PROPERTIES(PROP_SOURCE_URL, QString, setSourceUrl);
|
READ_ENTITY_PROPERTY_TO_PROPERTIES(PROP_SOURCE_URL, QString, setSourceUrl);
|
||||||
|
@ -1162,6 +1166,8 @@ void EntityItemProperties::markAllChanged() {
|
||||||
_hrefChanged = true;
|
_hrefChanged = true;
|
||||||
_descriptionChanged = true;
|
_descriptionChanged = true;
|
||||||
|
|
||||||
|
_billBoardedChanged = true;
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|
||||||
/// The maximum bounding cube for the entity, independent of it's rotation.
|
/// The maximum bounding cube for the entity, independent of it's rotation.
|
||||||
|
|
|
@ -150,6 +150,7 @@ public:
|
||||||
DEFINE_PROPERTY_REF(LINE_POINTS, LinePoints, linePoints, QVector<glm::vec3>);
|
DEFINE_PROPERTY_REF(LINE_POINTS, LinePoints, linePoints, QVector<glm::vec3>);
|
||||||
DEFINE_PROPERTY_REF(PROP_HREF, Href, href, QString);
|
DEFINE_PROPERTY_REF(PROP_HREF, Href, href, QString);
|
||||||
DEFINE_PROPERTY_REF(PROP_DESCRIPTION, Description, description, QString);
|
DEFINE_PROPERTY_REF(PROP_DESCRIPTION, Description, description, QString);
|
||||||
|
DEFINE_PROPERTY(PROP_BILLBOARDED, Billboarded, billBoarded, bool);
|
||||||
|
|
||||||
static QString getBackgroundModeString(BackgroundMode mode);
|
static QString getBackgroundModeString(BackgroundMode mode);
|
||||||
|
|
||||||
|
|
|
@ -66,6 +66,7 @@ const float ENTITY_ITEM_DEFAULT_FRICTION = 0.5f;
|
||||||
|
|
||||||
const bool ENTITY_ITEM_DEFAULT_IGNORE_FOR_COLLISIONS = false;
|
const bool ENTITY_ITEM_DEFAULT_IGNORE_FOR_COLLISIONS = false;
|
||||||
const bool ENTITY_ITEM_DEFAULT_COLLISIONS_WILL_MOVE = false;
|
const bool ENTITY_ITEM_DEFAULT_COLLISIONS_WILL_MOVE = false;
|
||||||
|
const bool ENTITY_ITEM_DEFAULT_BILLBOARDED = false;
|
||||||
|
|
||||||
const float ENTITY_ITEM_DEFAULT_CUTOFF = PI / 2;
|
const float ENTITY_ITEM_DEFAULT_CUTOFF = PI / 2;
|
||||||
|
|
||||||
|
|
|
@ -122,6 +122,8 @@ enum EntityPropertyList {
|
||||||
PROP_HREF,
|
PROP_HREF,
|
||||||
PROP_DESCRIPTION,
|
PROP_DESCRIPTION,
|
||||||
|
|
||||||
|
PROP_BILLBOARDED,
|
||||||
|
|
||||||
////////////////////////////////////////////////////////////////////////////////////////////////////
|
////////////////////////////////////////////////////////////////////////////////////////////////////
|
||||||
// ATTENTION: add new properties ABOVE this line
|
// ATTENTION: add new properties ABOVE this line
|
||||||
PROP_AFTER_LAST_ITEM,
|
PROP_AFTER_LAST_ITEM,
|
||||||
|
|
|
@ -73,7 +73,7 @@ PacketVersion versionForPacketType(PacketType packetType) {
|
||||||
case PacketTypeEntityAdd:
|
case PacketTypeEntityAdd:
|
||||||
case PacketTypeEntityEdit:
|
case PacketTypeEntityEdit:
|
||||||
case PacketTypeEntityData:
|
case PacketTypeEntityData:
|
||||||
return VERSION_ENTITIES_LINE_POINTS;
|
return VERSION_ENTITIES_BILLBOARDED;
|
||||||
case PacketTypeEntityErase:
|
case PacketTypeEntityErase:
|
||||||
return 2;
|
return 2;
|
||||||
case PacketTypeAudioStreamStats:
|
case PacketTypeAudioStreamStats:
|
||||||
|
|
|
@ -183,5 +183,6 @@ const PacketVersion VERSION_ENTITIES_HAVE_FRICTION = 26;
|
||||||
const PacketVersion VERSION_NO_ENTITY_ID_SWAP = 27;
|
const PacketVersion VERSION_NO_ENTITY_ID_SWAP = 27;
|
||||||
const PacketVersion VERSION_ENTITIES_PARTICLE_FIX = 28;
|
const PacketVersion VERSION_ENTITIES_PARTICLE_FIX = 28;
|
||||||
const PacketVersion VERSION_ENTITIES_LINE_POINTS = 29;
|
const PacketVersion VERSION_ENTITIES_LINE_POINTS = 29;
|
||||||
|
const PacketVersion VERSION_ENTITIES_BILLBOARDED = 30;
|
||||||
|
|
||||||
#endif // hifi_PacketHeaders_h
|
#endif // hifi_PacketHeaders_h
|
||||||
|
|
Loading…
Reference in a new issue