Wikitude SDK - маркеры не отображаются в виде камеры

Я создал простое приложение по примеру POI в Wikitude. Когда я запускаю приложение, в поле зрения камеры не рисуются маркеры. У меня такая же проблема с образцом приложения POI. Я поместил несколько предупреждений JS в файл js внутри функций «onLocationChangedFn» и «createMarkerAtLocation», и предупреждения отображаются правильно (что, надеюсь, означает, что функции javascript вызываются правильно. Но все же маркер не отображается в геолокация.

Я вижу следующее в logcat в Eclipse:

09-21 11:32:50.809: D/dalvikvm(6108): GC_FOR_ALLOC freed 1255K, 29% free 8947K/12551K, paused 18ms, total 19ms

09-21 11:32:50.839: D/dalvikvm(6108): GC_CONCURRENT freed 15K, 24% free 9561K/12551K, paused 12ms+3ms, total 33ms

09-21 11:32:50.849: E/deviceSupported(6108): true

09-21 11:32:50.849: I/ArchitectWebView(6108): ARchitect Build: d4452f2

09-21 11:32:50.919: D/dalvikvm(6108): GC_CONCURRENT freed 561K, 22% free 9826K/12551K, paused 12ms+2ms, total 33ms

09-21 11:32:50.919: D/dalvikvm(6108): WAIT_FOR_CONCURRENT_GC blocked 9ms

09-21 11:32:50.939: D/dalvikvm(6108): GC_FOR_ALLOC freed 733K, 21% free 9920K/12551K, paused 17ms, total 17ms
09-21 11:32:50.969: D/dalvikvm(6108): GC_CONCURRENT freed 608K, 20% free 10147K/12551K, paused 12ms+2ms, total 30ms
09-21 11:32:50.969: D/dalvikvm(6108): WAIT_FOR_CONCURRENT_GC blocked 17ms

09-21 11:32:51.049: E/Web Console(6108): Uncaught ReferenceError: AR is not defined at null:1

09-21 11:32:51.109: I/Adreno200-EGL(6108): <qeglDrvAPI_eglInitialize:299>: EGL 1.4 QUALCOMM build: Nondeterministic AU_msm8625_REFS/TAGS/JB_REL_RB5_QRD_D20130228_CL3285357_release_AU (CL3285357)

09-21 11:32:51.109: I/Adreno200-EGL(6108): Build Date: 03/01/13 Fri

09-21 11:32:51.109: I/Adreno200-EGL(6108): Local Branch:

09-21 11:32:51.109: I/Adreno200-EGL(6108): Remote Branch: m/refs/tags/jb_rel_rb5_qrd_D20130228
09-21 11:32:51.109: I/Adreno200-EGL(6108): Local Patches: NONE

09-21 11:32:51.109: I/Adreno200-EGL(6108): Reconstruct Branch: NOTHING

09-21 11:32:51.179: E/libEGL(6108): called unimplemented OpenGL ES API

09-21 11:32:51.179: W/Adreno200-ES20(6108): <qgl2DrvAPI_glHint:90>: GL_INVALID_ENUM

09-21 11:32:51.179: E/libEGL(6108): called unimplemented OpenGL ES API

09-21 11:32:52.289: D/dalvikvm(6108): GC_FOR_ALLOC freed 1121K, 23% free 9784K/12551K, paused 19ms, total 22ms
09-21 11:32:52.949: E/BufferQueue(6108): [unnamed-6108-1] dequeueBuffer: mMinUndequeuedBuffers=2 exceeded (dequeued=6)
09-21 11:32:52.949: I/Choreographer(6108): Skipped 109 frames!  The application may be doing too much work on its main thread.
09-21 11:32:52.979: E/BufferQueue(6108): [unnamed-6108-1] dequeueBuffer: mMinUndequeuedBuffers=2 exceeded (dequeued=5)
09-21 11:32:55.139: D/dalvikvm(6108): GC_FOR_ALLOC freed 867K, 25% free 9523K/12551K, paused 24ms, total 24ms
09-21 11:32:55.199: D/dalvikvm(6108): GC_CONCURRENT freed 8K, 22% free 10918K/13959K, paused 12ms+5ms, total 47ms

09-21 11:33:08.909: E/Web Console(6108): Uncaught TypeError: Property 'onLocationChanged' of object [object Object] is not a function at null:1

09-21 11:33:08.909: E/Web Console(6108): Uncaught TypeError: Property 'onLocationChanged' of object [object Object] is not a function at null:1

В приведенном выше журнале я вижу две проблемы: одну, связанную с "unimplemented OpenGL ES API", и другую, касающуюся "Uncaught TypeError: Property 'onLocationChanged' ".

Это причины того, что маркер не появляется? Как мне исправить это и получить маркер на экране. Пожалуйста помоги ...

Вот исходный код index.html, который я создал в соответствии с руководством по адресу http://www.wikitude.com/products/wikitude-sdk/samples-tutorials/architect-tutorial-3-geo-ar-poi/

<!DOCTYPE HTML>
<html>

<head>
    <meta name="viewport" content="target-densitydpi=device-dpi, width = 540, user-scalable = 0" />
    <meta http-equiv="Content-Type" content="text/html; charset=ISO-8859-1">
    <meta http-equiv="Content-Type" content="text/html; charset=UTF-8" />

    <script src="architect://architect.js"></script>
    <script type="text/javascript" src="ade.js"></script>
    <script>
        <!-- Javascript function defining a click handler -->
        function messageClicked() {
            // set the message DIV text
            document.getElementById("messageElement").innerHTML = "My text";
        }
    </script>
    <style type="text/css">
/* CSS Style for the message DIV that displays our message */
        .message {
        border-radius: 2em;
        border: solid 1px #6d6d6d;
        background-color: rgba(255,255,255,0.5);
        color: black;
        text-align: center;

        position:absolute;
        width: 50%;
        height: 10%;
        left: 25%;
        top: 45%;
        }
}
</style>
</head>

