我很难理解如何工作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);
}
第一个是我得到的,后者是我想要得到的。我还注意到,图像的一点点也被垂直剪裁了。