Я создал треугольник (в Android), и ниже приведена спецификация размера вершин, размера области просмотра и размера параллельной проекции.
vertices.put(new float[] { 0.0f, 0.0f,
319.0f, 0.0f,
160.0f, 479.0f });
gl10.glViewport(0, 0, 160, 480);
gl10.glOrthof(0, 160, 0, 480, 1, -1);
Фактическое разрешение экрана составляет 320 * 480,см .:
- glsurfaceview.getWidth () = 320
- glsurfaceview.getHeight () = 480
Ниже приведен снимок полученного мной результатав эмуляторе
Что я не понимаю, так это то, что я установил область просмотра только на половину экрана, и я ожидал увидеть только половину треугольника (поверьте, все, что превышает область области просмотрадолжны быть обрезаны).Ниже приводится картина, которую я ожидал,
Я просто не мог понять причину такого поведения.Может ли кто-нибудь помочь мне в этом.
Ниже приведен фактический код, над которым я работаю,
/** Called when the activity is first created. */
@Override
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
getWindow().setFlags(WindowManager.LayoutParams.FLAG_FULLSCREEN,
WindowManager.LayoutParams.FLAG_FULLSCREEN);
rand = new Random(); //Random number generator
glsurfaceview = new GLSurfaceView(this);
glsurfaceview.setRenderer(this);
setContentView(glsurfaceview);
}
@Override
public void onSurfaceCreated(GL10 gl10, EGLConfig eglconfig) {
Log.v("#MYAPP", "MyCanonActivity : Inside onSurfaceCreated");
byteBuffer = ByteBuffer.allocateDirect(3 * 2 * 4);
byteBuffer.order(ByteOrder.nativeOrder());
vertices = byteBuffer.asFloatBuffer();
vertices.put(new float[] { 0.0f, 0.0f,
319.0f, 0.0f,
160.0f, 479.0f });
vertices.flip();
}
@Override
public void onDrawFrame(GL10 gl10) {
gl10.glViewport(0, 0, 160, 480);
gl10.glClearColor(0,0,0,1);
gl10.glClear(GL10.GL_COLOR_BUFFER_BIT);
gl10.glMatrixMode(GL10.GL_PROJECTION);
gl10.glLoadIdentity();
gl10.glOrthof(0, 160, 0, 480, 1, -1);
gl10.glEnableClientState(GL10.GL_VERTEX_ARRAY);
gl10.glVertexPointer( 2, GL10.GL_FLOAT, 0, vertices);
gl10.glDrawArrays(GL10.GL_TRIANGLES, 0, 3);
}
@Override
public void onSurfaceChanged(GL10 gl10, int width, int height) {
Log.v("#MYAPP", "MyCanonActivity : Inside onSurfaceChanged");
}
@Override
public void onResume() {
super.onResume();
glsurfaceview.onResume(); //Start rendering thread also
Log.v("#MYAPP", "MyCanonActivity : onResume");
}
@Override
public void onPause() {
super.onPause();
glsurfaceview.onPause();
Log.v("#MYAPP", "MyCanonActivity : onPause");
}