Как я могу создать сетку в центре, используя RajawaliVR
Как создать сетку с помощью Cardboard SDK для Android Studio и RajawaliVR 3D Renderer?
Я ищу во многих веб-сайтах и вики Rajawali на github, чтобы найти решение, которое бы держало трехмерный объект в центре обзора пользователей с идеальной ориентацией. Я наткнулся на ссылку в 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());
}
Затем вы можете вызвать метод centerObject из метода onRender или создать обработчик. (Метод on render вызывается каждый раз, когда рисуется новый кадр.)
@Override
public void onRender(long elapsedTime, double deltaTime) {
super.onRender(elapsedTime, deltaTime);
if(RETICLE != null)centerObject(RETICLE);
}
Размещение нулевой проверки перед вызовом centerObject() важно, потому что сцена может отображаться до создания объекта.
Ссылка Rajawali WIKI, приведенная выше, дала некоторые отличные подсказки, но проблема была закрыта. Я также прокомментировал там свое решение, чтобы помочь найти решение "под ключ" для следующего человека, столкнувшегося с той же проблемой.
Я надеюсь, что это помогает некоторым людям. Пожалуйста, публикуйте лучшие, улучшенные или другие решения, чтобы другие могли получить пользу.