mirror of
https://github.com/Kelsidavis/WoWee.git
synced 2026-03-22 23:30:14 +00:00
Fix Windows frustum enum macro collision
This commit is contained in:
parent
1c7b87ee78
commit
e916ef9bda
2 changed files with 36 additions and 36 deletions
|
|
@ -33,12 +33,12 @@ struct Plane {
|
|||
class Frustum {
|
||||
public:
|
||||
enum Side {
|
||||
LEFT = 0,
|
||||
RIGHT,
|
||||
BOTTOM,
|
||||
TOP,
|
||||
NEAR,
|
||||
FAR
|
||||
PLANE_LEFT = 0,
|
||||
PLANE_RIGHT,
|
||||
PLANE_BOTTOM,
|
||||
PLANE_TOP,
|
||||
PLANE_NEAR,
|
||||
PLANE_FAR
|
||||
};
|
||||
|
||||
Frustum() = default;
|
||||
|
|
|
|||
|
|
@ -16,50 +16,50 @@ void Frustum::extractFromMatrix(const glm::mat4& vp) {
|
|||
// assignments so the enum names match the geometric meaning.)
|
||||
|
||||
// Left plane: row4 + row1 (x_clip >= -w_clip)
|
||||
planes[LEFT].normal.x = vp[0][3] + vp[0][0];
|
||||
planes[LEFT].normal.y = vp[1][3] + vp[1][0];
|
||||
planes[LEFT].normal.z = vp[2][3] + vp[2][0];
|
||||
planes[LEFT].distance = vp[3][3] + vp[3][0];
|
||||
normalizePlane(planes[LEFT]);
|
||||
planes[PLANE_LEFT].normal.x = vp[0][3] + vp[0][0];
|
||||
planes[PLANE_LEFT].normal.y = vp[1][3] + vp[1][0];
|
||||
planes[PLANE_LEFT].normal.z = vp[2][3] + vp[2][0];
|
||||
planes[PLANE_LEFT].distance = vp[3][3] + vp[3][0];
|
||||
normalizePlane(planes[PLANE_LEFT]);
|
||||
|
||||
// Right plane: row4 - row1 (x_clip <= w_clip)
|
||||
planes[RIGHT].normal.x = vp[0][3] - vp[0][0];
|
||||
planes[RIGHT].normal.y = vp[1][3] - vp[1][0];
|
||||
planes[RIGHT].normal.z = vp[2][3] - vp[2][0];
|
||||
planes[RIGHT].distance = vp[3][3] - vp[3][0];
|
||||
normalizePlane(planes[RIGHT]);
|
||||
planes[PLANE_RIGHT].normal.x = vp[0][3] - vp[0][0];
|
||||
planes[PLANE_RIGHT].normal.y = vp[1][3] - vp[1][0];
|
||||
planes[PLANE_RIGHT].normal.z = vp[2][3] - vp[2][0];
|
||||
planes[PLANE_RIGHT].distance = vp[3][3] - vp[3][0];
|
||||
normalizePlane(planes[PLANE_RIGHT]);
|
||||
|
||||
// With the Vulkan Y-flip (proj[1][1] negated), row4+row2 extracts
|
||||
// what is geometrically the TOP plane and row4-row2 extracts BOTTOM.
|
||||
// Swap the assignments so enum labels match geometry.
|
||||
|
||||
// Top plane (geometric): row4 - row2 after Y-flip
|
||||
planes[TOP].normal.x = vp[0][3] + vp[0][1];
|
||||
planes[TOP].normal.y = vp[1][3] + vp[1][1];
|
||||
planes[TOP].normal.z = vp[2][3] + vp[2][1];
|
||||
planes[TOP].distance = vp[3][3] + vp[3][1];
|
||||
normalizePlane(planes[TOP]);
|
||||
planes[PLANE_TOP].normal.x = vp[0][3] + vp[0][1];
|
||||
planes[PLANE_TOP].normal.y = vp[1][3] + vp[1][1];
|
||||
planes[PLANE_TOP].normal.z = vp[2][3] + vp[2][1];
|
||||
planes[PLANE_TOP].distance = vp[3][3] + vp[3][1];
|
||||
normalizePlane(planes[PLANE_TOP]);
|
||||
|
||||
// Bottom plane (geometric): row4 + row2 after Y-flip
|
||||
planes[BOTTOM].normal.x = vp[0][3] - vp[0][1];
|
||||
planes[BOTTOM].normal.y = vp[1][3] - vp[1][1];
|
||||
planes[BOTTOM].normal.z = vp[2][3] - vp[2][1];
|
||||
planes[BOTTOM].distance = vp[3][3] - vp[3][1];
|
||||
normalizePlane(planes[BOTTOM]);
|
||||
planes[PLANE_BOTTOM].normal.x = vp[0][3] - vp[0][1];
|
||||
planes[PLANE_BOTTOM].normal.y = vp[1][3] - vp[1][1];
|
||||
planes[PLANE_BOTTOM].normal.z = vp[2][3] - vp[2][1];
|
||||
planes[PLANE_BOTTOM].distance = vp[3][3] - vp[3][1];
|
||||
normalizePlane(planes[PLANE_BOTTOM]);
|
||||
|
||||
// Near plane: row3 (z_clip >= 0 in Vulkan depth [0,1])
|
||||
planes[NEAR].normal.x = vp[0][2];
|
||||
planes[NEAR].normal.y = vp[1][2];
|
||||
planes[NEAR].normal.z = vp[2][2];
|
||||
planes[NEAR].distance = vp[3][2];
|
||||
normalizePlane(planes[NEAR]);
|
||||
planes[PLANE_NEAR].normal.x = vp[0][2];
|
||||
planes[PLANE_NEAR].normal.y = vp[1][2];
|
||||
planes[PLANE_NEAR].normal.z = vp[2][2];
|
||||
planes[PLANE_NEAR].distance = vp[3][2];
|
||||
normalizePlane(planes[PLANE_NEAR]);
|
||||
|
||||
// Far plane: row4 - row3 (z_clip <= w_clip)
|
||||
planes[FAR].normal.x = vp[0][3] - vp[0][2];
|
||||
planes[FAR].normal.y = vp[1][3] - vp[1][2];
|
||||
planes[FAR].normal.z = vp[2][3] - vp[2][2];
|
||||
planes[FAR].distance = vp[3][3] - vp[3][2];
|
||||
normalizePlane(planes[FAR]);
|
||||
planes[PLANE_FAR].normal.x = vp[0][3] - vp[0][2];
|
||||
planes[PLANE_FAR].normal.y = vp[1][3] - vp[1][2];
|
||||
planes[PLANE_FAR].normal.z = vp[2][3] - vp[2][2];
|
||||
planes[PLANE_FAR].distance = vp[3][3] - vp[3][2];
|
||||
normalizePlane(planes[PLANE_FAR]);
|
||||
}
|
||||
|
||||
void Frustum::normalizePlane(Plane& plane) {
|
||||
|
|
|
|||
Loading…
Add table
Add a link
Reference in a new issue