<body class="custom">

    <div id="messageElement" class="message" onClick="messageClicked();">
        Hello World!
    </div>

    <script>
        AR.context.onLocationChanged = function(lat, lon, alt, acc) {
        // the current location's latitude, longitude, altitude and accuracy
        // are passed in by the ARchitect
        var myGeoLocation = new AR.RelativeLocation(null, 10, 0, 0);
        var myCircle = new AR.Circle(5, {style: {fillColor: '#FFC100'}});
        var myGeoObject = new AR.GeoObject(myGeoLocation, {drawables: {cam: myCircle}});
        //AR.context.onLocationChanged = null;
        // Hide loading message
        //document.getElementById("messageElement").style.display="none";
        }
    </script>

</body>


person ramesh    schedule 23.09.2013    source источник


Ответы (2)


Вывод Uncaught TypeError регистрируется из-за ошибки при выполнении кода JavaScript. Если вы опубликуете код, мы сможем сказать вам, что не так.

Некоторые вещи, чтобы проверить:

  1. правильно ли включен architect.js
  2. правильно ли вы использовали API (например, забыли добавить пространство имен AR)
  3. используйте ade.js, поставляемый с SDK, для тестирования в настольном браузере (он обеспечивает гораздо лучший опыт отладки).

Отказ от ответственности: я работаю на Wikitude.

person wulfgeng    schedule 24.09.2013
comment
wulfgeng, спасибо за ответ. Я думаю, что делаю все вышеперечисленное правильно, так как я использовал образец кода дословно, чтобы начать с чего-то. Я разместил тот же вопрос на форуме wikitude и предоставил там исходный код. Даю ссылку на этот пост. Дайте мне знать, если вы хотите, чтобы я разместил код здесь. публикация в Wikitude - person ramesh; 24.09.2013
comment
Я понял, почему происходило Uncaught TypeError. Это произошло из-за самого первого действия функции onLocationChangedFn: AR.context.onLocationChanged = null; Как только я удалил эту строку, ошибка исчезла. Но исходная проблема с маркером, не показывающимся на локации, осталась. Единственная причина, о которой я мог подумать, это ошибка called unimplemented OpenGL ES API в logcat. - person ramesh; 24.09.2013
comment
Просто чтобы убедиться, что я делаю правильно, я снова начал с Hello World учебник. Первые 2 урока работали просто отлично, и я смог увидеть проекционный дисплей на виде с камеры. Затем я перешел к третьему уроку, чтобы отобразить маркер POI. Доделал все по туториалу и попробовал на устройстве. Произошла та же проблема: нет маркера POI в поле зрения камеры и ошибка called unimplemented OpenGL ES API в logcat. Я попробовал на 3 разных устройствах, чтобы убедиться, с тем же результатом. Я застрял. - person ramesh; 26.09.2013
comment
Я разместил исходный код index.html, который я создал в соответствии с руководством в своем исходном сообщении. - person ramesh; 26.09.2013
comment
@wulfgeng Я сталкиваюсь с той же проблемой, однако это происходит только тогда, когда я закрываю диалоговое окно перед отображением / визуализацией маркера. - person Umer Farooq; 24.01.2017

когда у меня возникла эта проблема, это произошло потому, что я пропустил добавление этих функций:

@Override
protected void onResume() {
    super.onResume();
    this.architectView.onResume();
}

@Override
protected void onPause() {
    super.onPause();
    this.architectView.onPause();
}

@Override
protected void onDestroy() {
    super.onDestroy();
    this.architectView.onDestroy();
}


//my own function
private void makeUseOfNewLocation(Location location) {
    try {
        //MAKE SURE YOU CALL THIS
        architectView.setLocation(location.getLatitude(), location.getLongitude(), location.getAltitude(), location.getAccuracy());
        this.architectView.load("poi_1/index.html");
    } catch (IOException e) {
        e.printStackTrace();
    }
}
person Karoly    schedule 10.11.2015