Comments 66
На HTC One X получилось вот такое db.tt/2A2yKX5u
И еще, у вас опечатка: первые уравнения у вас для преобразования из сферической в декартову, а вторые наоборот.
И еще, у вас опечатка: первые уравнения у вас для преобразования из сферической в декартову, а вторые наоборот.
Хм, странно, мне казалось, что на One я тоже тестировал. Похоже, спутал с Butterfly или ещё чем-то. Значит, там такая же беда, как на S4. :(
Nexus 7, аналогично.
30 fps на третьей тегре с двумя треугольниками? Ну оок, лол.
А, я перепутал One и One X.
Значит, проблема как минимум с теграми (One X и Nexus 7).
Значит, проблема как минимум с теграми (One X и Nexus 7).
На WindowsAndroid сначала «Unfortunately, Planet has stopped.», потом пустое чёрное окно с заголовком.
Попробуйте обновлённую сборку, пожалуйста. Мне как раз случай с вашего скриншота был наиболее интересен, вдруг удалось его исправить?
Уже лучше, но артефакты есть. db.tt/FrXy9lO7
И по поводу некорректного отображения на стыке передней и задней полусфер: можно ведь преобразовывать координаты так, чтоб проекция с большим углом к сфере была всегда по периметру отображаемой плоской проекции.
И по поводу некорректного отображения на стыке передней и задней полусфер: можно ведь преобразовывать координаты так, чтоб проекция с большим углом к сфере была всегда по периметру отображаемой плоской проекции.
Там тот же билд. :)
Вообще, странно, что даже для одного и того же чипа (Tegra 3) результаты получаются разными (на Nexus 7 всё ОК, на One X нет), но тут уже, видимо, какая-то разница в драйверах начинает сказываться. Если мне One X попадётся в руки, попытаюсь додавить этот эффект. Ну, или может быть кто-нибудь мне поможет, исходники-то открыты. :)
Вообще, странно, что даже для одного и того же чипа (Tegra 3) результаты получаются разными (на Nexus 7 всё ОК, на One X нет), но тут уже, видимо, какая-то разница в драйверах начинает сказываться. Если мне One X попадётся в руки, попытаюсь додавить этот эффект. Ну, или может быть кто-нибудь мне поможет, исходники-то открыты. :)
В свое время делал что-то похожее (еще на спектрум потом на 386х).
Вращающиеся фигуры назывался. (разные фигуры на выбор вращались на экране)
Типа наглядного пособия по математике.
Только там я применял массивы значений косинусов, чтобы быстрее считалось.
Писалось на Бейсике, в тетрадках. Потом по полдня вбивалось.
Была даже скомпилиная программа, которая зачетом ушла и больше не осталась.
Надо бы повторить, с оглядкой на Ваш код.
И кстати, просчет не видимости точки (что-то типа Z буфера) высчитывался как-то интересно.
Я потом эту формулу в другом виде в мат.анализе нашел. Хотя вывел сам.
Вращающиеся фигуры назывался. (разные фигуры на выбор вращались на экране)
Типа наглядного пособия по математике.
Только там я применял массивы значений косинусов, чтобы быстрее считалось.
Писалось на Бейсике, в тетрадках. Потом по полдня вбивалось.
Была даже скомпилиная программа, которая зачетом ушла и больше не осталась.
Надо бы повторить, с оглядкой на Ваш код.
И кстати, просчет не видимости точки (что-то типа Z буфера) высчитывался как-то интересно.
Я потом эту формулу в другом виде в мат.анализе нашел. Хотя вывел сам.
На Lenovo A750 всё работает, 30FPS.
А Земля у Вас в правильную сторону вращается? А то мне кажется что нет )
А Земля у Вас в правильную сторону вращается? А то мне кажется что нет )
О, а вот об этом я ни разу не задумывался, спасибо. :)
Забавный результат…
50+ FPS но появились деформации как на скрине в первом коменте только гораздо меньшие. как буж-то землю нарезали на плоские круги и некоторые слегка провернули относительно других.
50+ FPS но появились деформации как на скрине в первом коменте только гораздо меньшие. как буж-то землю нарезали на плоские круги и некоторые слегка провернули относительно других.
Ого, вот это странно. У меня сейчас такой эффект на One тоже воспроизводится (именно такой, «слоями», а не как в комментарии), но с чего бы он мог появиться, если предыдущий вариант работал нормально?.. Загадочно.
Выглядит забавно :) На вскидку — может где-то ошибки округления возникают ( всмысле погрешности вычисления координат)?
Ну, они бы и в предыдущем варианте тогда возникали. :) А вычисление текстурных координат в обоих шейдерах сделано одинаково.
Вообще, вот сейчас я ковыряю One, и у меня стойкое ощущение, что он насильно сжимает текстуру. Если это так, то я уже ничего сделать не смогу…
Вообще, вот сейчас я ковыряю One, и у меня стойкое ощущение, что он насильно сжимает текстуру. Если это так, то я уже ничего сделать не смогу…
Собрал ещё три варианта. :)
На этот раз, у меня получилась почти нормальная работа на HTC One, путём переставления битов и изменения множителя. Мелкие артефакты изображения всё равно присутствуют, но стало уже лучше.
Итак, для HTC One: версия "только вращение", версия с наклоном.
На этот раз, у меня получилась почти нормальная работа на HTC One, путём переставления битов и изменения множителя. Мелкие артефакты изображения всё равно присутствуют, но стало уже лучше.
Итак, для HTC One: версия "только вращение", версия с наклоном.
выглядит классно на nexus 7, 60fps, только где наклон выбают артефакты
Такие, как на последнем скриншоте? ;)
да, как думаете, справитесь с этим? я залип на этот шарик, на работе, минут на 15, еще коллегам потом показывал ) А можно еще звезды добавить на задний фон?
Хороший вопрос. С одной стороны, хочется это исправить, а с другой — шейдер «с наклоном» уже и так очень сложный, от изящества первой версии в нём почти ничего не осталось. Так-то демка создавалась чисто ради вращения вокруг своей оси.
Так или иначе, исходники доступны всем, поэтому если не я, то кто-нибудь другой наверняка что-то сможет сделать. :)
Ну а звёзды… чуть позже прикручу. :)
Так или иначе, исходники доступны всем, поэтому если не я, то кто-нибудь другой наверняка что-то сможет сделать. :)
Ну а звёзды… чуть позже прикручу. :)
Тестирую эту версию, обе дают 60 фпс, версия с наклоном изначально без наклона, покрутил, всё ок, только на полюсах артефакты.
Вот так, имея один эмулятор Android, можно потестировать свое приложение «коллективным разумом» на большом количестве различных android девайсов
Evo 3D, 60-61 fps. Только при приближении появляется небольшой шум.
Читаю коменты, и мне страшно. Если два треугольника с шейдерами вызывают такие различия на разных девайсах, через что же проходят разработчики более серьезных игр…
Спасибо за статью. Я подобное во флеше делал, тока до гениальности проще. Брал рисовал круг, под ним слой с прямоугольной картой+ маска по форме круга и двигал карту слева направо циклично. В итоге сделал солнечную систему из 7 планет. Задачка на экзамене такая была.
можно еще с нормалями побаловаться, придав земле эффект трехмерности.
ru.wikipedia.org/wiki/Рельефное_текстурирование
ru.wikipedia.org/wiki/Рельефное_текстурирование
Ну да, решив задачу нахождения сферических текстурных координат, дальше уже можно двигаться в направлении любых спецэффектов, использующих текстуры. :)
Я такое реализовывал 

