在OpenGL(-ES)中设置宽高比,获得奇怪的值

时间:2011-10-05 17:47:58

标签: java android math opengl-es

我在下面的代码中得到了一些奇怪的宽度/高度值,导致图片拉伸,或根本没有图片。

public void onSurfaceChanged(GL10 gl, int w, int h) {

    screenHeight = h;  // actual height in pixels
    screenWidth = w;   // actual width in pixels
    worldWidth = 20;   // width of the projection (20 units)
    worldHeight = (int) (worldWidth * (screenHeight / screenWidth));  

    gl.glMatrixMode(GL10.GL_PROJECTION);
    gl.glViewport(0, 0, screenWidth, screenHeight); //new viewport
    gl.glLoadIdentity();
    GLU.gluOrtho2D(gl, 0, worldWidth, 0, worldHeight); set the 2D projection  

所以我记录了变量,这些变量来自纵向模式:

screenHeight = 455  
screenWidth = 320  
worldHeight = 20  
worldWidth = 20    

(worldWidth * (screenHeight / screenWidth)应该为worldHeight提供20 * 455/320 = 28。

在横向模式下,它变得更加陌生,其中worldHeight突然等于0。

我做错了什么?

2 个答案:

答案 0 :(得分:4)

我猜,screenHeightscreenWidth都是int?在这种情况下,除法将是整数除法,从而产生舍入/截断的整数,因此如果比率<1则为0。将除法的至少一个操作数转换为浮点数以执行实际浮点除法:

worldHeight = (int) (worldWidth * ((float)screenHeight / (float)screenWidth));

答案 1 :(得分:0)