Наши проекты:
Журнал · Discuz!ML · Wiki · DRKB · Помощь проекту |
||
ПРАВИЛА | FAQ | Помощь | Поиск | Участники | Календарь | Избранное | RSS |
[18.222.107.236] |
|
Сообщ.
#1
,
|
|
|
Приветствую всех, кто уже начал познавать прелести и обломы мобильной разработки )
Вопрос первый: туда ли я попала? Поясню. Я веду свою тему в разделе "Графика и мультимедиа/Программирование графики" 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 Есть еще и другие демки, даже игровой но неиграбельный вариант "чего то". Предвижу сложности в общении - я использую несколько нетипичный способ написания мобильных приложений. Но о способах позже, главное чтобы у Вас везде и все работало, у меня-то работает. И это хорошо. Шустрого вам деплоя, ваша Б.Т. |
Сообщ.
#2
,
|
|
|
Активность в теме зашкаливает:))
Вопрос #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 выход. Я использую Delphi XE7 без FireMonkey, графика OpenGL/EGL. Немного покажу как это выглядит "под капотом", например обработка тачскрина. Полный вариант есть в репо : http://sourceforge.net/p/delphioga/code/ci/default/tree/ {$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} |