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);
}
前者は私が得るものであり、後者は私が取得したいものです。また、画像の一部が垂直方向にも切り取られていることに気付きました。