如何使用Cardboard SDK for Android Studio和RajawaliVR 3D渲染器创建十字线?
我在github上搜索了许多网站和Rajawali wiki,试图找到一种解决方案,将3D对象保持在用户视图的中心,并具有完美的方向。我偶然发现了WIKI上的一个链接,但它没有提供与RajawaliVR一起使用的解决方案。
经过一些试验和错误,我想出了这个解决方案
首先在渲染器中创建一个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方法调用centerObject方法或者使用处理程序。 (每次绘制新帧时都会调用on render方法。)
@Override
public void onRender(long elapsedTime, double deltaTime) {
super.onRender(elapsedTime, deltaTime);
if(RETICLE != null)centerObject(RETICLE);
}
在调用centerObject()之前放置一个空检查很重要,因为场景可能会在创建对象之前呈现。
上面的Rajawali WIKI链接提供了一些很好的线索,但问题已经结束。我在那里也做了评论,我的解决方案是帮助为面临同样问题的下一个人提供一个交钥匙解决方案。
我希望帮助一些人。请发布更好,改进或其他解决方案,以便其他人可以受益。