OpenGL ES 1.0 GLU正交投影未渲染基本三角形

问题描述 投票:0回答:1

我正在尝试使用android的OpenGL 1.0 ES在我的3d世界上创建2d图层。

我有一个三角形,当我使用3d透视图时,该三角形可以很好地渲染,但是当我尝试使用2d正交投影时,它不能渲染。以下代码正确显示了三角形。

    public void prepareLayerPerspective(GL10 gl)
    {
        gl.glMatrixMode(GL10.GL_PROJECTION);
        gl.glLoadIdentity();
        GLU.gluPerspective(gl,45, (float)(1080/1920f),0.1f, 700f);

        gl.glMatrixMode(GL10.GL_MODELVIEW);
        gl.glLoadIdentity();
    }

但是,当我尝试像这样将其设置为Orth投影时

    public void prepareLayerPerspective(GL10 gl)
    {
        gl.glMatrixMode(GL10.GL_PROJECTION);
        gl.glLoadIdentity();
        GLU.gluOrtho2D(gl,0f,500f,0f,700f);

        gl.glMatrixMode(GL10.GL_MODELVIEW);
        gl.glLoadIdentity();
    }

没有三角形。

这里是用于实际绘制三角形的代码:(但请记住,三角形确实在设置了透视平截头体的情况下可以正确渲染)

    public void drawFrame(GL10 gl)
    {
        super.drawFrame(gl);

        gl.glEnableClientState(GL10.GL_VERTEX_ARRAY);
        gl.glColor4f(1.0f, 0.0f, 0.0f, 0.0f);
        gl.glVertexPointer(3, GL10.GL_FLOAT,0,triangleVB);
        gl.glDrawArrays(GL10.GL_TRIANGLES,0,3);
    }

这里是Triangle类的构造函数。 (比例= 1.0f)

    public Triangle(float scale)
    {
        float triangleCoords[] = {
                -1.0f*scale, -1.0f*scale, 0,
                0.0f, 1.0f*scale, 0,
                1.0f*scale, -1.0f*scale, 0
        };

        ByteBuffer vbb = ByteBuffer.allocateDirect(triangleCoords.length*4);

        vbb.order(ByteOrder.nativeOrder());
        triangleVB = vbb.asFloatBuffer();
        triangleVB.put(triangleCoords);
        triangleVB.position(0);

        rotation = 0.0f;
    }
android opengl-es
1个回答
1
投票

正如我在评论中指出的那样,指定的视锥太大。

如果在(700,0,0)处有一个带有您指定的视锥的顶点,则该顶点将位于显示的左下角。

© www.soinside.com 2019 - 2024. All rights reserved.