Как изменить размер видимой области, чтобы показать все объекты / координаты? - PullRequest
0 голосов
/ 21 ноября 2011

Я перетаскиваю некоторые объекты в GLSurfaceArea (аналогично этому: http://www.droidnova.com/android-3d-game-tutorial-part-ii,328.html). Все работает нормально, но там показаны только точки, координаты которых находятся на интервале -1,0 - +1,0. Есть ли способ изменить размер видимой области, чтобы показать координаты, которые не находятся в этой области (например, (-2,0, 2,0, 0,0))?

1 Ответ

0 голосов
/ 22 ноября 2011

Вы хотите изменить усеченный вид .Вот как я это сделал в своем классе Android Renderer:

int viewportWidth = -1;
int viewportHeight = -1;
int zoom = 0.5f;
float nearPlane = 3.0f;
float farPlane = 7.0f;
float FOV = 60.0f

@Override
public void onSurfaceChanged(GL10 gl, int width, int height) {

    viewportWidth = width;
    viewportHeight = height;

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

    setProjectionMatrix(gl);

}

@Override
public void onSurfaceCreated(GL10 gl, EGLConfig config) {

    setProjectionMatrix(gl);

}

protected void setProjectionMatrix(GL10 gl){
    if(viewportWidth <0 || viewportHeight <0){
        gl.glMatrixMode(GL10.GL_PROJECTION);
        gl.glLoadIdentity();
        GLU.gluPerspective(gl, FOV*zoom, 1.0f, nearPlane, farPlane);        
    } else {
        float ratio = (float) viewportWidth / viewportHeight;
        gl.glMatrixMode(GL10.GL_PROJECTION);
        gl.glLoadIdentity();
        gl.glFrustumf(-ratio*zoom, ratio*zoom, -1*zoom, 1*zoom, nearPlane, farPlane);

    }
}

Как вы можете видеть, я в основном использую glFrustumf, на самом деле не использую GLU.gluPerspective, и я не использую glOrthof ввсе, но это не проблема.В зависимости от того, какой метод вы используете, вы получите разные результаты.Представьте, что у вас есть множество железнодорожных путей, начинающихся перед вами и уходящих от вас.Используя ортогональную проекцию, треки все равно будут находиться на одинаковом расстоянии друг от друга, когда они достигнут горизонта, как и перед вами.С перспективной проекцией они кажутся выпуклыми в некоторой отдаленной «точке схода».

Если вы используете мой код, как указано выше, попробуйте также изменить переменные ближней и дальней плоскостей, а также переменную масштабирования, чтобы увидеть влияние, которое она оказывает на вашу программу

...