Как я могу создать сетку в центре, используя 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, приведенная выше, дала некоторые отличные подсказки, но проблема была закрыта. Я также прокомментировал там свое решение, чтобы помочь найти решение "под ключ" для следующего человека, столкнувшегося с той же проблемой.

Я надеюсь, что это помогает некоторым людям. Пожалуйста, публикуйте лучшие, улучшенные или другие решения, чтобы другие могли получить пользу.

0 ответов

Другие вопросы по тегам