【问题标题】:Setting up an OpenGL ES renderer for 2D?为 2D 设置 OpenGL ES 渲染器?
【发布时间】:2011-12-25 13:06:43
【问题描述】:

我正在尝试设置渲染器,以便无论设备如何,视图都是一个简单的 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();
    }

【问题讨论】:

    标签: java android opengl-es perspective renderer


    【解决方案1】:

    改为生成正交矩阵:

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

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

    另请参阅:https://github.com/Chrise55/Llama3D

    【讨论】:

      【解决方案2】:

      您可能想尝试使用 glOrthoglFrustum 代替 glPerspective

      【讨论】:

        猜你喜欢
        • 2012-05-14
        • 1970-01-01
        • 1970-01-01
        • 2010-12-23
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2012-01-18
        • 1970-01-01
        相关资源
        最近更新 更多