4

Shreiner Sellers Kessenich と Licea-Kane による OpenGL プログラミング ガイドの第 8 版を読んでいますが、この「vmath」ライブラリがベクトルと行列の作業に使用されているのを見続けています。

vmath.h を Google 検索しましたが、何も見つかりませんでした。私はstackoverflowで検索を行い、それが使用されている場所で1つの質問を見つけましたが、それ以上のものはありません.

私の質問は、どこに、どのようにインストールまたはダウンロードできるかです。私はそれが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);
}

明らかに正接関数はラジアン入力を受け入れますが、関数 'radian' は代わりにラジアンを度に変換します。

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 を使用することを強くお勧めしますvmath.h。おそらく、これらのバグがすべて修正されたときに、単純なvmath.hものがより良い選択になるでしょうが、現時点ではあきらめる必要があります.

于 2014-08-27T16:45:44.163 に答える