Matrix 矩阵转换OpenGL ES 2.0
我想知道如何在自定义GL渲染器中使用此矩阵来实现收缩缩放。我不断收到一个错误,告诉我我无法设置opengl.Matrix,它是float[16]类型,我在下面的活动中更改了Matrix对象。传递graphics.matrix以使其正确更新视图的正确方法是什么?作为一种解决方法,我将newDist值传递给渲染器,但是每次我用两个手指触摸屏幕时,它都会重置eyeZ值,因此我认为我确实需要让这个矩阵工作,以便它保存缩放值Matrix 矩阵转换OpenGL ES 2.0,matrix,opengl-es,projection,Matrix,Opengl Es,Projection,我想知道如何在自定义GL渲染器中使用此矩阵来实现收缩缩放。我不断收到一个错误,告诉我我无法设置opengl.Matrix,它是float[16]类型,我在下面的活动中更改了Matrix对象。传递graphics.matrix以使其正确更新视图的正确方法是什么?作为一种解决方法,我将newDist值传递给渲染器,但是每次我用两个手指触摸屏幕时,它都会重置eyeZ值,因此我认为我确实需要让这个矩阵工作,以便它保存缩放值 @Override public boolean onTouch(View v,
@Override public boolean onTouch(View v, MotionEvent event) {
switch (event.getAction() & MotionEvent.ACTION_MASK) {
case MotionEvent.ACTION_DOWN:
savedMatrix.set(matrix);
start.set(event.getX(), event.getY());
Log.d(TAG, "mode=DRAG");
break;
case MotionEvent.ACTION_POINTER_DOWN:
oldDist = spacing(event);
Log.d(TAG, "oldDist=" + oldDist);
if (oldDist > 10f) {
savedMatrix.set(matrix);
midPoint(mid, event);
mode = ZOOM;
Log.d(TAG, "mode=ZOOM");
}
break;
case MotionEvent.ACTION_UP:
case MotionEvent.ACTION_POINTER_UP:
mode = NONE;
Log.d(TAG, "mode=NONE");
break;
case MotionEvent.ACTION_MOVE:
if (mode == ZOOM) {
final float newDist = spacing(event);
Log.d(TAG, "newDist=" + newDist);
if (newDist > 10f) {
matrix.set(savedMatrix);
float scale = newDist / oldDist;
matrix.postScale(scale, scale, mid.x, mid.y);
mGLSurfaceView.queueEvent(new Runnable() {
@Override
public void run() {
mGLSurfaceView.setMyMatrix(newDist);
Log.d(TAG, "runnable exists");
}
});
}
}
break;
}
return true; // indicate event was handled
}