У меня проблемы с реализацией функции масштабирования в моем приложении.
В настоящее время масштабирование работает правильно, но я хочу переместить центр увеличения от центра поверхности к средней точке касания.
Вот части моего Renderer класса:
override fun onSurfaceChanged(gl: GL10?, width: Int, height: Int) {
this.width = width;
this.height = height;
GLES20.glViewport(0, 0, width, height)
aspectRatioGlobal = width.toFloat() / height.toFloat()
top = PORTRAIT_NEAR_LIMIT * Math.tan(60 * (Math.PI / 360.0)).toFloat()
bottom = -top;
left = bottom * aspectRatioGlobal
right = top * aspectRatioGlobal
Matrix.frustumM(projectionMatrix, 0, left, right, bottom, top, zNear, zFar)
....
override fun onDrawFrame(gl: GL10?) {
GLES20.glClear(GLES20.GL_COLOR_BUFFER_BIT)
Matrix.setIdentityM(intersectionUnprojectionMatrix, 0)
Matrix.setLookAtM(intersectionUnprojectionMatrix, 0, 0f, 0f, cameraZ, 0f, 0f, 0f, 0f, 1.0f, 0.0f)
if (!onImageLoaded) {
resizeImageOnStart(rectangle?.getImageParameters(context)!!)
displayImage()
onImageLoaded = true
} else {
Matrix.setIdentityM(modelViewMatrix, 0)
Matrix.setLookAtM(modelViewMatrix, 0, 0f, 0f, cameraZ, 0f, 0f, 0f, 0f, 1.0f, 0.0f)
// Matrix.translateM(modelViewMatrix, 0, cameraX, cameraY, 0f)
Matrix.scaleM(modelViewMatrix, 0, currentImageWidth, currentImageHeight, 1f)
Matrix.scaleM(modelViewMatrix, 0, scaleFactor, scaleFactor, 1f)
// Matrix.translateM(modelViewMatrix, 0, -cameraX, -cameraY, 0f)
Matrix.multiplyMM(resultMatrix, 0, projectionMatrix, 0, modelViewMatrix, 0)
}
rectangle?.draw(resultMatrix, context)
....
fun onScale(detector: ScaleGestureDetector) {
var center = getWorldCoordinatesByScreenCoordinates(detector.focusX, detector.focusY)
cameraX = center.x
cameraY = center.y
this.scaleFactor = detector.scaleFactor
Текущая логика:
- ScaleGestureDetector ловит событие и отправляет егодля Renderer
- Renderer устанавливает scaleFactor и вычисляет мировые координаты сенсорного центра ( getWorldCoordinatesByScreenCoordinates работает правильно)
- onDrawFrame отображает измененные данные.
Основная проблема в том, что я не могу понять, как правильно трансформировать объект.Я пытался перевести объект, масштабировать его и перевести обратно (строки перевода теперь прокомментированы), но это не работает.Пожалуйста, помогите!