Отразить ось Y в OpenGL ES? - PullRequest
3 голосов
/ 16 июля 2010

Я пытаюсь рисовать в орфографическом режиме с помощью OpenGL ES, и точка (0,0) находится в левом нижнем углу экрана. Однако я хочу, чтобы это было в левом верхнем углу.

Вот где я настраиваю вещи в своем приложении для Android:

public void onSurfaceChanged(final GL10 gl, final int width, final int height) {
    assert gl != null;

    // use orthographic projection (no depth perception)
    GLU.gluOrtho2D(gl, 0, width, 0, height);
}

Я пытался изменить вышеуказанный вызов разными способами, в том числе:

    GLU.gluOrtho2D(gl, 0, width, 0, height);
    GLU.gluOrtho2D(gl, 0, width, 0, -height);
    GLU.gluOrtho2D(gl, 0, width, height, 0);
    GLU.gluOrtho2D(gl, 0, width, -height, 0);

Я также пытался играть с окном просмотра безрезультатно:

public void onSurfaceChanged(final GL10 gl, final int width, final int height) {
    assert gl != null;

    // define the viewport
    gl.glViewport(0, 0, width, height);
    gl.glMatrixMode(GL10.GL_PROJECTION);
    gl.glLoadIdentity();

    // use orthographic projection (no depth perception)
    GLU.gluOrtho2D(gl, 0, width, 0, height);
}

И снова я попытался поиграть с настройками области просмотра безрезультатно:

    gl.glViewport(0, 0, width, height);
    gl.glViewport(0, 0, width, -height);
    gl.glViewport(0, height, width, 0);
    gl.glViewport(0, -height, width, 0);

Любые подсказки о том, как получить точку (0,0) в левом верхнем углу экрана? Спасибо!

Ответы [ 3 ]

8 голосов
/ 16 июля 2010

Как насчет:

glViewport(0, 0, width, height);
gluOrtho2D(0, width, height, 0);

Вызов glViewport устанавливает видовой экран только в координатах устройства.Это ваша оконная система.Вызовы glOrtho (gluOrtho2D) устанавливают отображение координат из мировых координат в координаты устройства.

См .:

4 голосов
/ 16 июля 2010

Как насчет glScalef(1f, -1f, 1f);?

1 голос
/ 19 декабря 2010
double fov = 60.f * 3.1415f/180.f;
float aspect = (float) width / (float) height;
float zNear = 0.01f;
float zFar = 3000.0f;
// cotangent
float f = (float) (Math.cos(fov*0.5f) / Math.sin(fov*0.5f));
float perspMtx[] = new float[16];

// columns first

for( int i=0; i<16; ++i )
 perspMtx[i] = 0.0f;

perspMtx[0] = f / aspect;
perspMtx[5] = -f; // flip Y? <- THIS IS YOUR ANSWER

perspMtx[10] = (zFar+zNear) / (zNear - zFar);
perspMtx[11] = -1.0f;
perspMtx[14] = 2.0f*(zFar*zNear) / (zNear - zFar);

gl.glMultMatrixf(perspMtx, 0);

это решило проблему для меня, должно быть похоже на матрицу ортогональной проекции

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...