ウィンドウ内に2次元矩形を表示する必要があるWindows(XP)アプリケーションがあります。長方形は切り取られてはならず(すなわち、常にビューポート内に完全に存在しなければならない)、サイズ変更時にそのアスペクト比を保持しなければならない。現在、レイアウトを処理するメソッドは、ウィンドウと一致するように矩形の縦横比を歪ませます。私は、長方形をウィンドウに合わせて拡大し、ウィンドウ内に中央揃えしたい(再びクリッピングすることなく)。その方法は以下の通りです。 lWinDistとlMaxDepthは(それが重要ならば、インチの48thsで)表示される矩形の幅と高さ:ウィンドウ上の2Dオブジェクトの縦横比を維持する
void CRoRRecView::RedoLayout(long lWinDist, long lMaxDepth)
{
CDC* pDC = GetDC() ;
if (pDC != NULL)
{
m_lWinDist = lWinDist;
GetClientRect(m_rectClient) ;
int nClientWidth = m_rectClient.Width();
int nClientHeight = m_rectClient.Height();
glViewport(0, 0, nClientWidth, nClientHeight);
glMatrixMode(GL_PROJECTION);
glLoadIdentity();
m_fWinXDist = (float) lWinDist ;
m_fWinYDist = lMaxDepth ;
m_fAspectRatio = m_fWinXDist/m_fWinYDist;
glOrtho(0.0, m_fWinXDist, 0.0, m_fWinYDist, -1, 1) ;
glRotatef(180.0, 0,1,0);
glTranslatef((float)(-1 * lWinDist),0,0); // Translate across the x axis
glMatrixMode(GL_MODELVIEW);
glLoadIdentity();
ReleaseDC(pDC) ;
}
}
はい、それはきれいにスケールします。残念ながら、問題はすべて私の目的ではなくなりました。アスペクト比が固定されると宣言された権限は、とにかくこれをバックポケットに入れておきます。 – PSU