33

Buenas! Estoy desarrollando una app de realidad virtual usando el VR SDK de google para android, el problema es que yo tengo un objeto que muestro en mi aplicación, pero dicho objeto se encuentra estático, necesito saber como manejar las funciones que aporta el objeto HeadTransform dentro del metodo onNewFrame para conseguir que mi objeto siempre se muestre en el centro de la pantalla. Gracias de antemano. Un saludo !

Aqui obtengo el quaternion que produce la rotación de la cabeza:

public void onNewFrame(HeadTransform headTransform) {
    // Build the camera matrix and apply it to the ModelView.
    Matrix.setLookAtM(camera, 0, 0.0f, 0.0f, CAMERA_Z, 0.0f, 0.0f, 0.0f, 0.0f, 1.0f, 0.0f);

    headTransform.getHeadView(headView, 0);

    headTransform.getQuaternion(headRotation, 0);

    gvrAudioEngine.setHeadRotation(
            headRotation[0], headRotation[1], headRotation[2], headRotation[3]);
    // Regular update call to GVR audio engine.
    gvrAudioEngine.update();

}

Dentro del metodo onDrawEye es donde debo aplicar la rotación al objeto para que se mueva en consonancia con la dirección de vision de la cámara, pero no se cómo hacerlo:

public void onDrawEye(Eye eye) {
    GLES20.glEnable(GLES20.GL_DEPTH_TEST);
    GLES20.glClear(GLES20.GL_COLOR_BUFFER_BIT | GLES20.GL_DEPTH_BUFFER_BIT);

    checkGLError("colorParam");

    // Apply the eye transformation to the camera.
    Matrix.multiplyMM(view, 0, eye.getEyeView(), 0, camera, 0);

    // Set the position of the light
    Matrix.multiplyMV(lightPosInEyeSpace, 0, view, 0, LIGHT_POS_IN_WORLD_SPACE, 0);

    // Build the ModelView and ModelViewProjection matrices
    float[] perspective = eye.getPerspective(Z_NEAR, Z_FAR);

    --> Aplicar rotacion al objeto aqui <--

    Matrix.multiplyMM(modelView, 0, view, 0, model, 0);
    Matrix.multiplyMM(modelViewProjection, 0, perspective, 0, modelView, 0);
    drawObject();
}
rnrneverdies
  • 16,491
  • 3
  • 49
  • 79
  • 5
    Hola, antes que nada bienvenido, podrias por favor agregar tu codigo ya que si tu pregunta no muestra ningun esfuerzo tendra que ser cerrada. – Gemasoft Jun 06 '16 at 21:40
  • 1
    Hecho! Perdon por las molestias – Manuel Navas Damas Jun 06 '16 at 22:13
  • 4
    ¿Lograste hacerlo funcionar? – fredyfx Mar 26 '18 at 22:28
  • 1
    La idea sería que "flote" siempre en donde esté apuntando la pantalla o entendí mal? De ser así, puedes tomar el vector de la cámara y recalcular la posición del objeto en base a eso. Porque en ese caso el objeto se estaría moviendo por el mundo para quedar siempre en el centro del viewport. – Logain Oct 04 '21 at 23:59

0 Answers0