我正在阅读Shreiner Sellers Kessenich和Licea-Kane的第8版OpenGL编程指南,我一直看到这个"vmath"库被用于矢量和矩阵工作.
我做了谷歌搜索vmath.h,但无法找到任何东西.我对stackoverflow进行了搜索,发现了一个问题,它已被使用但仅此而已.
我的问题是我在哪里或如何安装或下载它.我认为这是与freeglut一起出现的东西或者我用"apt-get install"安装的其他任何opengl东西,但显然不是因为g ++找不到vmath.h.
关于如何安装它的任何想法?
@Blastfurnace提供正确的下载地址.但我还有话要说.
请使用glm代替vmath.h
:http://glm.g-truc.net/0.9.5/index.html
我使用vmath.h
并发现了大量的bug.运算符的某些定义会导致递归函数调用和堆栈溢出.半径和度数之间的转换也是反转的.
第11行:
template <typename T>
inline T radians(T angleInRadians)
{
return angleInRadians * static_cast<T>(180.0/M_PI);
}
Run Code Online (Sandbox Code Playgroud)
第631行:
static inline mat4 perspective(float fovy /* in degrees */, float aspect, float n, float f)
{
float top = n * tan(radians(0.5f*fovy)); // bottom = -top
float right = top * aspect; // left = -right
return frustum(-right, right, -top, top, n, f);
}
Run Code Online (Sandbox Code Playgroud)
显然,切线函数接受弧度输入,但函数'radian'将弧度转换为度.
第137行:
inline vecN& operator/=(const vecN& that)
{
assign(*this * that);
return *this;
}
Run Code Online (Sandbox Code Playgroud)
它应该是一个除法而不是乘法:assign(*this / that)
.
第153行:
inline vecN& operator/(const T& that)
{
assign(*this / that);
}
Run Code Online (Sandbox Code Playgroud)
看到?运算符'/'的递归调用.至少在Xcode中,这会导致堆栈溢出.
这些错误让我很烦恼,而glm库提供了几乎相同的功能,但代码更加稳定.我强烈建议您使用glm而不是当前的bug vmath.h
.也许当所有这些错误都得到修复时,简单vmath.h
就是更好的选择,而你现在需要放弃.