我在放大我的应用时遇到了麻烦。我的应用程序的目的是在简单的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 ));}
我在最后一行计算的差异在我放大时变得越来越大。 有没有人有任何想法如何解决这个问题,或指向一个大方向?提前谢谢!