如何使用Cardboard JavaSDK锚定对象?

内容来源于 Stack Overflow,并遵循CC BY-SA 3.0许可协议进行翻译与使用

  • 回答 (1)
  • 关注 (0)
  • 查看 (57)

我目前正在开发一个使用Cardboard SDK的项目

public void onNewFrame(HeadTransform headTransform) {
    float[] headView = new float[16];
    headTransform.getHeadView(headView, 0);
}

我试着这样做:

private float[] mHeadView = new float[16];

public void onNewFrame(HeadTransform headTransform) {
    headTransform.getHeadView(mHeadView, 0);
}

public void onDrawEye(Eye eye) {
    float[] mvpMatrix = new float[16];
    float[] modelMatrix = new float[16];
    float[] mvMatrix = new float[16];
    float[] camera = new float[16];
    Matrix.setLookAt(camera, 0, 0, 0, -2, 0, 0, -1, 0, 1, 0);
    Matrix.multiplyMM(modelMatrix, 0, mHeadView, 0, camera, 0);
    Matrix.multiplyMM(mvMatrix, 0, eye.getEyeView(), 0, modelMatrix, 0);
    Matrix.multiplyMM(mvpMatrix, 0, eye.getEyePerspective(0.1, 100), 0, mvMatrix, 0);

    // Pass the mvpMatrix and vertices buffer to the vertex shader.
}

这是我的顶点着色器:

uniform mat4 uMatrix;
attribute vec4 vPosition;
attribute vec4 vColors;
varying vec4 color;
void main() {
    color = vColors;
    gl_Position = uMatrix * vPosition;
}
提问于
用户回答回答于

如果想要头部锁定对象,则需要在头部空间中定义它,而不是在世界空间中定义它,当前的代码定义了世界空间中的十字准线。该mHeadView转换从世界空间映射到当前的头部空间,占当期头转动。你不需要乘以它,它只需要世界上锁定的对象。

扫码关注云+社区

领取腾讯云代金券

玩转腾讯云 有奖征文活动