2

我正在尝试设置渲染器,以便无论设备如何,视图都是一个简单的 2D 字段,屏幕顶部为 1.0f,底部为 -1.0f。我似乎无法完全正确,我一直在 onSurfaceChanged() 方法中使用以下方法并使用 gluPerspective 中的参数来达到预期的效果,但似乎无法做到完美。当然,有另一种方法可以解决这个问题,以实现我所追求的。我也一直在使用绘制的网格的 Z 值来尝试让它们匹配。

我再次尝试对其进行设置,以便将屏幕定义在 -1.0f 到 1.0 的范围内,这样如果你画一个边长等于 2.0f 的正方形,无论纵横比如何,它都会填满整个屏幕。我需要改变什么才能做到这一点?(包括我应该用于网格顶点的 Z 维度的值)

(不要被 gluperspective() 中的奇怪参数吓到,我一直在修补看看会发生什么。)

@Override
public void onSurfaceChanged(GL10 gl, int width, int height) {
        if(height == 0) {                       //Prevent A Divide By Zero By
            height = 1;                         //Making Height Equal One
        }

        gl.glViewport(0, 0, width, height);
        gl.glMatrixMode(GL10.GL_PROJECTION);
        gl.glLoadIdentity();
        GLU.gluPerspective(gl, 90.0f, (float) width / (float) height,
                    0.0000001f, 100.0f);
        gl.glMatrixMode(GL10.GL_MODELVIEW);
        gl.glLoadIdentity();
    }
4

2 回答 2

2

改为生成正交矩阵:

Matrix.orthoM(projectionMatrix,0,-yourdisplayWidth/2,+yourdisplayWidth/2,-yourdisplayHeight/2,+yourdisplayHeight/2,0f,2f);

因此,您可以将图像四边形放置在相机前面 1f 的距离处。您还必须将四边形设置为与像素一样大。这样你就可以渲染像素完美。

另见:https ://github.com/Chrise55/Llama3D

于 2011-12-25T13:32:39.830 回答
1

您可能想尝试使用glOrthoglFrustum而不是 glPerspective

于 2011-12-25T13:28:59.847 回答