ria pc game
fle game engine - движок для создания игр
fle game engine - движок для создания игр


Balls and holes PC game / Balls and Holes PC игра
Вакансии
Игродельня
Сегодня
23 февраля 2019 17:50
Вход Регистрация Забыли пароль ?

megainformatic - Модуль для регистрации пользователя на сайте
Модуль для регистрации пользователя на сайте Всё течет, всё изменяется ... И рано или поздно Ваш сайт или сервис дорастёт до того, что Вам понадобится регистрировать новых пользователей на сайте. Хорошо, если модуль регистрации уже встроен в вашу cms. Однако тогда, когда Вам потребуется сделать с этим модулем что-то нестанда
подробнее...

Теги создание сайтов, создание игр, дизайн, игры, информатика, уроки photshop, php, c++, музыка, delphi, cms, робосайт
Статьи сайта
megainformatic - Модуль content php performer для megainformatic cms

megainformatic - Пишем компактный слайдер

megainformatic - Что нужно знать для создания сайта ?

megainformatic - Что нужно знать для создания сайта ? Глава 2 - Кодировки и DOCTYPE

megainformatic - Что нужно знать для создания сайта ? Глава 3 - Идём дальше - нанизываем новый код - где объявляются стили css и код javascript

megainformatic - Что нужно знать для создания сайта ? Содержание

megainformatic - Что нужно знать для создания сайта ? css - стили

megainformatic - preg_match или Использование регулярных выражений в php

megainformatic - статьи Тимонина Андрея - Flash. Содержание

megainformatic - статья Тимонина Андрея - Flash. Подготовка к работе.

megainformatic - статья Тимонина Андрея - Flash. Hello world.

megainformatic - статья Тимонина Андрея - Flash. Экспорт SWC библиотеки.

megainformatic - Тимонин Андрей - Несколько слов о себе

megainformatic - статьи Тимонина Андрея - уроки из области веб программирования, создания казуальных игр

megainformatic - статья Тимонина Андрея - Обеспечиваем доступ к объекту из любой точки программы. Singleton

megainformatic - статья Тимонина Андрея - Хронология работы программы. Создаем Лог

megainformatic - статья Тимонина Андрея - Поиск файлов. Получаем список файлов каталога.

megainformatic - статья Тимонина Андрея - Исключения. Создаем класс обработки исключений.

megainformatic - статья Тимонина Андрея - States. Создаем менеджер состояний игры.

megainformatic - статья Тимонина Андрея - Регистрация. Часть 1. Создаем страничку регистрации на сайте.

megainformatic - статья Тимонина Андрея - Регистрация. Часть 2. Создаем обработчик, и заносим информацию о пользователе в Б.Д.

megainformatic - статья Тимонина Андрея - Таймер. Выводим время игры.

megainformatic - статья Тимонина Андрея - DirectX9. Создаем основной класс обработки графики.

megainformatic - статья Тимонина Андрея - DirectX9. Создаем первое приложение.

megainformatic - Что нужно знать для создания сайта ? float - использование в css - стилях

megainformatic - Уроки Fruity Loops Studio (FL Studio) - урок 2 - пишем свою композицию COLD

megainformatic - Уроки Fruity Loops Studio (FL Studio) - урок 3 - экспериментируем с композицией COLD

megainformatic - Что нужно знать для создания сайта ? Стандартные шрифты для сайта

megainformatic - Что нужно знать для создания сайта ? ASC II Коды символов

megainformatic - Уроки Fruity Loops Studio (FL Studio) - урок 4 - пишем первый вариант композиции COLD

megainformatic - Популяризация Современных Научных Знаний и Размышления на околонаучные темы. СОДЕРЖАНИЕ

megainformatic - Популяризация Современных Научных Знаний и Размышления на околонаучные темы. Энергетический кокон

megainformatic - Модуль галерей для любой cms

megainformatic - Портфолио выполненных проектов сайтов и приложений

megainformatic - Мои Музыкальные Миры - страница 2

megainformatic - megainformatic cms rs

megainformatic - модуль Падающий снег

megainformatic - проект Open Shop

megainformatic - Рисуем красивую девушку всего за 6 шагов

megainformatic - Галерея красивых рисованных девушек

