На главную Наши проекты:
Журнал   ·   Discuz!ML   ·   Wiki   ·   DRKB   ·   Помощь проекту
ПРАВИЛА FAQ Помощь Участники Календарь Избранное RSS
msm.ru
Модераторы: Hsilgos
  
> Разработка для Android на Delphi XE7, голые API (.)(.), без FireMonkey , OpenGL ES (EGL), кроссплатформа, сократить время деплоя и запуска приложения
    Приветствую всех, кто уже начал познавать прелести и обломы мобильной разработки :))
    Вопрос первый: туда ли я попала?

    Поясню. Я веду свою тему в разделе "Графика и мультимедиа/Программирование графики"
    Cвободно летающая камера в 3D (OpenGL - EGL, Delphi XE7)
    Сейчас я работаю над кросс-платформенной библиотекой, Windows/Android, в принципе можно еще и iOS, *nix поднять, но об этом позже.
    Моя библиотека это на 80% графика, поэтому тема в разделе графики.
    Но есть практические демки, посему на планшете и тачскрин обрабатываю, первый звук уже есть, датчиками ускорения интересуюсь, гироскопами, с веб-камеры картинку тяну и т.п.
    Меня там, в моей же теме пинают модераторы и посетители: почему я упоминаю частенько про какую-то мобильную платформу, важность её поддержки?
    Нету такой платформы говорят, нету такого вопроса вообще. Есть PC под Windows, есть Direct-X, Open-GL для чудаков, а более ничего нету.
    Я им так вежливо намекаю на смартфоны в их карманах, apk выкладываю, рассказываю что простенький планшетик-то нынче можно купить за $50 например.
    Упираюсь в стену непонимания. В лучшем случае признают наличие мобилок и планшетов в нашем мире, но отрицают возможность разработки ПО для них.
    Отрицают связь между OpenGL 2.0 и Open GL ES, кормят меня примерами на OpenGL 1.0, которые я не могу переварить.

    Так туда ли я попала, правильный ли раздел форума выбрала?

    Показать могу не много, текущая моя демка посвящена рисованию графических 3D примитивов, воюю нынче с построением цилиндра и нормалями. Бегать там можно.
    Android: mc.apk 3.8 MB https://yadi.sk/d/UaGYqsu9ff8Dd
    Windows: mc.zip 1.7 MB https://yadi.sk/d/tBKQxaV7ff8KW

    user posted image

    Есть еще и другие демки, даже игровой но неиграбельный вариант "чего то".
    Предвижу сложности в общении - я использую несколько нетипичный способ написания мобильных приложений. Но о способах позже, главное чтобы у Вас везде и все работало, у меня-то работает. И это хорошо.

    Шустрого вам деплоя,
    ваша Б.Т.
      Активность в теме зашкаливает:))
      Вопрос #1 - мне нужна помощь в тестировании моего приложения на различных мобильных девайсах.
      Имею в наличии лишь два 7" планшета:
      1. Samsung GALAXY Tab3 Lite SM-T110 (ниче так)
      2. Nomi A07000 7" (супер-мега-бюджетный китаяц).
      Еще недавно на некоторых Samsung-ах были глюки в отрисовке (DepthTest работал как 8 бит), это удалось преодолеть доработав инициализацию EGL. Переживаю за совместимость.

      Вопрос #2 - интересуюсь методами управления перемещением камеры (персонажа) в 3D мире при помощи тач-скрина. Не обязательно игра, может быть визуализатор данных, моделирование/архитектура/ландшафт, 3D браузер и т.п.

      Демки обновила, сейчас они посвящены методам построения сфер, шарики там анимированы, вращаются по 3-м осям. В силу кросс-платформы могу предложить варианты для PC и мобильных устройств, код 90% один и тот же.
      Android mc.apk 3.8 MB https://yadi.sk/d/UaGYqsu9ff8Dd
      Windows mc.zip 1.9 MB https://yadi.sk/d/tBKQxaV7ff8KW

      На скриншоте слева вверху: FPS (число кадров в секунду); TDF - время отрисовки одного фрейма в мс; NFR - число фреймов и время T от старта приложения; POS - координаты XYZ камеры в 3D мире (камера перемещается в плоскости XZ); ANG - углы поворота камеры относительно осей XYZ (камера поворачивается).
      Справа вверху пара кнопок вперед-назад. На мобильном устройстве поворот камеры (направление взгляда) управляется слайдом по тачскрину, если у вас 2 руки и на них есть пальцы можете одновременно и бежать и поворачиваться.
      На PC для движения можно использовать клавиши WASD или стрелки (кнопки кликабельны мышкой), для поворота "потяните" экран мышкой, F1 справка, Esc выход.

      user posted image

      Я использую Delphi XE7 без FireMonkey, графика OpenGL/EGL. Немного покажу как это выглядит "под капотом", например обработка тачскрина. Полный вариант есть в репо : http://sourceforge.net/p/delphioga/code/ci/default/tree/

      ExpandedWrap disabled
        {$IFDEF Android}
         
        {  тач по экрану:
         input event; 2; 0; нажатие
         input event; 2; 2; удержание
         ..
         input event; 2; 1; отпускание
         
           тыц системную кнопку:
         input event; (1) KEY; 0;
         input event; (1) KEY; 1; }
         
        function onInputEvent(App: PAndroid_app; Event: PAInputEvent): Int32; cdecl;
        const
          HandledFalse = 0;
          HandledTrue = 1;
          MotionEvents = [AMOTION_EVENT_ACTION_MOVE, AMOTION_EVENT_ACTION_DOWN, AMOTION_EVENT_ACTION_UP];
        var
          evType: Int32;
          MotionAction: Int32;
          PointerId: Int32;
          PointerCount: Int32;
          GLC: TGLContext;
          i: Integer;
        begin
          Result := HandledFalse;
          GLC := TGLContext(app.userData);
          evType := AInputEvent_getType(event);
          MotionAction := AMotionEvent_getAction(event);
        //  Log(Format('input event; %s %d; ', [InputEventType2Str(evType),MotionAction]));
          // .. sys key, AKeyEvent_getKeyCode(event) = AKEYCODE_BACK))
          if (evType = AINPUT_EVENT_TYPE_MOTION) and (MotionAction in MotionEvents) then
          begin
            PointerCount := AMotionEvent_getPointerCount(event);
            GLC.InputState.Clear;
            for i := 0 to Min(PointerCount, TouchCount) - 1 do
              if MotionAction <> AMOTION_EVENT_ACTION_UP then begin
                PointerId := AMotionEvent_getPointerId(event, I);
                if PointerId >= 0 then
                  GLC.FInputState.Add(AMotionEvent_getRawX(Event, PointerId),
                    AMotionEvent_getRawY(Event, PointerId), gtTouch);
              end;
            Result := HandledTrue;
          end;
        end;
         
        {$ENDIF}
      Сообщение отредактировано: Блекморша Таня -
      1 пользователей читают эту тему (1 гостей и 0 скрытых пользователей)
      0 пользователей:


      Рейтинг@Mail.ru
      [ Script execution time: 0,0260 ]   [ 14 queries used ]   [ Generated: 17.05.24, 05:39 GMT ]