Android 如何使用RajawaliVR在中心视图中创建十字线

Android 如何使用RajawaliVR在中心视图中创建十字线,android,sdk,virtual-reality,rajawalivr,Android,Sdk,Virtual Reality,Rajawalivr,如何使用Cardward SDK for Android Studio和RajawaliVR 3D渲染器创建十字线 我在github上搜索了许多网站和Rajawali wiki,试图找到一个解决方案,让3D对象保持在用户视图的中心,并具有完美的方向感。我在维基上偶然发现了一个链接,但它并没有提供一个与拉贾瓦利夫合作的解决方案。 经过反复试验,我想出了这个解决办法 首先在渲染器中创建一个3D对象 Sphere RETICLE = new Sphere(1, 50, 32); Materi

如何使用Cardward SDK for Android Studio和RajawaliVR 3D渲染器创建十字线

我在github上搜索了许多网站和Rajawali wiki,试图找到一个解决方案,让3D对象保持在用户视图的中心,并具有完美的方向感。我在维基上偶然发现了一个链接,但它并没有提供一个与拉贾瓦利夫合作的解决方案。
经过反复试验,我想出了这个解决办法

首先在渲染器中创建一个3D对象

Sphere RETICLE = new Sphere(1, 50, 32);

    Material sphereMaterial = new Material();
    sphereMaterial.enableLighting(true);
    sphereMaterial.setDiffuseMethod(new DiffuseMethod.Lambert());
    RETICLE.setMaterial(sphereMaterial);

    try{
        sphereMaterial.addTexture(tExture);
    } catch (ATexture.TextureException error){
        Log.d("DEBUG", "TEXTURE ERROR");
    }
接下来,需要将以下代码放在渲染器类中

public void centerObject(Object3D obj){
    float[] newPosition4 = new float[4];
    float[] posVec4 = {0, 0, -3, 1.0f};
    float[] HeadViewMatrix_inv = new float[16];
    Matrix4 HeadViewMatrix4 = new Matrix4();
    HeadViewMatrix4.setAll(mHeadViewMatrix);
    HeadViewMatrix4 = HeadViewMatrix4.inverse();
    HeadViewMatrix4.toFloatArray(HeadViewMatrix_inv);
    Matrix.multiplyMV(newPosition4, 0, HeadViewMatrix_inv, 0, posVec4, 0);
    obj.setPosition(newPosition4[0], newPosition4[1], newPosition4[2]);

    obj.setLookAt(getCurrentCamera().getPosition());
}
然后可以从onRender方法或fram处理程序调用centerObject方法。(每次绘制新帧时都会调用on render方法。)

在调用centerObject()之前放置null检查非常重要,因为场景可能会在创建对象之前渲染

上面的Rajawali维基链接提供了一些很好的线索,但问题已经解决。我也在那里评论了我的解决方案,以帮助为下一个面临同样问题的人提供一个交钥匙解决方案


我希望这本书能帮助一些人。请发布更好的、改进的或其他解决方案,以使其他人受益。

您好,谢谢您的解决方案,但我有一个问题。你左眼的注视点是否一直在晃动,而右眼没有?请看我的问题:
@Override
public void onRender(long elapsedTime, double deltaTime) {
    super.onRender(elapsedTime, deltaTime);
    if(RETICLE != null)centerObject(RETICLE);
}