삼각형 (안드로이드)을 만들었으며 아래에 주어진 꼭지점 크기, 뷰포트 크기 & 투영 투영 크기를 지정했습니다.뷰포트 및 평행 투영에 대한 질문
- glsurfaceview.getWidth() = 320
- glsurfaceview.getHeight() = 480
감안할 :
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이고, 볼 아래는 에뮬레이터에서 수신 한 출력의 스냅 샷입니다.
내가 이해할 수없는 것은 화면의 절반만으로 뷰포트를 설정했으며 삼각형의 절반 만 볼 것으로 예상했습니다 (뷰포트 영역을 초과하는 것이 잘리지 않으면 안됩니다). 난 그냥이 문제에 대한 이유를 알아낼 수
내가 기대 한 사진이 아래 감안할. 이걸 좀 도와 주실 래요? 나는이 설명을 제공 할 수있는 컴퓨터 그래픽의 측면에서 '뷰포트'의 정의를 찾을 수 없습니다 동안 아래
는
/** 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");
}
명확히하기 위해 '뷰포트'의 기능을 묻고 있습니까? – Kerry
안녕하세요, 내 이해하기에, 뷰포트는 우리가 화면 내에서 지정하는 그림 영역입니다. 그래서 제 질문은 뷰포트를 화면 크기의 절반으로 설정하면 (정확한 스펙에 대한 원래의 질문을 참조하십시오), 뷰포트를 뷰포트 내부에 그려 놓은 후에 조작 할 것으로 예상됩니다. 그래서이 경우, 내가 그린 삼각형이 뷰포트를 오버 슛합니다. 나는 그 질문에 내가 분명하기를 희망한다. OpenGL에서 시작한 나는 순진 할 수도 있습니다. 왜 이런 일이 일어 났는지 말해 줄 수 있다면, 내가 찾는 답이 될 것입니다. – Raj