すべてのチュートリアルでは、ビューポートのサイズに基づいて投影行列を作成することで、すべてビューポートの左下座標が(0,0)と仮定していました。glViewportオフセットとオルソプロジェクション
今私は、画面の別の部分に描きたいと、その目的のために、私はそれに応じてビューポートを切り替えたい:
glViewport(0,0,windowWidth/2, windowHeight/2); //left bottom
glViewport(0,windowHeight/2,windowWidth/2, windowHeight/2);//left top
glViewport(windowWidth/2,0,windowWidth/2, windowHeight/2);//right bottom
glViewport(windowWidth/2, windowHeight/2,windowWidth/2, windowHeight/2);//right top
は今、私は私の投影行列を定義するに問題があります。任意の(x、y)をせずに私は私のオルト射影行列を計算するため、このコードを使用していたoffest:
if (m_WindowWidth > m_WindowHeight)
{
auto viewportAspectRatio = (float)m_WindowWidth/(float)m_WindowHeight;
m_ProjectionMatrix.m_fLeft = (-1.0f) * m_fWindowSize * viewportAspectRatio;
m_ProjectionMatrix.m_fRight = m_fWindowSize * viewportAspectRatio;
m_ProjectionMatrix.m_fBottom = (-1.0f)*m_fWindowSize;
m_ProjectionMatrix.m_fTop = m_fWindowSize;
m_ProjectionMatrix.m_fNear = -(10.0f)*m_fWindowSize;
m_ProjectionMatrix.m_fFar = (10.0f)*m_fWindowSize;
m_fMoveSpeed = static_cast<GLfloat>(m_fWindowSize * 2/static_cast<float>(m_WindowHeight));
}
else
{
auto viewportAspectRatio = (float)m_WindowHeight/(float)m_WindowWidth;
m_ProjectionMatrix.m_fLeft = (-1.0f)*m_fWindowSize;
m_ProjectionMatrix.m_fRight = m_fWindowSize;
m_ProjectionMatrix.m_fBottom = (-1.0f)*m_fWindowSize * viewportAspectRatio;
m_ProjectionMatrix.m_fTop = m_fWindowSize * viewportAspectRatio;
m_ProjectionMatrix.m_fNear = -(10.0f)*m_fWindowSize;
m_ProjectionMatrix.m_fFar = (10.0f)*m_fWindowSize;
m_fMoveSpeed = static_cast<GLfloat>(m_fWindowSize * 2/static_cast<float>(m_WindowWidth));
}
をそして、これは私が私のビューポートに任意のオフセット(x、y)を追加します UNTIL正常に動作します。 glViewport(0, m_WindowHeight/2, m_WindowWidth/2, m_WindowHeight/2
を使用した場合の効果は)以下の通りです:
そしてglViewport(0, 0, m_WindowWidth/2, m_WindowHeight/2)
で:
どのように私はそれを動作させることができますか?
これはうまくいきません。投稿を編集して、このソリューションをどうやって思いついたでしょうか?そしてマバイはそれに同意しますか?オルトの投影についてのwikiページにはそれに関する情報がないので。 – Amadeusz