megainformatic - НОВОГОДНЕЕ ОБРАЩЕНИЕ СОЗДАТЕЛЯ webinformatic К ЖИТЕЛЯМ ПЛАНЕТЫ интернет

megainformatic - Отзывы оставленные пользователями как впечатление о проделанной работе или что-либо понравившееся на сайте

megainformatic - Уроки css - атрибут position

megainformatic - Ива Ден энд КуХа - КОДЕКС ФРИЛАНСЕРА - СОДЕРЖАНИЕ

megainformatic - Ива Ден энд КуХа - КОДЕКС ФРИЛАНСЕРА - Глава 1 - Обычный день

megainformatic - Ива Ден энд КуХа - КОДЕКС ФРИЛАНСЕРА - Глава 2 - Начало (begin)

Новогодняя дискотека 2013 на megainformatic точка ru

megainformatic - Программируем на C++ с использованием MFC

megainformatic - Программируем на C++ с использованием MFC - Создание MFC приложения

megainformatic - Программируем на C++ с использованием MFC - Создание MFC приложения - hello, world !

megainformatic - Как создать игру ? - Пишем игровой движок с нуля

megainformatic - Как создать игру ? - Пишем игровой движок с нуля - Вступление

megainformatic - Как создать игру ? - Пишем игровой движок с нуля - Общая структура будущего игрового движка

Разное

megainformatic - Как создать игру ? - Пишем игровой движок с нуля - DXUTMainLoop - цикл работы DirectX-приложения

megainformatic - Варианты макетов Психолог 911

подробнее

     
 

Доверенные партнеры сайта Мега Информатик -

 
     
 
Яковенко Андрей Яковенко Андрей. Интересный и разносторонний человек. Занимается созданием сайтов под ключ на cms WordPress, Joomla и DLE. Помимо этого примерный семьянин и увлекающийся человек. Самое главное - очень открытый, которому можно смело довериться. Подробнее узнать об Яковенко Андрее можно обратившись на его личный сайт - Яковенко Андрей

 
 
     
 

ignazius.ru

Сайт Тимонина Андрея - начинающего сайтостроителя и игродела :)

 
 
     
   
     
 

 
 
     
     
     
 

Вам понравился наш сайт ? И Вы хотите обменяться с нами ссылками ?

Отлично! Сделать это просто - разместите на страницах своего сайта следующий код -

 
     
 


or this

 
     
 

И пришлите на адрес creator@megainformatic.ru код ссылки Вашего сайта - он будет размещен здесь !

 
     
  Вот как должна выглядеть картинка со ссылкой на наш сайт -  
     
  Мега Информатик - исследовательско-креативный сайт посвященный разработке компьютерных игр  
     
     
     
     
     
     
     
     
     
     
     
     
     
     
     
     
     
подробнее

     
  Итоги уходящего 2010 года  
     
  Уходящий 2010 год был для меня разным. Запомнилось много хорошего и не очень хорошего, но в целом, мне кажется год был для меня успешным.  
     
  Начатый еще в сентябре 2009 года проект Веселый Буквоежка был приостановлен в июне 2010 года. Причин этому было много, но я думаю, по крайней мере желание очень большое, что проект всё-таки состоится в полном варианте. На сегодняшний день готова демо-версия. Всё что планировалось реализовано пока на 30-40%. Основные задачи - это конечно игровой контент. Игровой движок для игры практически закончен.  
     
 

Несмотря на трудности и вопреки им, проект Мега Информатик перебрался на собственный домен - megainformatic.ru. Это качественный рост для меня. Многие новые проекты были созданы именно благодаря новой ступени и новым требованиям качества.

Уроки Photoshop Чудеса, Уроки Photoshop Рисуем и Анимируем, megainformatic cms. Эти проекты стали открытием середины 2010 года и вышли в свет.

 
     
 

Что в планах. В планах конечно же продолжение работы надо игровыми проектами. Хочется закончить начатое. Предстоит также дальнейшее развитие направления сайтостроя, проекта megainformatic cms, работа с другими cms.

Планирую заняться flash технологиями. Это тоже достаточно интересное и перспективное направление деятельности.

 
     
  Куда податься игроделу ? Да вообщем-то сейчас появляется много новых и интересных проектов. Специалисту в области игровых технологий достаточно просто переквалифицироваться в сайтостроителя. Я это могу продемонстрировать на собственном опыте, хотя, честно говоря серьезно в игрострой я тоже пока так и не влился. В основном занимался дизайном. Теперь же в связи со сменой места работы планирую заняться этим очень серьезно.  
     
 

