mirror of
https://github.com/overte-org/overte.git
synced 2025-08-08 23:17:02 +02:00
CR
This commit is contained in:
parent
54d57afdae
commit
19cd0fa6ad
6 changed files with 27 additions and 8 deletions
|
@ -2455,7 +2455,8 @@ Application::Application(int& argc, char** argv, QElapsedTimer& startupTimer, bo
|
||||||
DependencyManager::get<PickManager>()->setPrecisionPicking(rayPickID, value);
|
DependencyManager::get<PickManager>()->setPrecisionPicking(rayPickID, value);
|
||||||
});
|
});
|
||||||
|
|
||||||
BillboardModeHelpers::setBillboardRotationOperator([](const glm::vec3& position, const glm::quat& rotation, BillboardMode billboardMode, const glm::vec3& frustumPos, bool rotate90x) {
|
BillboardModeHelpers::setBillboardRotationOperator([](const glm::vec3& position, const glm::quat& rotation,
|
||||||
|
BillboardMode billboardMode, const glm::vec3& frustumPos, bool rotate90x) {
|
||||||
const glm::quat ROTATE_90X = glm::angleAxis(-(float)M_PI_2, Vectors::RIGHT);
|
const glm::quat ROTATE_90X = glm::angleAxis(-(float)M_PI_2, Vectors::RIGHT);
|
||||||
if (billboardMode == BillboardMode::YAW) {
|
if (billboardMode == BillboardMode::YAW) {
|
||||||
//rotate about vertical to face the camera
|
//rotate about vertical to face the camera
|
||||||
|
|
|
@ -843,7 +843,8 @@ RayToAvatarIntersectionResult AvatarManager::findRayIntersectionVector(const Pic
|
||||||
BoxFace subMeshFace = BoxFace::UNKNOWN_FACE;
|
BoxFace subMeshFace = BoxFace::UNKNOWN_FACE;
|
||||||
glm::vec3 subMeshSurfaceNormal;
|
glm::vec3 subMeshSurfaceNormal;
|
||||||
QVariantMap subMeshExtraInfo;
|
QVariantMap subMeshExtraInfo;
|
||||||
if (avatar->getSkeletonModel()->findRayIntersectionAgainstSubMeshes(defaultFrameRayOrigin, defaultFrameRayDirection, viewFrustumPos, subMeshDistance, subMeshFace, subMeshSurfaceNormal, subMeshExtraInfo, true, false)) {
|
if (avatar->getSkeletonModel()->findRayIntersectionAgainstSubMeshes(defaultFrameRayOrigin, defaultFrameRayDirection, viewFrustumPos, subMeshDistance,
|
||||||
|
subMeshFace, subMeshSurfaceNormal, subMeshExtraInfo, true, false)) {
|
||||||
rayAvatarResult._distance = subMeshDistance;
|
rayAvatarResult._distance = subMeshDistance;
|
||||||
rayAvatarResult._intersectionPoint = ray.origin + subMeshDistance * rayDirection;
|
rayAvatarResult._intersectionPoint = ray.origin + subMeshDistance * rayDirection;
|
||||||
rayAvatarResult._intersectionNormal = subMeshSurfaceNormal;
|
rayAvatarResult._intersectionNormal = subMeshSurfaceNormal;
|
||||||
|
|
|
@ -180,7 +180,7 @@ public:
|
||||||
QVariantMap& extraInfo, bool precisionPicking) const { return true; }
|
QVariantMap& extraInfo, bool precisionPicking) const { return true; }
|
||||||
virtual bool findDetailedParabolaIntersection(const glm::vec3& origin, const glm::vec3& velocity,
|
virtual bool findDetailedParabolaIntersection(const glm::vec3& origin, const glm::vec3& velocity,
|
||||||
const glm::vec3& acceleration, const glm::vec3& viewFrustumPos, OctreeElementPointer& element,
|
const glm::vec3& acceleration, const glm::vec3& viewFrustumPos, OctreeElementPointer& element,
|
||||||
float& parabolicDistance, BoxFace& face, glm::vec3& surfaceNormal,
|
float& parabolicDistance, BoxFace& face, glm::vec3& surfaceNormal,
|
||||||
QVariantMap& extraInfo, bool precisionPicking) const { return true; }
|
QVariantMap& extraInfo, bool precisionPicking) const { return true; }
|
||||||
|
|
||||||
// attributes applicable to all entity types
|
// attributes applicable to all entity types
|
||||||
|
|
|
@ -292,7 +292,7 @@ Item::Bound ModelMeshPartPayload::getBound(RenderArgs* args) const {
|
||||||
if (material && material->isProcedural() && material->isReady()) {
|
if (material && material->isProcedural() && material->isReady()) {
|
||||||
auto procedural = std::static_pointer_cast<graphics::ProceduralMaterial>(_drawMaterials.top().material);
|
auto procedural = std::static_pointer_cast<graphics::ProceduralMaterial>(_drawMaterials.top().material);
|
||||||
if (procedural->hasVertexShader() && procedural->hasBoundOperator()) {
|
if (procedural->hasVertexShader() && procedural->hasBoundOperator()) {
|
||||||
return procedural->getBound(args);
|
return procedural->getBound(args);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
|
@ -15,9 +15,24 @@ const char* billboardModeNames[] = {
|
||||||
};
|
};
|
||||||
|
|
||||||
static const size_t BILLBOARD_MODE_NAMES = (sizeof(billboardModeNames) / sizeof(billboardModeNames[0]));
|
static const size_t BILLBOARD_MODE_NAMES = (sizeof(billboardModeNames) / sizeof(billboardModeNames[0]));
|
||||||
std::function<glm::quat(const glm::vec3&, const glm::quat&, BillboardMode, const glm::vec3&, bool)> BillboardModeHelpers::_getBillboardRotationOperator = [](const glm::vec3&, const glm::quat& rotation, BillboardMode, const glm::vec3&, bool) { return rotation; };
|
std::function<glm::quat(const glm::vec3&, const glm::quat&, BillboardMode, const glm::vec3&, bool)> BillboardModeHelpers::_getBillboardRotationOperator =
|
||||||
|
[](const glm::vec3&, const glm::quat& rotation, BillboardMode, const glm::vec3&, bool) { return rotation; };
|
||||||
std::function<glm::vec3()> BillboardModeHelpers::_getPrimaryViewFrustumPositionOperator = []() { return glm::vec3(0.0f); };
|
std::function<glm::vec3()> BillboardModeHelpers::_getPrimaryViewFrustumPositionOperator = []() { return glm::vec3(0.0f); };
|
||||||
|
|
||||||
|
void BillboardModeHelpers::setBillboardRotationOperator(std::function<glm::quat(const glm::vec3&, const glm::quat&,
|
||||||
|
BillboardMode, const glm::vec3&, bool)> getBillboardRotationOperator) {
|
||||||
|
_getBillboardRotationOperator = getBillboardRotationOperator;
|
||||||
|
}
|
||||||
|
|
||||||
|
glm::quat BillboardModeHelpers::getBillboardRotation(const glm::vec3& position, const glm::quat& rotation, BillboardMode billboardMode,
|
||||||
|
const glm::vec3& frustumPos, bool rotate90x = false) {
|
||||||
|
return _getBillboardRotationOperator(position, rotation, billboardMode, frustumPos, rotate90x);
|
||||||
|
}
|
||||||
|
|
||||||
|
void BillboardModeHelpers::setPrimaryViewFrustumPositionOperator(std::function<glm::vec3()> getPrimaryViewFrustumPositionOperator) {
|
||||||
|
_getPrimaryViewFrustumPositionOperator = getPrimaryViewFrustumPositionOperator;
|
||||||
|
}
|
||||||
|
|
||||||
QString BillboardModeHelpers::getNameForBillboardMode(BillboardMode mode) {
|
QString BillboardModeHelpers::getNameForBillboardMode(BillboardMode mode) {
|
||||||
if (((int)mode <= 0) || ((int)mode >= (int)BILLBOARD_MODE_NAMES)) {
|
if (((int)mode <= 0) || ((int)mode >= (int)BILLBOARD_MODE_NAMES)) {
|
||||||
mode = (BillboardMode)0;
|
mode = (BillboardMode)0;
|
||||||
|
|
|
@ -43,9 +43,11 @@ class BillboardModeHelpers {
|
||||||
public:
|
public:
|
||||||
static QString getNameForBillboardMode(BillboardMode mode);
|
static QString getNameForBillboardMode(BillboardMode mode);
|
||||||
|
|
||||||
static void setBillboardRotationOperator(std::function<glm::quat(const glm::vec3&, const glm::quat&, BillboardMode, const glm::vec3&, bool)> getBillboardRotationOperator) { _getBillboardRotationOperator = getBillboardRotationOperator; }
|
static void setBillboardRotationOperator(std::function<glm::quat(const glm::vec3&, const glm::quat&,
|
||||||
static glm::quat getBillboardRotation(const glm::vec3& position, const glm::quat& rotation, BillboardMode billboardMode, const glm::vec3& frustumPos, bool rotate90x = false) { return _getBillboardRotationOperator(position, rotation, billboardMode, frustumPos, rotate90x); }
|
BillboardMode, const glm::vec3&, bool)> getBillboardRotationOperator);
|
||||||
static void setPrimaryViewFrustumPositionOperator(std::function<glm::vec3()> getPrimaryViewFrustumPositionOperator) { _getPrimaryViewFrustumPositionOperator = getPrimaryViewFrustumPositionOperator; }
|
static glm::quat getBillboardRotation(const glm::vec3& position, const glm::quat& rotation, BillboardMode billboardMode,
|
||||||
|
const glm::vec3& frustumPos, bool rotate90x = false);
|
||||||
|
static void setPrimaryViewFrustumPositionOperator(std::function<glm::vec3()> getPrimaryViewFrustumPositionOperator);
|
||||||
static glm::vec3 getPrimaryViewFrustumPosition() { return _getPrimaryViewFrustumPositionOperator(); }
|
static glm::vec3 getPrimaryViewFrustumPosition() { return _getPrimaryViewFrustumPositionOperator(); }
|
||||||
|
|
||||||
private:
|
private:
|
||||||
|
|
Loading…
Reference in a new issue