I'm writing a simple OpenGL program and am currently working on a Camera class. However, trying to initialize the camera class results in a segfault at glm::cross
I've tried initializing with both new
and Camera(...)
like so:
Camera *c = new Camera(glm::vec3(0, 0, 0), glm::vec2(0, 0), nullptr);
Camera c = Camera(glm::vec3(0, 0, 0), glm::vec2(0, 0), nullptr);
Camera c(glm::vec3(0, 0, 0), glm::vec2(0, 0), nullptr);
However, all 3 of them produce the same result. (the nullptr
as an arg has nothing to do with it, as it just gets assigned to an attribute)
My Camera class:
class Camera {
public:
glm::vec3 up;
glm::vec3 right;
glm::vec3 forward;
glm::vec3 lookDirection;
glm::vec3 position;
float fov = 70, near = 0.1f, far = 100.0f;
glm::vec2 lookAngle;
GLFWwindow *win;
Camera(glm::vec3 pos, glm::vec2 look, GLFWwindow *window) {
win = window;
lookAngle = look;
position = pos;
lookDirection = glm::vec3(cos(lookAngle.y) * sin(lookAngle.x), sin(lookAngle.y),
cos(lookAngle.y) * cos(lookAngle.x));
right = glm::vec3(sin(lookAngle.x - pi / 2.0f), 0, cos(lookAngle.x - pi / 2.0f));
forward = glm::vec3(sin(lookAngle.x), 0, cos(lookAngle.x));
// I would print `right` and `lookDirection` here.
up = glm::cross(right, lookDirection);
std::cout << "After cross" << std::endl;
}
... // Some irrelevant methods
}
However, on up = glm::cross(right, lookDirection);
, it would segfault at
glm::detail::compute_cross<float, (glm::qualifier)0, false>::call(glm::vec<3, float, (glm::qualifier)0> const&, glm::vec<3, float, (glm::qualifier)0> const&):
pushq %rbp
movq %rsp, %rbp
subq $0x20, %rsp
movq %rdi, %rax
movq %rsi, -0x8(%rbp)
movq %rdx, -0x10(%rbp)
movq -0x8(%rbp), %rdx
movss 0x4(%rdx), %xmm0 # xmm0 = mem[0],zero,zero,zero
movq -0x10(%rbp), %rdx
mulss 0x8(%rdx), %xmm0 # <------- IT WOULD SEGFAULT RIGHT HERE
movq -0x10(%rbp), %rdx
movss 0x4(%rdx), %xmm1 # xmm1 = mem[0],zero,zero,zero
movq -0x8(%rbp), %rdx
right
would be equal to {-1, 0, 6.12323e-17}
and lookDirection
would equal {0, 0, 1}
. "After cross" would never be printed.
Currently, I'm at a loss. Any help would be appreciated.