просто имхо в тему, может пригодится:
http://www.ixbt.com/video/sphere-triangles.shtml
http://www.ixbt.com/video/sphere-triangles.shtml
Стал портировать на WebGL, получилась вот такая пангея.


А почему только в Chrome работает?
У меня работает в Chrome и Firefox, но не работает в Safari.
Я пока не разбирался в причинах, всё-таки это мой первый webGL, сделанный менее чем за сутки.
Я пока не разбирался в причинах, всё-таки это мой первый webGL, сделанный менее чем за сутки.
Ан нет, у меня в Safari тоже работает: там надо было явно включить поддержку WebGL, тогда всё пучком.
Больше скажу, теперь у меня это работает даже в Firefox for Android.
Больше скажу, теперь у меня это работает даже в Firefox for Android.
Отличная статья!
И очень хорошая идея. Ваш код и «хак» arbg-формата отлично работает на IOS.
Попробовала сделать на IPhone,
Одна проблема с fps. С чего ей так падать непонятно, может у кого есть мысли насчет этого?
Причем пробовала сделать нативные шрейдеры, которые сами делают преобразование из декартовых в сферические, но тоже грустно получилось с производительностью.
И очень хорошая идея. Ваш код и «хак» arbg-формата отлично работает на IOS.
Попробовала сделать на IPhone,

Одна проблема с fps. С чего ей так падать непонятно, может у кого есть мысли насчет этого?
Причем пробовала сделать нативные шрейдеры, которые сами делают преобразование из декартовых в сферические, но тоже грустно получилось с производительностью.
Да, на четверке смотрю. На ipad-mini ситуация получше. Но все-таки это довольно странно. Я работаю на cocos2d и там огромное множество преобразований со спрайтами, и fps не падает. А тут от одной картинки все так опустилось. В предложенном методе, вообще, исключительно линейные преобразования, которые GPU по сути должен на раз-два делать. Возможно тут переключение между текстурами играет нехорошую роль. Но за статью и за идею Вам спасибо, при любом fps).
Преобразования со спрайтами обычно делаются на уровне вершин, которых в спрайте всего четыре штуки (как и здесь). А вот пикселей здесь — примерно 321700 (это только те, которые попадают под «if (z2 > 0.0)», а так их 409600), и для каждого выполняется довольно сложный пиксельный шейдер с произвольной выборкой из двух текстур.
Так что, да, в данном случае это всего лишь просто забавная демка, с сомнительной применимостью, хотя позапрошлогодние GPU её уже вполне тянут на 60 fps, а дальше будет только лучше.
Так что, да, в данном случае это всего лишь просто забавная демка, с сомнительной применимостью, хотя позапрошлогодние GPU её уже вполне тянут на 60 fps, а дальше будет только лучше.
Sign up to leave a comment.
Сфера из двух треугольников