私は三角形(アンドロイド)を作成しました。頂点サイズの指定は、ビューポートサイズ&平行投影サイズです。ビューポートと平行投影の作業に関する質問
- 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