Pracuję z Androidem i OpenGL ES 2.0 i mam problem, którego naprawdę nie mogę sformułować na stałe pytanie. Na obrazku, http://i.imgur.com/XuCHF.png, zasadniczo mam kształt reprezentujący statek w środku, a kiedy jest on przesunięty na bok, zostaje rozciągnięty w kierunku punktu zbiegu. To, co chcę osiągnąć, to sprawić, by statek utrzymywał większość swojego kształtu, gdy jest poruszany. Sądzę, że może to wynikać z moich matryc, ale każdy zasób, który wyszukałem, wydaje się używać tej samej metody.Problemy z aparatami OpenGL ES 2.0
//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);
shaderów są bardzo proste, a także:
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);"
+ "}";
jakieś przemyślenia/wgląd jest mile widziana.
Dzięki.
Dziękuję za to! Waliłem w głowę, próbując dowiedzieć się, jak zmienić perspektywę w znaczący sposób, dopóki nie spotkałem się z tą odpowiedzią. Brakowało mi logiki pola widzenia. Miałem chwilę Eureki, kiedy zobaczyłem twoją odpowiedź. –