glm: это не тип или пространство имен? Запутанная ошибка в моем заголовке

Я следую этому уроку здесь (я знаю, что есть изменения от glfw 2 до 3, которые не были определены в этом уроке, и я исправил эти аспекты.

Тем не менее, при попытке компиляции после того, что должно работать, я получаю сообщение об ошибке в том, что мой заголовочный файл не распознает glm как пространство имен, и поэтому предполагается, что int прерывает остальную часть программы.

Мой заголовок выглядит следующим образом:

#ifndef CONTROLS_HPP
#define CONTROLS_HPP

 void computeMatricesFromInputs();
 glm::mat4 getViewMatrix();
 glm::mat4 getProjectionMatrix();

#endif

и мой файл.cpp это:

// Include GLFW
#include <glfw3.h>
extern GLFWwindow* window;

// Include GLM
#include <glm/glm.hpp>
#include <glm/gtc/matrix_transform.hpp>
#include <glm/gtx/transform.hpp>
using namespace glm;

#include "Outputs/controls.hpp"

glm::mat4 ViewMatrix;
glm::mat4 ProjectionMatrix;

glm::mat4 getViewMatrix(){
return ViewMatrix;
}
glm::mat4 getProjectionMatrix(){
return ProjectionMatrix;
}


// Initial position : on +Z
glm::vec3 position = glm::vec3(0, 0, 5);
// Initial horizontal angle : toward -Z
float horizontalAngle = 3.14f;
// Initial vertical angle : none
float verticalAngle = 0.0f;
// Initial Field of View
float initialFoV = 45.0f;

float speed = 3.0f; // 3 units / second
float mouseSpeed = 0.005f;



void computeMatricesFromInputs(){

// glfwGetTime is called only once, the first time this function is called
static double lastTime = glfwGetTime();

// Compute time difference between current and last frame
double currentTime = glfwGetTime();
float deltaTime = float(currentTime - lastTime);

// Get mouse position
double xpos, ypos;
glfwGetCursorPos(window, &xpos, &ypos);

// Reset mouse position for next frame
glfwSetCursorPos(window, 1024 / 2, 768 / 2);

// Compute new orientation
horizontalAngle += mouseSpeed * float(1024 / 2 - xpos);
verticalAngle += mouseSpeed * float(768 / 2 - ypos);

// Direction : Spherical coordinates to Cartesian coordinates conversion
glm::vec3 direction(
    cos(verticalAngle) * sin(horizontalAngle),
    sin(verticalAngle),
    cos(verticalAngle) * cos(horizontalAngle)
    );

// Right vector
glm::vec3 right = glm::vec3(
    sin(horizontalAngle - 3.14f / 2.0f),
    0,
    cos(horizontalAngle - 3.14f / 2.0f)
    );

// Up vector
glm::vec3 up = glm::cross(right, direction);

// Move forward
if (glfwGetKey(window, GLFW_KEY_UP) == GLFW_PRESS){
    position += direction * deltaTime * speed;
}
// Move backward
if (glfwGetKey(window, GLFW_KEY_DOWN) == GLFW_PRESS){
    position -= direction * deltaTime * speed;
}
// Strafe right
if (glfwGetKey(window, GLFW_KEY_RIGHT) == GLFW_PRESS){
    position += right * deltaTime * speed;
}
// Strafe left
if (glfwGetKey(window, GLFW_KEY_LEFT) == GLFW_PRESS){
    position -= right * deltaTime * speed;
}

float FoV = initialFoV;

// Projection matrix : 45° Field of View, 4:3 ratio, display range : 0.1 unit <-> 100 units
ProjectionMatrix = glm::perspective(FoV, 4.0f / 3.0f, 0.1f, 100.0f);
// Camera matrix
ViewMatrix = glm::lookAt(
    position,           // Camera is here
    position + direction, // and looks here : at the same position, plus "direction"
    up                  // Head is up (set to 0,-1,0 to look upside-down)
    );

// For the next frame, the "last time" will be "now"
lastTime = currentTime;
}

Я довольно озадачен тем, что здесь происходит, все остальные аспекты, использующие glm, были полностью в порядке.

1 ответ

Решение

Borgleader ответил на этот вопрос для меня (спасибо!). Это было решено с помощью включения для заголовка glm тоже.

Другие вопросы по тегам