4

我正在阅读 Shreiner Sellers Kessenich 和 Licea-Kane 的第 8 版 OpenGL 编程指南,并且我不断看到这个“vmath”库被用于向量和矩阵的工作。

我在谷歌上搜索了 vmath.h,但找不到任何东西。我在 stackoverflow 上进行了搜索,发现了一个问题,它已被使用,但仅此而已。

我的问题是我可以在哪里或如何安装或下载它。我认为这是freeglut或我用“apt-get install”安装的任何其他opengl东西附带的东西,但显然不是因为g ++找不到vmath.h。

关于如何安装它的任何想法?

4

2 回答 2

8

@Blastfurnace 提供了正确的下载地址。但我还是有话要说。

请使用 glm 而不是vmath.h: http: //glm.g-truc.net/0.9.5/index.html

我使用vmath.h并发现了大量的错误。运算符的某些定义会导致递归函数调用和堆栈溢出。半径和度数之间的转换也是相反的。

第 11 行:

template <typename T> 
inline T radians(T angleInRadians)
{
    return angleInRadians * static_cast<T>(180.0/M_PI);
}

第 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);
}

显然,正切函数接受弧度输入,但函数“弧度”将弧度转换为度数。

第 137 行:

inline vecN& operator/=(const vecN& that)
{
    assign(*this * that);

    return *this;
}

它应该是除法而不是乘法:assign(*this / that)

第 153 行:

inline vecN& operator/(const T& that)
{
    assign(*this / that);
}

看?运算符'/'的递归调用。至少在 Xcode 中,这会导致堆栈溢出。

这些错误让我很恼火,而 glm 库提供了几乎相同的功能,但代码更稳定。我强烈建议您使用 glm 而不是当前的 buggy vmath.h。也许当所有这些错误都被修复后,一个简单的vmath.h将是一个更好的选择,而你现在需要放弃。

于 2014-08-27T16:45:44.163 回答
6

本书的网站可以在The OpenGL Programming Guide中找到。该页面有一个 .zip 文件的链接,其中包含本书中的大部分代码。该vmath.h文件在include目录中。

于 2013-06-23T06:02:46.550 回答