的OpenGL-ES启用正交模式2D [英] OpenGL-ES Enabling orthographic mode 2D

查看:161
本文介绍了的OpenGL-ES启用正交模式2D的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!

问题描述

我想从有没有精灵大小差异,如果增加Z到远处。结果
但我有没有运气,但它仍然变得越来越小:

I'm trying to have no size difference from sprites, if you increase the z to far away.
however i have no luck, it still gets smaller:

||编辑||

我现在有这些方法

 public void onSurfaceCreated(GL10 gl, EGLConfig config) {
    float _width = 320f;
    float _height = 480f;
    gl.glDisable(GL10.GL_DEPTH_TEST);
    gl.glMatrixMode(GL10.GL_PROJECTION);
    gl.glLoadIdentity();
    gl.glOrthof(0, _width, 0, _height, 1, 100); 
    gl.glMatrixMode(GL10.GL_MODELVIEW); 
    gl.glLoadIdentity();  

    // Load textures ,
    gl.glEnable(GL10.GL_TEXTURE_2D);
    for (int a = 0; a < squares.length; a++) {
        squares[a].loadGLTexture(gl, context);
    }
}  

public void onDrawFrame(GL10 gl) {
    //Clear Screen And Depth Buffer
    gl.glClear(GL10.GL_COLOR_BUFFER_BIT | GL10.GL_DEPTH_BUFFER_BIT);    
    gl.glLoadIdentity();                    //Reset The Current Modelview Matrix
    gl.glTranslatef(.0f, 1.0f, locZ);
    squares[0].draw(gl);
    gl.glLoadIdentity();
    gl.glTranslatef(0.5f, 0.f, locZ);
    squares[1].draw(gl);        
    gl.glLoadIdentity();
    gl.glTranslatef(-0.5f, -0.5f, locZ);
    squares[2].draw(gl);
    gl.glLoadIdentity();
    gl.glTranslatef(-0.5f, -0.5f, locZ);
    squares[3].draw(gl);


    //change zvalues
    if(locZ >= 4.0f){
        speedZ *= -1.0f;
        locZ = 3.9f;
    }
    else if(locZ <= -4.0){
        speedZ *= -1.0f;
        locZ = -3.9f;
    }

    locZ += speedZ;

}  

我改变z值,并为此从相机的距离,并期望,因为我不想用透视(正交模式下),正方形的大小应保持不变。但他们没有。希望这可以帮助更多一些。

I'm changing the z-values, and therefor the distance from the 'camera', and expecting that since I don't want to use perspective(orthographic mode), the sizes of the squares should stay constant. But they don't. Hope this helps some more.

推荐答案

您有坏glOrtho参数:

You have bad glOrtho parameters:

gl.glOrthof(0, width, 0, height, 0.01f, 100.0f);

或者

gl.glOrthof(0, width, height, 0, 0.01f, 100.0f);

修改:忘记重置矩阵 - glLoadIdentity

public void onDrawFrame(GL10 gl) {
    gl.glClear(GL10.GL_COLOR_BUFFER_BIT | GL10.GL_DEPTH_BUFFER_BIT);    
    gl.glMatrixMode(GL10.GL_PROJECTION);
    gl.glLoadIdentity();
    /* SET NEW PROJECTION HERE: ortho or perspective */
    gl.glOrthof(0, _width, 0, _height, 0.001f, 100); 

    gl.glMatrixMode(GL10.GL_MODELVIEW);
    gl.glLoadIdentity();
    /* SET NEW MODELVIEW MATRIX( space transformation ) HERE and DRAW YOUR STUFF */

    //change zvalues
    if(locZ >= 99.0f){
        speedZ *= -1.0f;
        locZ = 99.0f;
    }
    else if(locZ <= 1.0){
        speedZ *= -1.0f;
        locZ = 1.0f;
    }

}

这些步骤都渲染2D,RESP之前完成。从3D投影转移到2D投影,没有创造纹理或任何物体时。不知道很多关于公共无效onSurfaceCreated ,但它似乎并没有被渲染循环的一部分。

These steps have to be done before rendering 2D, resp. moving from 3D projection to 2D projection, not when creating texture or any object. Don't know much about public void onSurfaceCreated, but it doesn't seem to be part of rendering loop.

这篇关于的OpenGL-ES启用正交模式2D的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!

查看全文
登录 关闭
扫码关注1秒登录
发送“验证码”获取 | 15天全站免登陆