(495) 925-0049, ITShop интернет-магазин 229-0436, Учебный Центр 925-0049
  Главная страница Карта сайта Контакты
Поиск
Вход
Регистрация
Рассылки сайта
 
 
 
 
 

Псевдо 3D: Анимация вращения планет и других шароподобных объектов

Источник: habrahabr
habrahabr

Описание небольшого трюка по анимации вращения планет или других шарообразных штуковин. На написание этой статьи меня натолкнула статья Сфера из двух треугольников (стоит почитать). А сам трюк основан на весьма простом способе создания в Photoshop псевдо-объемной картинки из плоской, который описан под катом.

микродемо

Как это делается в Photoshop (микро-урок):

  • подбираем нужную текстуру
  • вырезаем из неё кружок
  • добавляем затемнение или осветление "по вкусу" через свойства слоя (я буду использовать осветление, а более реалистичные результаты получаются при комбинации разных теней)

Чтобы долго не заморачиваться с реализацией (т.к. это уже второстепенный момент), буду использовать js+css+html. Описанный выше "урок" для Photoshop для веб-страницы будет выглядеть так:

  • подбираем бесконечную текстуру, повторяющуюся по вертикали (или по горизонтали, или в обоих направлениях)
  • устанавливаем эту текстуру в виде фона
  • изменяем положение фона с помощью js через фиксированные промежутки времени

также можно решить эту задачу, используя canvas (кроссплатформенное быстрое решение можно получить с помощью, например, pixi.js или подобных библиотек, либо чистого js + canvas).

Решение

Как выглядит стиль:
.planet2d { background: repeat-x 0 0 url(earthmap-h100.jpg); border: 1px solid #999; -webkit-border-radius: 50px; -moz-border-radius: 50px; border-radius: 50px; box-shadow: inset 0 0 10px rgba(255,255,255,0.9); height: 100px; width: 100px; } .planet2d.moon { background-image: url(moon-h100.jpg); } .planet2d.jupiter { background-image: url(jupiter-h100.jpg); } .planet2d.venus { background-image: url(venus-h100.jpg); } .planet2d.mercury { background-image: url(mercury-h100.jpg); } .planet2d.io { background-image: url(io-h100.jpg); }
т.е. нужно установить начальное состояние фона, потом округлить блок (здесь я просто использую border-radius, но можно использовать картинку-шаблон с вырезанным кругом внутри, при этом, в этот шаблон можно включить и тени, таким образом достигнув более крутого результата) и сделать тень, затем задать размеры блока - вот и всё. А потом описаны стили для разных планет.

JavaScript-кода не больше:
(function (w) { w.Planet2D = function (interval) { interval = interval // 40; var j = 0; setInterval(function () { var els = document.querySelectorAll(".planet2d"); j--; for (var i = 0; i < els.length; i++) { els[i].style.backgroundPosition = j + "px 0px"; } }, interval); } })(window);
т.е. нужно сделать выборку всех элементов и сдвинуть у них фоновое изображение.

Итог

  1. Математики нет
  2. Трюк легко реализовывается под многие платформы
  3. Анимация весьма правдоподобно напоминает 3D

Ссылки

Demo
Ландшафты разных планет
GitHub для препарирования

Ссылки по теме


 Распечатать »
 Правила публикации »
  Написать редактору 
 Рекомендовать » Дата публикации: 18.06.2013 
 

Магазин программного обеспечения   WWW.ITSHOP.RU
Business Studio 4.2 Enterprise. Конкурентная лицензия + Business Studio Portal 4.2. Пользовательская именная лицензия.
The BAT! Professional - 1 компьютер
CAD Import .NET Professional пользовательская
TeeChart Standard VCL/FMX 2 developer license
SAP CRYSTAL Reports 2013 WIN INTL NUL
 
Другие предложения...
 
Курсы обучения   WWW.ITSHOP.RU
 
Другие предложения...
 
Магазин сертификационных экзаменов   WWW.ITSHOP.RU
 
Другие предложения...
 
3D Принтеры | 3D Печать   WWW.ITSHOP.RU
 
Другие предложения...
 
Новости по теме
 
Рассылки Subscribe.ru
Информационные технологии: CASE, RAD, ERP, OLAP
CASE-технологии
Мир OLAP и Business Intelligence: новости, статьи, обзоры
 
Статьи по теме
 
 



    
rambler's top100 Rambler's Top100