Информация - это товар. Полностью согласен с этим утверждением. Ноу-хау в области ИТ действительно могут приносить ощутимую отдачу. Раньше я еще очень робко верил в эту незыблимую истину. Но жизнь заставила сделать выбор и я занялся ИТ вплотную. Казалось бы сайты, сайтостроение - это давно известные, изборожденные вдоль и поперек технологии. Ан нет, на сей ниве вновь и вновь появляется что-то новое. Создание сайтов - это искусство. Я рад, что смог и сам приобщиться к нему.

На самом деле за словом САЙТОСТРОЙ кроется нечто большее. Это не просто технология создания чего-то законченного - это постоянное саморазвитие и самосовершенствование, самоорганизация если хотите. Это гонка наперегонки с самим собой и часто в неизвестность. Звучит немного странно, да. Сейчас технологии организации и накопления знаний, информационные системы переходят на новый качественный виток. И мы пока не знаем, куда это всё ведет. Именно поэтому - это путь в неизвестность. Но надежды, конечно, только на хорошее. Что будет найдено что-то новое, улучшающее общую картину понимания мира и бытия.

 
     
 

Ну что ж, разрешите поздравить Вас с наступающим новым 2011 годом !

УРА ! УРА ! УРА !

 
     
подробнее

     
     
 
МОДЕЛИРОВАНИЕ НА УРОВНЕ МНОГОУГОЛЬНИКОВ
 
[Все уроки 3ds max] [Галерея моделей] [далее]
 

Создание модели книжного шкафа

Нам необходимо смоделировать представленный объект, затем применить к нему материал – дерево.

 
каркасный вид модели книжного шкафа сплошной вид
 

Создайте бокс:

Create Panel > Standard primitives > Box

В окне параметров задайте следующие размеры:

Length = 2,8m; Width = 0,8m; Height = 2,6m;

Для того, чтобы получить возможность видоизменять созданный простой объект увеличим количество сегментов:

Length Segs = 4; Width Segs = 3; Height Segs = 3;

 

Приступим к процессу видоизменения. Преобразуйте объект в editable poly:

Modify Panel > object name (Box) > щелчок правой кнопкой мышипо 1 пунктуокнастека > Convert To Editable Poly.

После этой операции объект преобразуется из простого параметрического в редактируемый многоугольник.

Этот новый тип объекта позволит нам сформировать пространство для полок, сформировать ножки.

Если вы щелкали вне объекта, то снова выберите объект (щелчком по нему).

Клавишей [F4] включите режим отображения граней (edged faces).

Вы увидите на сколько сегментов разбита каждая из первоначальных граней.

В окне стека разверните узел у пункта Editable poly и выберите подпункт Polygon.

Удерживая нажатой клавишу [Ctrl] выделите две грани в центре.

 
выделенные грани
 

Попробуем «вдавить» эти грани внутрь объекта, чтобы сформировать будущее пространство полки.

В окне параметров найдите и нажмите кнопку Extrudeи маленькую кнопку рядом с ней.

В появившемся диалоговом окне задайте: Extrusion Height = -0,7m; Затем OK.

 
грани после вдавливания
 

Расширение размеров пространства полки

Перейдите в окно Top viewport и увеличьте, переместите вид если требуется. На панели Modify раскройте узел Editable poly и выберите уровень суб-объекта Vertex (вершины).

Используя выделение мышью в окне Top viewport выделите средние верхние четыре вершины. При этом будут выделены все видимые и не видимые вершины объекта в данной зоне.

 
выделение двенадцати вершин
 
Удерживая нажатой [Ctrl] выделите аналогично 12 вершин другой стороны.
 
выделение второго набора из 12 вершин с другой стороны
 
Используя Select and Uniform Scale сместите вершины по координатной оси Y. В окне Perspective viewport вы увидите результат вашей работы.
 
раздвижка вершин масштабированием для достижения эффекта тонких стенок
 
Вдавите верхние две грани для получения пространства верхней полки.
 
получение верхней полки
 

Создание 4-х ножек

