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

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

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

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

デバッグ

デバッグはプログラムのバグや欠陥を検知し、開発中のバグを取り除く為のプロセスを指します。

C++

C++はC言語をもとにしてつくられた最もよく使われるマルチパラダイムプログラミング言語の1つです。オブジェクト指向、ジェネリック、命令型など広く対応しており、多目的に使用されています。

Q&A

0回答

669閲覧

矩形描画 の画面サイズに合うように拡大縮小する方法が知りたい

退会済みユーザー

退会済みユーザー

総合スコア0

OpenGL

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

デバッグ

デバッグはプログラムのバグや欠陥を検知し、開発中のバグを取り除く為のプロセスを指します。

C++

C++はC言語をもとにしてつくられた最もよく使われるマルチパラダイムプログラミング言語の1つです。オブジェクト指向、ジェネリック、命令型など広く対応しており、多目的に使用されています。

0グッド

0クリップ

投稿2021/06/27 03:05

編集2021/06/28 05:20

提示コードですが赤が提示コードの表示で白がシェーダーを使った描画なのですが何故か拡大縮小が正しく行われておらず。図形が小さくなってしまいます。これはなぜなのでしょうか?
glScaledしているためアスペクト比のXの修正が上手く行われていないことが原因だと思いますがどうやって修正すればいかわかりません。

##試したこと
###### 画面最大に図形を描画してどっちがおかしいのか確認

アスペクト比を考慮しないで実装を試みました。提示コード上部のコメントコード 回転の時に図形が歪むため違いました。

イメージ説明

cpp

1 // ##################################### 矩形 描画 ##################################### 2 void DrawRectangle(glm::vec2 start, glm::vec2 end,GLdouble 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 /* 7 start = FrameWork::getWindowPosition(start); 8 end = FrameWork::getWindowPosition(end); 9 10 11 glm::vec2 size = end - start; 12 13 14 glMatrixMode(GL_MODELVIEW); 15 glPushMatrix(); 16 17 glTranslatef(start.x, start.y, 0); 18 glRotated(FrameWork::GetAngle(r), 0, 0, 1); 19 20 glBegin(GL_TRIANGLE_FAN); 21 22 glVertex2f(0, 0); 23 glVertex2f(size.x, 0); 24 glVertex2f(size.x, -size.y); 25 glVertex2f(0, -size.y); 26 27 28 29 30 glEnd(); 31 32 glPopMatrix(); 33 glFinish(); 34 35 */ 36 37 glm::vec2 p = FrameWork::getWindowPosition(start); 38 const float aspect = FrameWork::getWindowContext()->getSize().x / FrameWork::getWindowContext()->getSize().y; //アスペクト比 39 glm::vec2 posStart = getWindowPosition(start) * glm::vec2(aspect, -1.0f); 40 const float rate = 2.0f / FrameWork::getWindowContext()->getSize().x; 41 42 const glm::vec2 offset = glm::vec2(-aspect, -1.0f ); 43 44 start = (start * rate) + offset; 45 end = (end * rate) + offset; 46 47 glm::vec2 rectSize = glm::vec2(std::abs(end.x - start.x) / 2.0f, std::abs(end.y - start.y) / 2.0f); //Rectの(縦横半分の)サイズ 48 glm::vec2 size = glm::abs(end + start) / 2.0f; 49 50 glm::vec2 pos = p; 51 glMatrixMode(GL_MODELVIEW); 52 glPushMatrix(); 53 54 glScalef(1.0f / aspect , -1.0f, 1); 55 glTranslatef(posStart.x, posStart.y , 0); 56 glRotated(FrameWork::GetAngle(r), 0, 0, 1); 57 58 glRectf(-rectSize.x, -rectSize.y, rectSize.x, rectSize.y); 59 //glRectf(0, 0, rectSize.x, -rectSize.y); 60 glPopMatrix(); 61 glFinish(); 62 63 64 65 }

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

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

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

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

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

guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

まだ回答がついていません

会員登録して回答してみよう

アカウントをお持ちの方は

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

ただいまの回答率
85.48%

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

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

質問する

関連した質問