質問をすることでしか得られない、回答やアドバイスがある。

15分調べてもわからないことは、質問しよう!

新規登録して質問してみよう
ただいま回答率
85.35%
OpenGL

OpenGLは、プラットフォームから独立した、デスクトップやワークステーション、モバイルサービスで使用可能な映像処理用のAPIです。

Q&A

解決済

1回答

828閲覧

opengl GLMについて

txty

総合スコア303

OpenGL

OpenGLは、プラットフォームから独立した、デスクトップやワークステーション、モバイルサービスで使用可能な映像処理用のAPIです。

0グッド

0クリップ

投稿2020/11/19 10:34

https://w.atwiki.jp/bambooflow/pages/289.html
ここのサイトをみて、
//#include <glm/glm.hpp>
//#include <glm/gtc/matrix_transform.hpp>

GLM

1glm::vec3 size(0.5,0.5,0.5); 2glm::mat4 e; 3glm::scale(e,size);//versionの関係?かscaleに直した。 4

で実行できてひな形にしようかなと思うんですけど、(反映されてるかわからないし、つかえるかわかりませんが)
scaleだけじゃなく全体的に、vec3の意味がわかりません。

mat4で4*4を表していると思うんですけど、行列のデータの積み方がわかりません。
vec3かなと思うんですけど、mat4にたいするデータの積み方について教えてください。

気になる質問をクリップする

クリップした質問は、後からいつでもMYページで確認できます。

またクリップした質問に回答があった際、通知やメールを受け取ることができます。

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

guest

回答1

0

ベストアンサー

一体何が本件の問題点なのか,掴みかねますが…

(1)
まずはglmのマニュアルなりを見るべきじゃないですかね.
そんなどこぞの端的な記述だけ見て「?」とか言ってても仕方ないでしょう.

glmをDLしてくると丁寧にドキュメントも含まれてます.
一瞬でもリファレンスでglm::scaleを調べたならば,

glm::scale(e,size);

こんな記述はしないハズ.
(この関数は引数がどちらも const参照 なのだが,この呼び出しで何を期待する?)
(この関数には戻り値が存在するが,無視してよいのか?)

(2)
あとは,理解が正しいかどうかを
こんな感じ↓に,実際に確認でもしてみればよいのでは.

C++

1//mat4の全要素を表示してみるぜ 2void OutputMatrix( const glm::mat4 &M ) 3{ 4 std::cout << "----------\n"; 5 for( int row=0; row<4; ++row ) 6 { 7 for( int col=0; col<4; ++col ) 8 { 9 std::cout << '[' << M[row][col] << ']'; 10 } 11 std::cout << "\n"; 12 } 13 std::cout << "----------\n" << std::endl; 14} 15 16// 17int main(int argc, char *argv[]) 18{ 19 //mat4のインスタンスを作ってみたぜ 20 //(1)コンストラクタにこんな形で値を渡せば良いように見えるが本当か? 21 glm::mat4 e( 22 1, 2, 3, 4, 23 11, 12, 13, 14, 24 21, 22, 23, 24, 25 31, 32, 33, 34 26 ); 27 //(1)の妥当性を確認するために 28 //現在の中身を表示してみるぜ 29 OutputMatrix( e ); 30 31 {//(2) glm::scale()ってのは何が起こるんだよ? リファレンス見てもよくわからんかったぞ? 32 //じゃあ,もう,実際にやってみるぜ 33 glm::vec3 size( 2, 3, 10 ); 34 e = glm::scale( e, size ); 35 //中身がどうなったのか表示してみるぜ.これでglm::scale()の正体が暴かれるぜ! 36 OutputMatrix( e ); 37 } 38 return 0; 39}

投稿2020/11/20 02:21

fana

総合スコア11996

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

fana

2020/11/20 02:23

知らん物を使い始める際には,こう,ちまちまと地道に調べてくしかないんじゃないですかね.
fana

2020/11/20 02:27

私なら, glm::mat4 e; こう書いた時点でもう不安でいっぱいになります. 「このマトリクスの要素はどうなってるんだろう?」と. ざっくりと, ・不定値になっている ・全0で初期化されている ・単位行列になっている くらいが,ありえそうな候補として想像されるけども,そのどれなのか?(またはその他の状態か)がわからないと,このインスタンスを使うコードをまともには書けないですよね.
txty

2020/11/20 05:16 編集

リファレンスって英語で大量に書かれたページですか。質問で、なんか間違えてるのなら、質問を編集したいのですが、(どちらでもいいんですが)、気が向いたら、質問編集してもいいですか。後、 e = glm::scale( e, size );がなんとなく嫌なので、返り値があるってわかりましたが、単位行列で初期化されているので、mat4 d を追加していいでしょうか d=glm::scale(e,size);のように、あと積み方わかりました。ありがとうございます。
fana

