У меня есть этот метод для выполнения ortho проектирования:
void myGL::ApplyOrtho(float maxX, float maxY) const
{
float a = 1.0f/maxX;
float b = 1.0f/maxY;
float ortho[16] = {
a, 0, 0, 0,
0, b, 0, 0,
0, 0, -1, 0,
0, 0, 0, 1};
GLint projectionUniform = glGetUniformLocation(m_simpleProgram, "Projection");
glUniformMatrix4fv(projectionUniform, 1, 0, &ortho[0]);
}
Это хорошо работает для экрана iPad, когда я делаю это:
ApplyOrtho(2, 2*1024/768);
Вот мое предоставленное изображение:

Однако, когда я сменяю друг друга, чтобы заниматься ландшафтным дизайном, это похоже на это:

Теперь мое предположение, это вызвано тем, что ApplyOrtho
матрица устанавливает фиксированное проектирование, и то проектирование не вращается, в то время как изображение вращается в рамках того проектирования, таким образом будучи показанным толще.
Кстати, это - вращение:
void myGL::ApplyRotation(float degrees) const
{
float radians = degrees * 3.14159f/180.0f;
float s = std::sin(radians);
float c = std::cos(radians);
float zRotation[16] = {
c, s, 0, 0,
-s, c, 0, 0,
0, 0, 1, 0,
0, 0, 0, 1
};
GLint modelviewUniform = glGetUniformLocation(m_simpleProgram, "Modelview");
glUniformMatrix4fv(modelviewUniform, 1, 0, &zRotation[0]);
}
Это используется прямо перед рисунком.
Таким образом, я экспериментировал и попробовал это в то же время, я сменяю друг друга:
ApplyOrtho(2*1024/768, 2);
Однако, это не имеет никакого эффекта вообще, даже при том, что вращение определенно происходит в то же время. Мое изображение остается "толстым".
-
Является моей интерпретацией того, почему жирность происходит правильная?
-
, Как обращаться с ортогональной проекцией, самовращаясь экран?
UDPATE: Also tried this on iPhone using the 2/3 dimensions of the screen (not iPhone 5) and using ApplyOrtho(2,3)
and ApplyOrtho(3,2)
but the "fat" triangle in landscape remains.
Также: viewport - установка только однажды перед первым Ortho:
glViewport(0, 0, width, height);
Где ширина и высота - размеры экрана Portrait.