Я пытаюсь понять Google ARCore API и подтолкнул их образец проекта (java_arcore_hello_ar
) в GitHub.
В этом примере при развертывании приложения на Android обнаруживаются любые горизонтальные поверхности / плоскости. Если вы нажмете на обнаруженный самолет, «Энди» робот Андрид будет отображаться в том месте, которое вы коснетесь. Довольно круто.
Я пытаюсь найти где в коде:
- Обнаруживается горизонтальная поверхность / плоскость; а также
- Там, где живет логика, чтобы правильно изменить размер и переориентировать Энди (я предполагаю, что если точка, которую вы нажимаете, находится дальше от камеры, он будет отображаться маленьким и т. Д.)
Я верю, что при обнаружении самолетов платформа Android вызывает метод onSurfaceCreated
:
@Override
public void onSurfaceCreated(GL10 gl, EGLConfig config) {
GLES20.glClearColor(0.1f, 0.1f, 0.1f, 1.0f);
// Create the texture and pass it to ARCore session to be filled during update().
mBackgroundRenderer.createOnGlThread(/*context=*/this);
mSession.setCameraTextureName(mBackgroundRenderer.getTextureId());
// Prepare the other rendering objects.
try {
mVirtualObject.createOnGlThread(/*context=*/this, "andy.obj", "andy.png");
mVirtualObject.setMaterialProperties(0.0f, 3.5f, 1.0f, 6.0f);
mVirtualObjectShadow.createOnGlThread(/*context=*/this,
"andy_shadow.obj", "andy_shadow.png");
mVirtualObjectShadow.setBlendMode(BlendMode.Shadow);
mVirtualObjectShadow.setMaterialProperties(1.0f, 0.0f, 0.0f, 1.0f);
} catch (IOException e) {
Log.e(TAG, "Failed to read obj file");
}
try {
mPlaneRenderer.createOnGlThread(/*context=*/this, "trigrid.png");
} catch (IOException e) {
Log.e(TAG, "Failed to read plane texture");
}
mPointCloud.createOnGlThread(/*context=*/this);
}
Однако этот код выглядит, предполагается, что пользователь уже коснулся поверхности. Я не вижу if
-условия, которое в основном говорит: «Визуализировать Энди , если пользователь нажал на обнаруженную плоскость / поверхность.». Может ли кто-нибудь заметить, где это может происходить?