2020/11/20 05:23

> リファレンス 入手してきたものの中にdocというフォルダがありませんか? (今回,glm::scale() の情報に関しては doc の下の api フォルダ内の index.html 開いて,そこの検索領域に "scale" と入れることで調べました.) > 単位行列で初期化 glm::mat4 はデフォルトコンストラクタではそうならないようです(中身は不定値かと). 単位行列に初期化する場合には,対角行列にするコンストラクタを使って glm::mat4 e(1); のようにする必要がある模様.
txty

2020/11/20 05:43

すいません 環境でyum install で入手できてしまったので、ドキュメントのURLもらえませんか。後、不定になるときってあるんですね。恐ろしいです。初期化するように心がけます。
fana

2020/11/20 05:55

glmの本家っぽい: https://glm.g-truc.net/0.9.9/index.html 私はここの Downloads から glm を入手したらそこに入ってましたが, このページでオンラインでも見れるみたいです.
txty

2020/11/20 06:12

オンラインのページが見つかりました。これは便利です。役立つと思います。しかし、なぜかわからないけどどうもできる気がしません。4*4の掛け算になれていないからか。vec3で4行目の変えかたをしらないだろうか、それとも、行列の本質をよく理解できていないのか。なににせよありがとうございました。手がうごかなくなったらまた質問するかもしれません。
txty

2020/11/20 12:28 編集

すいません。glm::mat4 R(1); R=glm::mat4 r(cos(angle*M_PI/180),0,sin((angle*M_PI/180),0, 0, 1, 0, 0, -sin(angle*M_PI/180),0, cos(angle*M_PI/180),0, 0, 0,0,1); でできない模様。Rをrに変えてもできない模様。 (計算値に変化がないのも気になりますが。)  あと、qx,qy,qz,1?はどうすればいいのか、暇なときでいいからおしえてください。自分でも調べてみます。 qx=cos *px +0*py+sin*pz qy=0*px+1*py+0*pz qz=-sin*px+0*py+cos*pzって他の文献に、あるけど縦にpx,py,pz,それと1をかけるっていう意味ですよね。 glm::の状態で4*4で。 参考 glm::mat4 R(cos(angle*M_PI/180)*px , 0*py, sin(angle*M_PI/180)*pz,0, 0*px , 1*py, 0*pz 0, -sin(angle*M_PI/180)*px, 0*py, cos(angle*M_PI/180)*pz,0, 0 , 0 , 0 ,1); どうにかして 上の計算部分前を作って この形になってglVertex( , , ); にいれたいです。なおこの後、4*4が必要になる模様。
txty

2020/11/21 02:47 編集

ちょっと駄目だったから、ここは消す
txty

2020/11/21 07:31 編集

glm0.9.9 API documentation で 検索にscaleっていれたら, GLM_FUNC_DECL mat<4, 4, T, Q> glm::scale ( vec< 3, T, Q > const & v ) とか3つほどでるんですけど、Transforms a matrix with a scale 4 * 4 matrix created from a vector of 3 components. See alsoという記述と GLM_GTC_matrix_transform GLM_GTX_transform ってリンクでましたけど、indexファイルをどう読んだらいいですか。
txty

2020/11/21 10:03 編集

indexの247に GLM_FUNC_DECL mat<4,4,T,Q> glm::translate(mat<4,4,T,Q>const &m,vec3<3,T,Q>const &v)とあった。 これは、 glm::mat4 m=glm::translate(glm::mat4(1.0f),glm:vec3(1.0f));だった。 // m[0][0] == 1.0f, m[0][1] == 0.0f, m[0][2] == 0.0f, m[0][3] == 0.0f // m[1][0] == 0.0f, m[1][1] == 1.0f, m[1][2] == 0.0f, m[1][3] == 0.0f // m[2][0] == 0.0f, m[2][1] == 0.0f, m[2][2] == 1.0f, m[2][3] == 0.0f // m[3][0] == 1.0f, m[3][1] == 1.0f, m[3][2] == 1.0f, m[3][3] == 1.0f glm-0.9.9.8/doc/api/a00247.html引用。 全部にサンプル載せてくれればいいのにね。もしくは、glm::vec3(1.0,2.0,3.0)だとか。 以降何もなかった。
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

15分調べてもわからないことは
teratailで質問しよう!

ただいまの回答率
85.35%

質問をまとめることで
思考を整理して素早く解決

テンプレート機能で
簡単に質問をまとめる

質問する

関連した質問