Вы хотите изменить усеченный вид .Вот как я это сделал в своем классе 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 ввсе, но это не проблема.В зависимости от того, какой метод вы используете, вы получите разные результаты.Представьте, что у вас есть множество железнодорожных путей, начинающихся перед вами и уходящих от вас.Используя ортогональную проекцию, треки все равно будут находиться на одинаковом расстоянии друг от друга, когда они достигнут горизонта, как и перед вами.С перспективной проекцией они кажутся выпуклыми в некоторой отдаленной «точке схода».
Если вы используете мой код, как указано выше, попробуйте также изменить переменные ближней и дальней плоскостей, а также переменную масштабирования, чтобы увидеть влияние, которое она оказывает на вашу программу