mirror of
https://github.com/HifiExperiments/overte.git
synced 2025-07-23 03:59:29 +02:00
Add getCorners to ViewFrustum
This commit is contained in:
parent
1436b4f6b1
commit
ed5c53f23c
2 changed files with 29 additions and 1 deletions
|
@ -736,6 +736,23 @@ void ViewFrustum::getFurthestPointFromCamera(const AACube& box, glm::vec3& furth
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
const ViewFrustum::Corners ViewFrustum::getCorners(const float& depth) {
|
||||||
|
glm::vec3 normal = glm::normalize(_direction);
|
||||||
|
|
||||||
|
auto getCorner = [&](enum::BoxVertex nearCorner, enum::BoxVertex farCorner) {
|
||||||
|
const auto dir = glm::normalize(_cornersWorld[nearCorner] - _cornersWorld[farCorner]);
|
||||||
|
const auto factor = depth / glm::dot(dir, normal);
|
||||||
|
return _position + factor * dir;
|
||||||
|
};
|
||||||
|
|
||||||
|
return Corners{
|
||||||
|
getCorner(TOP_LEFT_NEAR, TOP_LEFT_FAR),
|
||||||
|
getCorner(TOP_RIGHT_NEAR, TOP_RIGHT_FAR),
|
||||||
|
getCorner(BOTTOM_LEFT_NEAR, BOTTOM_LEFT_FAR),
|
||||||
|
getCorner(BOTTOM_RIGHT_NEAR, BOTTOM_RIGHT_FAR)
|
||||||
|
};
|
||||||
|
}
|
||||||
|
|
||||||
float ViewFrustum::distanceToCamera(const glm::vec3& point) const {
|
float ViewFrustum::distanceToCamera(const glm::vec3& point) const {
|
||||||
glm::vec3 temp = getPosition() - point;
|
glm::vec3 temp = getPosition() - point;
|
||||||
float distanceToPoint = sqrtf(glm::dot(temp, temp));
|
float distanceToPoint = sqrtf(glm::dot(temp, temp));
|
||||||
|
|
|
@ -61,11 +61,22 @@ public:
|
||||||
float getFarClip() const { return _farClip; }
|
float getFarClip() const { return _farClip; }
|
||||||
float getFocalLength() const { return _focalLength; }
|
float getFocalLength() const { return _focalLength; }
|
||||||
|
|
||||||
|
const class Corners{
|
||||||
|
public:
|
||||||
|
Corners(glm::vec3&& topLeft, glm::vec3&& topRight, glm::vec3&& bottomLeft, glm::vec3&& bottomRight)
|
||||||
|
: topLeft{ topLeft }, topRight{ topRight }, bottomLeft{ bottomLeft }, bottomRight{ bottomRight } {}
|
||||||
|
glm::vec3 topLeft;
|
||||||
|
glm::vec3 topRight;
|
||||||
|
glm::vec3 bottomLeft;
|
||||||
|
glm::vec3 bottomRight;
|
||||||
|
// Get the corners depth units from frustum position, along frustum orientation
|
||||||
|
} getCorners(const float& depth);
|
||||||
|
|
||||||
|
// getters for corners
|
||||||
const glm::vec3& getFarTopLeft() const { return _cornersWorld[TOP_LEFT_FAR]; }
|
const glm::vec3& getFarTopLeft() const { return _cornersWorld[TOP_LEFT_FAR]; }
|
||||||
const glm::vec3& getFarTopRight() const { return _cornersWorld[TOP_RIGHT_FAR]; }
|
const glm::vec3& getFarTopRight() const { return _cornersWorld[TOP_RIGHT_FAR]; }
|
||||||
const glm::vec3& getFarBottomLeft() const { return _cornersWorld[BOTTOM_LEFT_FAR]; }
|
const glm::vec3& getFarBottomLeft() const { return _cornersWorld[BOTTOM_LEFT_FAR]; }
|
||||||
const glm::vec3& getFarBottomRight() const { return _cornersWorld[BOTTOM_RIGHT_FAR]; }
|
const glm::vec3& getFarBottomRight() const { return _cornersWorld[BOTTOM_RIGHT_FAR]; }
|
||||||
|
|
||||||
const glm::vec3& getNearTopLeft() const { return _cornersWorld[TOP_LEFT_NEAR]; }
|
const glm::vec3& getNearTopLeft() const { return _cornersWorld[TOP_LEFT_NEAR]; }
|
||||||
const glm::vec3& getNearTopRight() const { return _cornersWorld[TOP_RIGHT_NEAR]; }
|
const glm::vec3& getNearTopRight() const { return _cornersWorld[TOP_RIGHT_NEAR]; }
|
||||||
const glm::vec3& getNearBottomLeft() const { return _cornersWorld[BOTTOM_LEFT_NEAR]; }
|
const glm::vec3& getNearBottomLeft() const { return _cornersWorld[BOTTOM_LEFT_NEAR]; }
|
||||||
|
|
Loading…
Reference in a new issue