В окне Perspective viewport переверните шкаф так, чтобы было видно его дно. Используя панель модификации и уровень Polygon выделите 4-ре крайних прямоугольника по периметру дна. Используя кнопку Extrude и кнопку параметров (рядом с ней) – в группе Edit Polygons – выдавите ножки на 0,1m.

 
выдавливание ножек
 

Теперь коснемся понятия рендеринга или отрисовки. Отрисовка (Рендеринг) созданной модели – это растеризация трехмерного изображения в виде плоского.

Выберите пункт меню Rendering > Render.

В открывшемся окне Render Scene в группе Output size щелкните по кнопке 640х480

 
размер выходного изображения при растеризации
 

Нажмите кнопку Render в самом низу окна.

В окне кадра будет нарисовано текущее содержимое текущего окна. Полученное изображение можно сохранить в отдельный файл (используя кнопку с изображением дискеты).

Как видим, это лишь прообраз моделирующий форму шкафа. Для придания реализма к объектам применяются различные материалы.

Под материалами в Max подразумеваются плоские изображения (называемые также текстурами) наносимые (или проецируемые) на поверхность созданных объектов.

Применим к нашей модели шкафа материал wood (дерево).

Вызовите редактор материалов – клавиша M или Rendering> Material Editor

В окне образцов щелкните любой пустой слот.

По умолчанию все слоты имеют shader Blinn.

Понятие шейдера (shader) включает следующее – это специальный алгоритм (или набор алгоритмов) моделирующий поведение материала для придания большей реалистичности. Шейдеры моделируют отражение, приломление, поглощение света.

Тип шейдера можно менять в окне параметров – группа Shader Basic Parameters. Каждый из типов шейдеров имеет свой уникальный набор параметров, хотя конечно есть и нечто общее.

Названия шейдеров обычно представляют или имена авторов или свойства и поведение и т.д.: Blinn, Anizotropic, Metal и другие.

Для моделирования поведения большинства простых материалов подходит именно шейдер Blinn, который применяется наиболее часто. Другие шейдеры больше подходят для специфических материалов – Anizotropic и Metal – для анизотропных веществ, т.е. кристаллов, металлов – материалов в которых свойства среды зависят от направления.

В качестве краски (цвета), который можно использовать для заполнения объекта можно использовать растровое изображение (текстуру):

В группе Blinn Basic Parameters есть три пункта:

Ambient – окружающий свет

Diffuse – рассеянный свет

Specular – отраженный свет.

 
редактор материалов и рассеянный свет
 

Нажмите пустую кнопку напротив пункта Diffuse – и мы используем в качестве рассеянного света материала текстуру.

В появившемся окне Material/Map Browser выберите рисунок wood. Двойной щелчек приведет к автовыбору.

 
выбор материала wood
 
Будет открыто окно параметров проекций (Map) – здесь пока ничего не будем менять, а просто выберем в верхнем выпадающем списке самый первый пункт – имя создаваемого материала.
 
переход на уровень параметров материала в целом
 

Мы снова попадем в окно свойств этого материала. Переименуйте материал назвав, например wood_01. Если материал имеет несколько проекций (Maps), то их тоже можно переименовывать давая другие названия. Все изменения будут сохранены вместе с вашим файлом сцены.

Применим созданный материал к нашему объекту – шкафу – щелкните слот материала и перетаскивайте его на объект в окне Perspective viewport. Если никаких изменений не произошло, то нажмите кнопку Show map in viewport в окне редактора материалов.

 
кнопка управления отображением материала в окне вида
 

Закройте редактор материалов и попробуйте произвести рендеринг вашей сцены.

 

Как видите шкаф получил вид в виде древоподобного рисунка. Но он слишком крупных размеров и это смотрится не очень.

Поправим дело: вызовите редактор материалов и доберитесь в нем до параметров проекции с рисунком дерева (wood). В группе Coordinates можно управлять наложением рисунка на объект, а именно:

Offset – производить смещение на указанное число единиц по данной координатной оси;

Tiling – организовывать цикличное (повторяющееся) заполнение образцом указанное количество раз. Это нам и требуется – попробуйте изменять значения и сравнивать изменения проводя Рендеринг.

Angle – позволяет поворачивать образец на некоторый угол. Попробуйте повернуть по координате Y на 90 градусов.

Попробуйте добиться наиболее подходящих значений повторяемости и углов поворота образца.

