2

glFrustumやり方や働き方が分からなくて困っていgluPerspectiveます。透視投影の概念は理解していますが、関数が期待どおりに動作していません。たとえば、錐台をこのように設定すると

glFrustumf(0, 10, 0, 10, 1, 100)

ポイントに長方形があります

 0,   0,  1,
 0,  10,  1,
10,  10,  1,
10,   0,  1

次に、長方形は画面の左半分で描画されます。そして、左半分が画面の外にある場合、縦半分も外にあると思います。しかし、それも起こりません。

私が見たどの例でも、射影行列の座標は次のように取られます

glFrustumf(-10, 10, -10, 10, 1, 100)

いずれにせよ、表示される部分は長方形の座標に依存する必要がありますよね?

更新:これは私が使用しているコードです

fb1.put(new float [] {
    0,   0, -1,
    0,  10, -1,
    10, 10, -1,
    10,  0, -1
});

fb2.put(new float [] {
    0, 1,
    0, 0,
    1, 0,
    1, 1
});

indices.put(new short[] {
     0, 1, 2, 2, 3, 0
});

public void onDrawFrame(GL10 gl) {
    gl.glViewport(0, 0, this.width, this.height);
    gl.glMatrixMode(GL10.GL_PROJECTION);
    gl.glLoadIdentity();
    gl.glFrustumf(0, 10, 0, 10, 1, 100);
    gl.glClear(GL10.GL_COLOR_BUFFER_BIT);

    gl.glEnableClientState(GL10.GL_VERTEX_ARRAY);
    gl.glEnableClientState(GL10.GL_TEXTURE_COORD_ARRAY);
    gl.glEnable(GL10.GL_TEXTURE_2D);
    gl.glVertexPointer(3, GL10.GL_FLOAT, 0, fb1);
    gl.glTexCoordPointer(2, GL10.GL_FLOAT, 0, fb2);
    gl.glDrawElements(GL10.GL_TRIANGLES, indices.limit(),
                    GL10.GL_UNSIGNED_SHORT, indices);
}

前者は私が得るものであり、後者は私が取得したいものです。また、画像の一部が垂直方向にも切り取られていることに気付きました。

実結果 期待される結果

4

1 に答える 1

0

のような非対称座標で視錐台を定義してglFrustumf(0, 10, 0, 10, 1, 100)も、ワールド内のオブジェクトの配置が異なるというわけではありません。したがって、おそらく対称に固執し、マトリックスを変更して長方形glFrustumf(-1.0, 1.0, -1.0, 1.0, 1, 100)移動する必要があります。MODELVIEW

于 2012-09-19T11:36:03.413 に答える