0

アプリでのズームインに問題があります。私のアプリの目的は、単純な 2D ビューで平面図を表示することなので、正投影を使用します。データ自体と行列は float であるため、ビューポートの比率 (幅/高さ) がピクセル単位の画面比率とは大きく異なるため、ズームインすると大きな変形が発生します。

射影行列の計算は次のとおりです。

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 ));}

最後の行で計算している違いは、拡大するとどんどん大きくなります。これを回避する方法や、一般的な方向性を教えてくれる人はいますか? 前もって感謝します!

4

0 に答える 0