Примечание: при частых повторных отрисовках для просмотра эффекта от изменений окно редактора материалов можно не закрывать.

Вернемся к видоизменению нашей модели. Попробуем создать в нижней части шкафа небольшие впадины имитирующими дверцы тумбочки, а затем добавим ручки.

Используя Modify panel > Editable Poly > Polygons выберите две прямоугольных грани в нижней части шкафа.

 
окончательный вариант модели книжного шкафа
 

Используя кнопку Extrude вдавите дверки на значение (Amount = -0,1m).

Создание ручек

Создайте маленький цилиндр (Cylinder) или конус (Cone) (0,01 х 0,06). Выровняйте расположение ручки, примените материал, создайте вторую ручку.

Между ручками создайте планку (используйте бокс нужных размеров).

В итоге у Вас должно получиться что-то наподобие приведенного на рисунке.

 

 
     
     
  [Все уроки 3ds max] [Галерея моделей] [далее]  
подробнее

Популяризация Современных Научных Знаний и Размышления на околонаучные темы

Данный раздел я решил посвятить темам далеким от создания игр или сайтов :)))

Кому это интересно ?

В первую очередь информация полезна для размышлений, а приятные размышления,
согласитесь, никогда и никому не вредили.

Однажды я задался вопросом - Что такое ЭНЕРГЕТИЧЕСКИЙ КОКОН ?

Уроки css - атрибут position

Сегодня Мы с Вами рассмотрим применение атрибута position

[к содержанию]

Приготовьтесь много экспериментировать, потому что настоящая верстка - это эксперименты, пробы и ошибки.

Особенно когда речь заходит о кроссбраузерности - т. е. одинаковом результате в разных браузерах.

Сначала приведу пример использования -



Красный блок - это DIV, описанный таким кодом -

<div style="float: left; width: 400px; height: 180px; background: #cc0011;">
</div>


Т. е. float: left - привязывание блока к левому краю контейнера (блока, его содержащего) - в нашем примере таким контейнером является внешний DIV, в котором находится данная статья.

Далее думаю понятно: width: 400px - ширина блока 400 пикселей
height: 180px - высота - 180, сразу дам совет если ваш блок планируется "резиновым" по высоте, тогда не указывайте атрибут height.

Соответственно цвет фона для блока - красный - background: #cc0011

Внутри красного блока DIV как видим расположен грязно-желтого цвета блок DIV.

Чтобы он остоял от левого края своего контейнера на 140 пикселей и от верхнего края на 50 пикселей зададим такой код -

<div style="position: relative; top: 50px; left: 140px; z-index: 1000; width: 200px; height: 80px; background: #aacc00;">
</div>


С шириной и высотой, а также цветом фона думаю Вам всё понятно, а вот новые атрибуты требуют пояснения

position: relative - задает расположение блока DIV "относительным" - т. е. смещения указанные у left и top задают относительное смещение внутри "родительского" контейнера - т. е. контейнера в котором расположен наш желый блок - по отношению в внешнему - красному блоку.

И вот тут таится главная ошибка всех НАЧИНАЮЩИХ ВЕРСТАЛЬЩИКОВ -

ИСПОЛЬЗОВАНИЕ position ТАМ, ГДЕ ЭТО СОВСЕМ НЕ НУЖНО.

!!! ПРАВИЛЬНО РЕШЕНИЕ ТАКОВО - используйте position там, где можно обойтись обычным float + margin. !!!

Т. е. блоки нужно выравнивать друг относительно друга с помощью атрибута margin - тот же самый пример более правильно записать так -



<div style="float: left; width: 400px; height: 180px; background: #cc0011;">

<div style="float: left; margin: 50px 0 0 140px; width: 200px; height: 80px; background: #aacc00;">
</div>

</div>


Внешне как видите никакой разницы. Но если использовать несколько блоков DIV внутри одного и того же контейнера, то разница будет ОЧЕНЬ ОЩУТИМА.

Посмотрим пример -



<div style="float: left; width: 400px; height: 180px; background: #cc0011;">

<div style="float: left; margin: 50px 0 0 40px; width: 60px; height: 60px; background: #22cc00;">
</div>

<div style="float: right; margin: 50px 0 0 40px; width: 60px; height: 120px; background: #220000;">
</div>

</div>


Пока всё просто :))))

А что если бы было вот так ?









