Sto lavorando con Android e OpenGL ES 2.0 e sto riscontrando un problema che non riesco a formulare in una domanda solida. Nell'immagine, http://i.imgur.com/XuCHF.png, ho fondamentalmente una forma per rappresentare una nave nel mezzo e quando viene spostata lateralmente viene allungata verso il punto di fuga. Quello che voglio ottenere è che la nave mantenga la maggior parte della sua forma quando viene spostata. Credo che potrebbe essere dovuto alle mie matrici, ma ogni risorsa che ho guardato sembra utilizzare lo stesso metodo.Problemi con OpenGL ES 2.0 Camera
//Setting up the projection matrix
final float ratio = (float) width/height;
final float left = -ratio;
final float right = ratio;
final float bottom = -1.0f;
final float top = 1.0f;
final float near = 1.0f;
final float far = 1000.0f;
Matrix.frustumM(projection_matrix, 0, left, right, bottom, top, near, far);
//Setting the view matrix
Matrix.setLookAtM(view_matrix, 0, 0.0f, 1.0f, 0.0f, 0.0f, 1.0f, -1.0f, 0.0f, 1.0f, 0.0f);
//Setting the model matrix
Matrix.setIdentityM(model_matrix, 0);
Matrix.translateM(model_matrix, 0, 2f, 0f, 0f);
//Setting the model-view-projection matrix
Matrix.multiplyMM(mvp_matrix, 0, view_matrix, 0, model_matrix, 0);
Matrix.multiplyMM(mvp_matrix, 0, GL.projection_matrix, 0, mvp_matrix, 0);
GLES20.glUniformMatrix4fv(mvp_matrix_location, 1, false, mvp_matrix, 0);
Gli shader sono molto semplici così:
private final static String vertex_shader =
"uniform mat4 u_mvp_matrix;"
+ "attribute vec4 a_position;"
+ "void main()"
+ "{"
+ " gl_Position = u_mvp_matrix * a_position;"
+ "}";
private final static String fragment_shader =
"precision mediump float;"
+ "void main()"
+ "{"
+ " gl_FragColor = vec4(0.0, 0.0, 1.0, 1.0);"
+ "}";
Ogni pensiero/visione è molto apprezzato.
Grazie.
Grazie per questo! Ho battuto la testa cercando di capire come cambiare la prospettiva in modo significativo, fino a quando ho incontrato questa risposta. Mi mancava la logica del campo visivo. Ho avuto un momento Eureka quando ho visto la tua risposta. –