In allen Tutorials fand ich über die Erstellung Projektionsmatrix basierend auf Ansichtsfenstergröße alle von ihnen angenommen, dass links unten Koordinaten des Ansichtsfensters (0,0) sein wird.glViewport Offset und Orthoprojektion
Jetzt möchte ich auf die verschiedenen Teile des Bildschirms zu ziehen und zu diesem Zweck möchte ich Ansichtsfenster entsprechend wechseln:
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
Jetzt habe ich ein Problem mit meiner Projektionsmatrix definieren. Ohne jede (x, y) offest ich diesen Code wurde mit für meine ortho Projektionsmatrix Berechnung:
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));
}
Und das funktioniert gut BIS Ich werde jede (x, y) zu meinem Ansichtsfenster-Offset hinzuzufügen. Die Wirkung folgt, wenn glViewport(0, m_WindowHeight/2, m_WindowWidth/2, m_WindowHeight/2
verwenden):
Und mit glViewport(0, 0, m_WindowWidth/2, m_WindowHeight/2)
:
Wie kann ich es funktioniert?
Nun, das funktioniert nicht. Können Sie Ihren Beitrag bearbeiten und beschreiben, wie Sie diese Lösung entwickelt haben? Und maby Teilen refference zu ihm? Weil Wiki-Seite über Orthoprojektion keine Informationen darüber haben. – Amadeusz