首页
学习
活动
专区
工具
TVP
发布
社区首页 >问答首页 >如何使用Cardboard Java SDK锚定对象

如何使用Cardboard Java SDK锚定对象
EN

Stack Overflow用户
提问于 2018-08-22 16:42:55
回答 1查看 90关注 0票数 0

我目前正在做一个使用Cardboard SDK的项目,我现在比较震惊。

我想在视线的中心显示一个十字,就像在FPS中一样,当用户移动他的头时,它保持在视线的中心。

我知道在这段代码中:

代码语言:javascript
复制
public void onNewFrame(HeadTransform headTransform) {
    float[] headView = new float[16];
    headTransform.getHeadView(headView, 0);
}

headView参数将包含头部的转换矩阵(旋转+平移) (这要归功于SO:Android VR Toolkit - HeadTransform getHeadView matrix representation )。

我试着这样做:

代码语言:javascript
复制
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.
}

这是我的顶点着色器:

代码语言:javascript
复制
uniform mat4 uMatrix;
attribute vec4 vPosition;
attribute vec4 vColors;
varying vec4 color;
void main() {
    color = vColors;
    gl_Position = uMatrix * vPosition;
}

但是十字架仍然固定在它的初始位置,并不跟随头部。

我是不是漏掉了什么?我怎样才能让我的十字架跟随我的头,并保持在视线的中心?

提前感谢您的回答:)

(PS :我不想使用Unity,因为这个项目只能使用Java SDK)。

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2018-08-28 06:33:19

tl;dr:对于头部锁定的十字准线,跳过mHeadView矩阵的乘法。

如果需要头部锁定对象,则需要在头部空间中定义它,而不是在世界空间中。您当前的代码定义了世界空间中的十字准线。mHeadView变换从世界空间映射到当前头部空间,并考虑当前头部旋转。你不需要乘以这个值,它只对完全锁定的对象是必需的。

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/51962935

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档