GlM(OpenGl Mathematics)库阻止M_PI和其他定义的常量工作



我需要GLM库进行矩阵计算。

在一个大型项目中,我在很多地方使用M_PI常量进行计算,我还使用 max 和 min 函数。 这些来自 cmath 库。

#define _USE_MATH_DEFINES
#include <cmath>

一旦包含 GLM 库,最大最小宏和常量(如M_PI(就不再可用。

工程:

#include "stdafx.h"  //standard stuff
#include "windows.h" //for max, min
#define _USE_MATH_DEFINES
#include <cmath>     //for M_PI
#include <iostream>  //for cin
int main()
{
printf("Pi is approximately: %.4f", M_PI);
printf("Biggest of 5.3 and 7.4 is :%.4fn", max(5.3,7.4));
std::cin.get();
return 0;
}

不编译:

#include "stdafx.h"  //standard stuff
#include "windows.h" //for max, min
#include <glm/glm.hpp>
#define _USE_MATH_DEFINES
#include <cmath>     //for M_PI
#include <iostream>  //for cin
int main()
{
printf("Pi is approximately: %.4f", M_PI);
printf("Biggest of 5.3 and 7.4 is :%.4fn", max(5.3,7.4));
std::cin.get();
return 0;
}

未定义的M_PI符号是由包含之前cmathglm引起的

#define _USE_MATH_DEFINES

如果将此定义语句放在 glm 包含之前,则可以修复数学常量问题。

maxmin定义来自"windows.h",但是因为 glm 库有自己的函数,所以它取消了它们的定义。这可以在标题为<glm/detail/_fixes.hpp>的文件中看到,顾名思义,该文件是他们构建库时问题的解决方法。

因此,解决方案要么using namespace glm;,要么使用glm范围内的函数。

所有这些修复相结合的结果是

#include "stdafx.h"
#include "windows.h"
#define _USE_MATH_DEFINES
#include <glm/glm.hpp>
#include <cmath> //now redundant as glm includes it
#include <iostream>
using namespace std;
int main()
{
printf("Pi is approximately: %.4fn", M_PI);
printf("Biggest of 5.3 and 7.4 is :%.4fn", glm::max(5.3,7.4));
std::cin.get();
return 0;
}

相关内容

最新更新