用正交投影放大并在opengl es麻烦中漂浮

时间:2013-12-29 23:54:32

标签: android opengl-es floating-point-precision projection-matrix

我在放大我的应用时遇到了麻烦。我的应用程序的目的是在简单的2D视图中显示计划,因此它使用正交投影。由于数据本身和矩阵是浮点数,因此在放大时会导致大的变形,因为视口(宽度/高度)的比率变得与屏幕比率(以像素为单位)非常不同。

这是投影矩阵的计算:

Matrix.orthoM(thisProjectionMatrix, 0, viewportLeft.floatValue(), viewportRight.floatValue(), 
viewportBottom.floatValue(), viewportTop.floatValue(), viewportNear, viewportFar);

当我缩放时,下面的代码会计算viewportLeft,viewportRight,viewportBottom和viewportTop:

    public void zoomDrawing(int zoom_IN_OR_OUT)
    {
        double zoomfactor = 0.2;
        double deltaheight;
        double deltawidth;
        double screenratiopixels = (double) getScreenWidthPixels() / getScreenHeightPixels();

        double screenratiorealcoordsbeforezoom = (viewportRight - viewportLeft)/(viewportTop - viewportBottom);

        deltaheight = zoomfactor * ((viewportTop - viewportBottom)+(viewportRight - viewportLeft))/2;
        deltawidth = deltaheight * screenratiopixels;

        if (zoom_IN_OR_OUT == ZOOM_IN)
        {
            viewportLeft += deltawidth;
            viewportRight -= deltawidth;

            viewportBottom +=deltaheight;
            viewportTop -= deltaheight;
        }
        else if (zoom_IN_OR_OUT == ZOOM_OUT)
        {
            viewportLeft -= deltawidth;
            viewportRight += deltawidth;

            viewportBottom -=deltaheight;
            viewportTop += deltaheight;         
        }

        double screenratiorealcoordsafterzoom = (viewportRight - viewportLeft)/(viewportTop - viewportBottom);

        Log.v("zoom", "difference in ratio: " + "\t" + Double.toString(screenratiopixels-screenratiorealcoordsafterzoom ));}

我在最后一行计算的差异在我放大时变得越来越大。 有没有人有任何想法如何解决这个问题,或指向一个大方向?提前谢谢!

0 个答案:

没有答案