Мне нравится знать, как правильно увеличить OpenGL ES 2.0
. Я успешно нарисовал модель, но она довольно маленькая, и я не могу увеличить эту модель. Что мне нравится, так это масштабирование "сквозь" этой модели.
Модель представляет собой здание с разными этажами - я хотел бы увеличить каждую комнату на каждом этаже. Но либо объект исчезает из-за усеченной видимости, либо я не могу подобраться очень близко к этому объекту.
Я использую жест масштабирования и касания и получаю значение «масштаб» — что мне теперь делать с этим значением?
Что я уже пробовал:
Изменение расстояния в ближней и дальней плоскости и изменение значения eyeZ в Matrix.setLookAtM(....), но я достигаю только уменьшения масштаба... Через некоторое время он исчезает при увеличении... Итак, я Я не могу увеличить некоторые специальные части ("ЭТО" далеко....)
Как этого добиться?
Таким образом, самая большая проблема — это ближняя плоскость в сочетании с масштабированием через eyeZ-Value. Это просто не работает. Если я увеличиваю масштаб, объект исчезает из-за ближней плоскости. Но я не вижу в этом никакой логики.
В настоящее время я использую:
/*
* Set the camera position (View matrix)
*/
Matrix.setLookAtM(mViewMatrix, offset, eyeX, eyeY, eyeZ / mZoomLevel,
centerX, centerY, centerZ, upX, upY, upZ);
где mZoomLevel — коэффициент, который я получаю через onTouch-Zooming.
Все мои матричные операции показаны здесь:
@Override
public void onDrawFrame(GL10 unused) {
LoggerHelper.calculateFPS();
/*
* Draw background color
*/
GLES20.glClear(GLES20.GL_COLOR_BUFFER_BIT | GLES20.GL_DEPTH_BUFFER_BIT);
/*
* scale model down to smaller values
*/
Matrix.setIdentityM(mModelMatrix, 0);
Matrix.scaleM(mModelMatrix, 0, model3d.getRatio() * scaleFactor,
model3d.getRatio() * scaleFactor, model3d.getRatio()
* scaleFactor);
/*
* rotate and translate model in dependence to the user input
*/
Matrix.translateM(mModelMatrix, 0, translateX, translateY, translateZ);
Helper.rotateModel(mModelMatrix, rotationX, rotationY, rotationZ, true,
model3d.getWidth(), model3d.getLength(), model3d.getHeight());
/*
* Set the camera position (View matrix)
*/
Matrix.setLookAtM(mViewMatrix, offset, eyeX, eyeY, eyeZ / mZoomLevel,
centerX, centerY, centerZ, upX, upY, upZ);
/*
* combine the model with the view matrix
*/
Matrix.multiplyMM(mMVMatrix, 0, mViewMatrix, 0, mModelMatrix, 0);
/*
* this projection matrix is applied to object coordinates in the
* onDrawFrame() method
*/
Matrix.frustumM(mProjectionMatrix, 0, -ratio, ratio, 1, -1,
nearPlaneDistance, farPlaneDistance);
/*
* Calculate the projection and view transformation
*/
float[] mMVPMatrix = new float[16];
Matrix.multiplyMM(mMVPMatrix, 0, mProjectionMatrix, 0, mMVMatrix, 0);
/*
* all the drawing stuff inside the model-object (otherwise
* translation/rotation wouldn't affect every object)
*/
model3d.draw(mMVPMatrix);
}
Любые важные переменные:
private float nearPlaneDistance = 1f;
private float farPlaneDistance = 200f;
private float eyeZ = -1;
Что я имею:
Что мне нужно: