web-dev-qa-db-ja.com

GLMライブラリを含む/使用する際の問題

C++プロジェクトにglm数学ライブラリ( http://glm.g-truc.net/ )を適切に含める/使用するのに問題があります。 glmは「ヘッダーのみ」のライブラリであるため、次の行に含めることができると思いました。

_#include "glm/glm.hpp"
_

行列とベクトルを作成して使用できたので、最初はこれが機能しているように見えました。しかし、glm::translate(...)関数を使おうとすると、次のエラーが発生しました。

_error: ‘translate’ is not a member of ‘glm’
_

GLM Webサイトでは、次のように、三角形の括弧でライブラリを含めることを推奨しています。

_#include <glm/glm.hpp>
_

...しかし、プロジェクトのディレクトリ構造内にあることを考えると、他の方法で含めることができると考えるのは正しくありませんか?

私が抱えている問題を説明するために、以下のテストを設定しました。 glmフォルダーは_testglm.cpp_ファイルの隣にあります。

_#include <iostream>

#include "glm/glm.hpp"

using namespace std;

int main(void) {

    // works:
    glm::mat4 testMatrix1 = glm::mat4(5.0f) * glm::mat4(2.0f);

    cout << testMatrix1[0][0] << endl; // output: 10

    // doesn't work - (error: ‘translate’ is not a member of ‘glm’):
    glm::mat4 testMatrix2 = glm::translate(glm::mat4(1.0f), glm::vec3(1.0f));

}
_

Osxのターミナルからこのビルドコマンドを使用してこのテストをビルドしています:

_g++ -o bin/glm_test src/testglm.cpp
_

私の問題が、ライブラリをどのように含めるか、どのように使用するか、またはプロジェクトをどのように構築するかに関係するかどうかはわかりません。グーグルは私にそのエラーメッセージのヒットを与えないので、私は根本的に間違ったことをしているのだろうかと思います。アドバイスをいただければ幸いです。ありがとう。

13
null

yngumの提案により、私はドキュメントをより詳しく調べるようになり、glm::translateは、実際にはglmコアを拡張するモジュールの一部です。 glmコアとmatrix_transform拡張機能の両方を含める必要がありました。

#include "glm/glm.hpp"
#include "glm/gtc/matrix_transform.hpp"

これで、テスト例が機能します。 (また、テストで愚かな間違いを犯したためにコンパイルできなかったことにも気づきました。同じ理由で問題が発生する可能性がある将来の読者のために、元の質問で修正されました。 )

23
null

多分私は少し遅れていますが、代わりに

#include "glm/glm.hpp"

使用できます

#include "glm/ext.hpp"
9
Tqq

正しい引数があることを確認するか、IDEを使用して生活を簡素化してください。
ここにglm::translate私が見つけることができる署名

detail::tmat4x4<T> translate (detail::tmat4x4<T> const &m, detail::tvec3<T> const &v);
detail::tmat4x4<T> translate (T x, T y, T z)
detail::tmat4x4<T> translate (detail::tmat4x4<T> const &m, T x, T y, T z)
detail::tmat4x4<T> translate (detail::tvec3<T> const &v)
3
yngccc