<div style="float: left; width: 400px; height: 180px; background: #cc0011;">

<div style="float: left; margin: 50px 0 0 40px; width: 260px; height: 60px; background: #22cc00;">
</div>

<div style="float: left; margin: 50px 0 0 40px; width: 60px; height: 120px; background: #220000;">
</div>

<div style="float: left; margin: 50px 0 0 40px; width: 50px; height: 30px; background: #774100;">
</div>

</div>


Как видим маленькому коричневому прямоугольничку не хватило места в контейнере и он буквально "выпал" из него.

Использование position позволяет избежать такого поведения -









<div style="float: left; width: 400px; height: 180px; background: #cc0011;">

<div style="position: relative; top: 50px; left: 40px; z-index: 1000; width: 260px; height: 60px; background: #22cc00;">
</div>

<div style="position: relative; top: 50px; left: 40px; z-index: 1000; width: 60px; height: 120px; background: #220000;">
</div>

<div style="position: relative; top: 50px; left: 40px; z-index: 1000; width: 50px; height: 30px; background: #774100;">
</div>

</div>


Но как видите приводит к тому, что места теперь уже хватило лишь 1 блоку.

Остальные блоки оказались совсем не там, где ожидалось.

Это самый большой камень преткновения в верстке - добиться с одной стороны универсальности, а с другой - правильного расположения блоков в любых ситуациях.

МЫ ПОДОШЛИ К ГЛАВНОМУ - вы наверное уже заметили использование нового атрибута - z-index





<div style="float: left; width: 400px; height: 180px; background: #cc0011;">

<div style="position: relative; top: 0; left: 0; z-index: 1000; width: 260px; height: 60px; background: #22cc00;">
</div>

<div style="position: relative; top: -20px; left: 10px; z-index: 1001; width: 60px; height: 120px; background: #220000;">
</div>

<div style="position: relative; top: -40px; left: 10px; z-index: 1002; width: 50px; height: 30px; background: #774100;">
</div>

</div>






<div style="float: left; width: 400px; height: 180px; background: #cc0011; position: relative; top: 0; left: 0; z-index: 900;">

<div style="position: absolute; top: 0; left: 0; z-index: 1000; width: 260px; height: 60px; background: #22cc00;">
</div>

<div style="position: absolute; top: -20px; left: 10px; z-index: 1001; width: 60px; height: 120px; background: #220000;">
</div>

<div style="position: absolute; top: -40px; left: 10px; z-index: 1002; width: 50px; height: 30px; background: #774100;">
</div>

</div>


z-index всегда применяется совместно с position, поскольку без него просто не работает,
а используется он для позиционирования блоков по оси z - т. е. блоки с меньшими z располагаются на заднем плане, а блоки с большим z - поверх них.

Именно для такого позиционирования и правильно применять атрибут position, а во всех остальных ситуациях старайтесь обходиться простыми float + margin как было показано выше или вообще сверстать нужную часть страницы не блоками DIV, а при помощи TABLE (таблицы).

Считать, что "ДИВНАЯ" верстка более современна, а "ТАБЛИЧНАЯ" якобы устарела - в корне неправильно !

Почему ?

Да потому что бывают такие ситуации в верстке, когда обойтись без таблиц просто невозможно, особенно в плане поддержки очень старых браузеров, таких как IE 6, IE 5.5 или ниже.

Простой пример - красивое оформление форм - с позиционированием элементов по левому, правому краю. (см. например ФОРМУ ВХОДА нашего сайта или ФОРМУ для отправки комментариев).

Главное правило тут такое - старайтесь применять верстку DIVами, а когда это невозможно - таблицами. Тогда ваша верстка будет более универсальной и в то же время - отвечать требованиям времени.

На сегодня наш урок закончен, материала вам думаю будет достаточно и для экспериментов и для осмысления.

Удачи !

[к содержанию]

megainformatic live chat
Начать беседу
X
 

Оставленные комментарии



fle game engine - движок для создания игр
fle game engine - движок для создания игр


Something: Unexplained 2 captive of desires / Нечто: Необъяснимое 2 в плену желаний
Костя Коробкин Комикс Коллекционное издание - 6 комиксов, 81 страница, 220 mp3 треков
megainformatic Размещение баннерной рекламы у нас
Время загрузки: 1,2620