提示コードなのですが参考サイトの回答を参考にプログラムしたいのですが回転する角度に数値20を入れると画面に表示されなくなります。これは一体何をしたのでしょうか?原因が知りたいです。
#試したこと
getWindowContext()->getSize()関数の実装には問題がないです。確認しました。
glMatrixMode,glPushMatrix,glTranlated,glRotate,関数をコメントアウトすると矩形が正常に描画されます。
回転角度rに0,20,45,90と入力すると表示されなくなり180と表示すると提示画像のうに表示されます。
回転の順序の間違いをglTranslated,glRotated関数を逆しました。
glRectfではなくglVetrex2f関数を使ってみした。
#やりたいこと
矩形の中心を中心に回転させたい

参考サイト(リファレンス): https://docs.microsoft.com/ja-jp/windows/win32/opengl/glrectf
参考サイト: https://teratail.com/questions/345582
cpp
1 // ##################################### 矩形 描画 ##################################### 2 void DrawRectangle(glm::vec2 start, glm::vec2 end,float r, glm::vec4 color) 3 { 4 glColor4f(color.x * RGBA_COLOR, color.y * RGBA_COLOR, color.z * RGBA_COLOR, color.w * RGBA_COLOR); 5 6 float dx = 1.0f / (FrameWork::getWindowContext()->getSize().x / 2); 7 float dy = 1.0f / (FrameWork::getWindowContext()->getSize().y / 2); 8 9 glm::vec2 pos; 10 pos.x = start.x * dx -1.0f; 11 pos.y = 1.0f - start.y * dy; 12 glm::vec2 posA; 13 glm::vec2 posB; 14 posA.x = start.x * dx - 1.0f; 15 posA.y = 1.0f - start.y * dy; 16 posB.x = end.x * dx - 1.0f; 17 posB.y = 1.0f - end.y * dy; 18 19 glMatrixMode(GL_MODELVIEW); 20 glPushMatrix(); 21 glTranslated(pos.x, pos.y, 0); 22 glRotated(r, 0, 0, -1); 23 24 glRectf(posA.x,posA.y, posB.x, posB.y); 25 26 27 glFinish(); 28 glPopMatrix(); 29 } 30
cpp
1 2 // ##################################### スクリーン座標を取得 ##################################### 3 glm::vec2 getWindowPosition(glm::vec2 pos) 4 { 5 float dx = 1.0f / (FrameWork::getWindowContext()->getSize().x / 2); 6 float dy = 1.0f / (FrameWork::getWindowContext()->getSize().y / 2); 7 8 pos.x = ((pos.x * dx) - 1.0f); 9 pos.y = (1.0f - (pos.y * dy)); 10 11 return pos; 12 } 13
> 回転の順序の間違いを疑い順序あれこれ触りました。
「あれこれ触りました」ではわかりません、試した内容を追記してください。
文章を修正しました。
すいません、言葉が足りなかったようなので改めて。
試した内容とは、「何を試したのか」、「どうなることを期待したのか」、「結果はどうだったのか」を書いてください。
よくわからないけど入れ替えてみた、結果はよくわからないとかであれば、
何も試していないのとほぼかわらないから書かなくてもいいと思います。
> 回転する角度に数値20を入れると画面に表示されなくなります。
これは20以外も試して、20の時だけ起こるということでしょうか。
それともたまたま20を入れたら表示されなくなったということでしょうか。
> glRotated(r, 0, 0, -1);
ほかの質問では「1」だっと思いますが、この「-1」は何を意図して入れているのでしょうか。
「glRotated()」自体を特に調べてもいないので、的外れでしたらすみません。
(回転方向を逆向きに指定したくなっただけかと)
回答2件
あなたの回答
tips
プレビュー
