提示コードですが赤が提示コードの表示で白がシェーダーを使った描画なのですが何故か拡大縮小が正しく行われておらず。図形が小さくなってしまいます。これはなぜなのでしょうか?
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 }
あなたの回答
tips
プレビュー