アプリでのズームインに問題があります。私のアプリの目的は、単純な 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 ));}
最後の行で計算している違いは、拡大するとどんどん大きくなります。これを回避する方法や、一般的な方向性を教えてくれる人はいますか? 前もって感謝します!