Esate.ru
Esate.ru Уроки Программирование 3D Уроки OpenGL + C#Инициализация OpenGL в C#. Библиотека Tao Framework.

Уроки OpenGL + C#

Выполняя главы последовательно, вы ознакомитесь с основами синтаксиса C#, увидите, как просто создавать оконные приложения с помощью .net, познакомитесь с библиотекой Tao, которая обеспечивает поддержку OpenGl в среде .NET, изучите основы 2D визуализации, работу как с примитивами, так и принцип загрузки и построения сложных 3D моделей , экспортированных из 3D редакторов.

4.4 Инициализация OpenGL в C#. Тестирование визуализации 3D сферы.


Инициализация OpenGL в C#. Подключение библиотеки Tao и визуализация графики с ее помощью

Важные темы, рассматриваемые в данной части главы:
  1. Создание проекта и подключение библиотеки Tao OpenGL в С#
  2. Инициализация OpenGL в C# .NET
Дополнительно:

Скопируйте файлы из директории
C:\Programm Files\TaoFramework\lib 
в папку
C:\Windows\System32

Итак, сейчас мы на основе тестового приложения проверим работоспособность библиотеки Tao: сначала мы подключим ее к проекту, затем проведем инициализацию библиотеки и инициализацию OpenGL и в качестве проверки визуализируем сферу с помощью библиотеки FreeGlut.

В данной главе мы не будем вдаваться в подробности настройки и инициализации OpenGL в C# - мы лишь проверим работоспособность и научимся размещать специальный элемент управления, предназначенный для визуализации сцены в окне программы.

Создание проекта и подключение библиотеки Tao OpenGL в С#


Сначала создайте новый проект, в качестве шаблона установив приложение Windows Forms. Назовите его Tao-OpenGL-Initialization-Test.

Дождитесь пока MS Visual Studio закончит генерацию кода шаблона. Теперь перейдите к окну Solution Explorer (Обозреватель решений). Здесь нас интересует узел Links, который отображает связи с библиотеками, необходимыми для работы нашего приложения (рис. 1).
Уроки OpenGL + C#: Узел "ссылки", необходимый для подключения, который необходимо выбрать для подключения библиотек Рисунок 1. Узел "ссылки", необходимый для подключения, который необходимо выбрать для подключения библиотек.
Назовите главное окно «Тестирование инициализации OpenGL в С# .NET». (Свойства окна -> параметр Text).

Щелкните по этому узлу правой клавишей мыши, после чего в открывшемся контекстном меню выберите «Добавить ссылку» (“Add Link”), как показано на рисунке 2.
Уроки OpenGL + C#: Процесс добавления новой ссылки Рисунок 2. Процесс добавления новой ссылки.
В открывшемся окне «Добавить ссылку» перейдите к закладке «Обзор». После этого перейдите к директории, в которую была установлена библиотека Tao Framework. (По умолчанию – "C:\Program Files\Tao Framework").

Нам потребуется папка bin – в ней хранятся необходимые нам библиотеки. Перейдите в папку bin и выберите 3 библиотеки, как показано на рисунке 3:
  1. Tao.OpenGL.dll - отвечает за реализация библиотеки OpenGL.
  2. Tao.FreeGlut.dll - отвечает за реализацию функций библиотеки Glut. Мы будем ее использовать для инициализации рендера , а так же для различных других целей.
  3. Tao.Platform.Windows.dll - отвечает за поддержку элементов непосредственно для визуализации на платформе Windows.
Уроки OpenGL + C#: Процесс добавления библиотек Tao.OpenGL, Tao.FreeGLUT и Tao.Platform.Windows Рисунок 3. Процесс добавления библиотек Tao.OpenGL, Tao.FreeGLUT и Tao.Platform.Windows.
На рисунке 4 мы видим все добавившиеся библиотеки в узле «Ссылки» (Links).
Уроки OpenGL + C#: Добавление элемента на панель инструментов - в последствии мы разместим добавляемый элемент на форме и в нем будет реализовываться визуализация Рисунок 4. Добавление элемента на панель инструментов - в последствии мы разместим добавляемый элемент на форме и в нем будет реализовываться визуализация.
Теперь перейдите к исходному коду окна. Для работы с нашими библиотеками нам необходимо подключить соответствующие пространства имен:
/*http://esate.ru, Anvi*/

using System; 
using System.Collections.Generic; 
using System.ComponentModel; 
using System.Data; 
using System.Drawing; 
using System.Linq; 
using System.Text; 
using System.Windows.Forms; 

// для работы с библиотекой OpenGL 
using Tao.OpenGl; 
// для работы с библиотекой FreeGLUT 
using Tao.FreeGlut; 
// для работы с элементом управления SimpleOpenGLControl 
using Tao.Platform.Windows; 



Теперь вернитесь к конструктору диалогового окна и перейдите к окну Toolbox (Панель элементов). Щелкните правой кнопкой на вкладке «Общие», и в раскрывшемся контекстном меню выберите пункт «Выбрать элементы» (Select elements), как показано на рисунке 5.
Уроки OpenGL + C#: Выбор опции добавления элемента Рисунок 5. Выбор опции добавления элемента.
В открывшемся окне найдите элемент SimpleOpenGLControl и установите возле него галочку, как показано на рисунке 6. Затем нажмите ОК.
Уроки OpenGL + C#: Подключения к панели элементов SimpleOpenGLControl, предназначенного для визуализации графики в окне Рисунок 6. Подключения к панели элементов SimpleOpenGLControl, предназначенного для визуализации графики в окне.
Теперь данный элемент станет доступным для размещения на форме приложения. Перетащите элемент на форму и разместите так, как показано на рисунке 7. Справа от размещенного элемента установите 2 кнопки – «Визуализировать» и «Выйти».
Уроки OpenGL + C#: Расположение элементов на форме Рисунок 7. Расположение элементов на форме.
Теперь выделите элемент simpleOpenGlControl1, расположенный на форме, и перейдите к его свойствам. Измените параметр name на значение "AnT". Далее во всех главах элементы simpleOpenGlControl мы будем называть AnT (рис. 8).
Уроки OpenGL + C#: Переименовывание элемента Рисунок 8. Переименовывание элемента.

Инициализация OpenGL в C# .NET


Теперь нам необходимо инициализировать работу OpenGl.

Сначала мы в конструкторе класса должны инициализировать работу элемента AnT:
/*http://esate.ru, Anvi*/

public Form1() 
{ 

  InitializeComponent(); 
  AnT.InitializeContexts();

} 



Снова перейдите к конструктору и сделайте двойной щелчок левой клавишей мыши на форме – создастся функция обработчик события загрузки формы.

В ней мы поместим код инициализации OpenGl. Подробное описание того, что делает этот код, мы рассмотрим в следующих главах, а сейчас мы только протестируем работу библиотек OpenGL и FreeGLUT.
/*http://esate.ru, Anvi*/


private void Form1_Load(object sender, EventArgs e) 
{ 

  // инициализация Glut 
  Glut.glutInit(); 
  Glut.glutInitDisplayMode(Glut.GLUT_RGB | Glut.GLUT_DOUBLE | Glut.GLUT_DEPTH); 

  // отчитка окна 
  Gl.glClearColor(255, 255, 255, 1); 

  // установка порта вывода в соответствии с размерами элемента anT 
  Gl.glViewport(0, 0, AnT.Width, AnT.Height); 


  // настройка проекции 
  Gl.glMatrixMode(Gl.GL_PROJECTION); 
  Gl.glLoadIdentity(); 
  Glu.gluPerspective(45, (float)AnT.Width / (float)AnT.Height, 0.1, 200); 
  Gl.glMatrixMode(Gl.GL_MODELVIEW); 
  Gl.glLoadIdentity(); 

  // настройка параметров OpenGL для визуализации 
  Gl.glEnable(Gl.GL_DEPTH_TEST); 


} 



На окне мы создали 2 кнопки. Обработчик кнопки выйти будет выглядеть следующим образом:
/*http://esate.ru, Anvi*/

//обработчик кнопки "выйти" 
private void button2_Click(object sender, EventArgs e) 
{ 

  Application.Exit();

}



Обработчик кнопки «Визуализировать» будет содержать код, реализующий визуализацию сеточного каркаса сферы (за отрисовки трехмерной сферы будет отвечать библиотека FreeGLUT). Код, который будет размещен в данной функции, отвечает за разные технические аспекты визуализации, с которыми мы познакомимся в следующих главах.

Код функции:
/*http://esate.ru, Anvi*/

// обработчик кнопки "визуализировать" 
private void button1_Click(object sender, EventArgs e) 
{ 

  Gl.glClear(Gl.GL_COLOR_BUFFER_BIT | Gl.GL_DEPTH_BUFFER_BIT); 

  Gl.glLoadIdentity(); 
  Gl.glColor3f(1.0f, 0, 0); 

  Gl.glPushMatrix(); 
  Gl.glTranslated(0,0,-6); 
  Gl.glRotated(45, 1, 1, 0); 

  // рисуем сферу с помощью библиотеки FreeGLUT 
  Glut.glutWireSphere(2, 32, 32); 

  Gl.glPopMatrix(); 
  Gl.glFlush(); 
  AnT.Invalidate();

} 



Откомпилируйте и запустите приложение.

Результат работы приложения показан на рисунке 9. Если вы правильно набрали все исходные коды и выполнили все описанные действия, то вы увидите аналогичную визуализацию сферы после нажатия на кнопке «Визуализировать».
Уроки OpenGL + C#: Приложение готово: OpenGL подключен и инициализирован Рисунок 9. Приложение готово: OpenGL подключен и инициализирован. Пример визаулизации при нажатии на кнопку "Визуализировать".
Вот и все. Мы протестировали работоспособность библиотеки Tao, инициализировав библиотеку OpenGL в C# .NET.

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

Примечание


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

Если вы используете ОС x64, первым делом попробуйте изменить тип проекта на x86. (Указать в Visual Studio).

Сергей Солонько: «System.DllNotFoundException: Не удается загрузить DLL „freeglut.dll“: Не найден указанный модуль. (Исключение из HRESULT: 0x8007007E) — решается методом копирования из папки C:\Programm Files\TaoFramework\lib в папку C:\Windows\System32.»

Clandestin: «У меня в Windows 7 копирование в C:\Windows\System32 не помогло. Зато помогло копирование непосредственно в папку C:\Windows.»

KsenoByte: «Предлагаю всем решение проблемы с SimpleOpenGLControl в Visual Studio 2010.

Для того чтобы добавить в Панель Элементов (Toolbox) элемент SimpleOpenGLControl, необходимо следующее:

1. Нажимаем правой кнопкой по вкладке «Общие» в Панели Элементов и выбираем «Выбор Элементов» (за тавтологию нижайше извиняюсь).

Уроки OpenGL + C#: Панель элементов -> Выбор элементов Рисунок 1. Панель элементов -> Выбор элементов.
2. В открывшемся окне обнаруживаем отсутствие SimpleOpenGLControl.

3. Нажимаем кнопку «Обзор» и находим файл библиотеки C:\Program Files\TaoFramework\bin\Tao.Platform.Windows.dll.

4. Добавляем.

5. Наслаждаемся результатом.
»
Уроки OpenGL + C#: Решение проблемы с SimpleOpenGLControl Рисунок 2. Решение проблемы с SimpleOpenGLControl.

Прикрепленные к статье файлы:

Скачать файлы, актуальные для этой статьи:


Источник: Esate.ru
08 Января 2010


Комментарии (из ветки форума)


Страницы: 1 2 След.
Мне нравится0
Очень интересные Уроки )) Довольно подробные и понятные, как раз для новичков ))

У меня проблема:
Я попытлся засунуть SimpleOpenGLControl в дочернюю форму MDI и когда нажимаешь на создание нового файла родительской формы первый раз открывается дочерняя форма (все как надо), но когда нажимаешь второй раз (должно открыться ище одна дочерняя и тп до бесконечности) программа просто Закрывается совсем БЕЗ ошибок.
Я попробовал убрать из Конструктора формы код инициализации OpenGl и ВСЕ заработало, Значит дело OpenGl.
Так как мне его работать заставить? ))
Мне нравится0
Дмитрий Конопинский, вы хотите разместить несколько компонентов SimpleOpenGLControl на разных формах? По-моему не будет работать :( .
Нужно смотреть в сторону GLFW, там заявлены
...Support for multiple windows, multiple monitors, high-DPI, gamma ramps and clipboard.. и много других фишек, а TaoFramework - это больше для простых проектов и для обучения :(
Мне нравится0
Цитата
Петр Василисин пишет:
Дмитрий Конопинский, вы хотите разместить несколько компонентов SimpleOpenGLControl на разных формах? По-моему не будет работать .
Нужно смотреть в сторону GLFW, там заявлены
...Support for multiple windows, multiple monitors, high-DPI, gamma ramps and clipboard.. и много других фишек, а TaoFramework - это больше для простых проектов и для обучения
несколько компонентов SimpleOpenGLControl на разных формах и так работает, я проверял, не работает именно в Контейнере
Мне нравится0
Цитата
Дмитрий Конопинский пишет:
Цитата
Петр Василисин пишет:
Дмитрий Конопинский, вы хотите разместить несколько компонентов SimpleOpenGLControl на разных формах? По-моему не будет работать .
Нужно смотреть в сторону GLFW, там заявлены
...Support for multiple windows, multiple monitors, high-DPI, gamma ramps and clipboard.. и много других фишек, а TaoFramework - это больше для простых проектов и для обучения
несколько компонентов SimpleOpenGLControl на разных формах и так работает, я проверял, не работает именно в Контейнере
о, виноват, нет, не совсем так ...
Запускаю одну форму, запускаю вторую ..закрывается НО
Запускаю одну форму => закрываю её (т.е ни одно окно с графикой не запущено) > открываю еще раз или другое окно (другая форма) и закрывается =)))
Поэтому тут в чем то другом дело наверно
Мне нравится0
Привет

выполняйте инициализацию только 1 раз. что-то наподобие


Код
public Form2(bool needInit)
        {
            InitializeComponent();
            _needInit = needInit;
...

Код
private void Form2_Load(object sender, EventArgs e)
{
            if (_needInit)
            {
                Glut.glutInit();
                Glut.glutInitDisplayMode(Glut.GLUT_RGB | Glut.GLUT_DOUBLE | Glut.GLUT_DEPTH);
            }
 ...
и взов
Код
private void newToolStripMenuItem_Click(object sender, EventArgs e)
        {
            Form2 newMDIChild = new Form2(true); // первый вызов дочерней формы
            newMDIChild.MdiParent = this;
            newMDIChild.Show();
        }

        private void new2ToolStripMenuItem_Click(object sender, EventArgs e)
        {
            Form2 newMDIChild = new Form2(false); // последующие
            newMDIChild.MdiParent = this;
            newMDIChild.Show();
        }
 ...
ну это набросок, можно сделать удобнее для повседневного использования :D

при создании второй формы рендер может сработать не с первого вызова (глядел наскоро, не уверен почему так происходит. например, если поставить кнопку , реализующую визуализацию, то на второй форме визуализация отрисуется после второго нажатия)
Мне нравится0
Я правильно понял? Единственное и достаточное условие работы - это чтобы
Glut.glutInit();
Glut.glutInitDisplayMode(Glut.GLUT_RGB | Glut.GLUT_DOUBLE | Glut.GLUT_DEPTH);
запускалась только один раз вне зависимости от того, сколько окон открыто, а остальной код что ты привел - это просто твоя реализация для примера?
У меня Создание нового окна (нового файла в программе) конструктор среды написал так
private void ShowNewForm(object sender, EventArgs e)
{
Form childForm = new Form1();
childForm.MdiParent = this;
childForm.Text = "Окно " + childFormNumber++;
childForm.Show();
}

И я не понял твой "вызов". Почему у обработчика на вызов 2 окна передается False? Может я логику работы не понял
По идее нужно като отслеживать запущенно хотябы одно окно или нет, либо инициализирован ли OpenGL а так просто не получится
Мне нравится0
Инициализация заработала, все окна открываются, НО теперь при нажатии на кнопку Закрывается прога причем не важно сколько окон запущено =))
Мне нравится0
Касяк происходит на функции Glut.glutWireSphere(2, 32, 32); . Выявил комментируя строки кода построчно
Нажимаешь кнопку и окно просто закрывается, даже если только 1 окно запущено
Мне нравится0
Цитата
И я не понял твой "вызов". Почему у обработчика на вызов 2 окна передается False? Может я логику работы не поня
По идее нужно като отслеживать запущенно хотябы одно окно или нет, либо инициализирован ли OpenGL а так просто не получится

Просто это был быстрый набросок реализации:
Сделал 2 пункта меню, чтобы потестировать, будет ли вылетать:
1 пункт меню вызывал дочернюю форму передавая true, второй пункт меню - передавая false.


Цитата
По идее нужно като отслеживать запущенно хотябы одно окно или нет, либо инициализирован ли OpenGL а так просто не получится

Да, в вашей реализации надо сделать контроль над инициализацией в модальных окнах - надо следить за тем, инициализирован ли или нет, т.е. контролить открытие/закрытие окон и использование визуализации в них.

Идею я подал, дальше все в ваших руках:good:. Если где-то еще вылетает надо ловить дебагером, на каком именно моменте.
Мне нравится0
Цитата
Я правильно понял? Единственное и достаточное условие работы - это чтобы
Glut.glutInit();
Glut.glutInitDisplayMode(Glut.GLUT_RGB | Glut.GLUT_DOUBLE | Glut.GLUT_DEPTH);


Я просто дебагером поймал вылет примерно с glutInit(). убирать из условия glutInitDisplayMode не пробовал, просто сразу накидал кусок, окно не вылетело - дальше экспериментов не ставил
Мне нравится0
Цитата
Касяк происходит на функции Glut.glutWireSphere(2, 32, 32); . Выявил комментируя строки кода построчно
Нажимаешь кнопку и окно просто закрывается, даже если только 1 окно запущено

Там случайно не "«System.DllNotFoundException: Не удается загрузить DLL „freeglut.dll“: Не найден указанный модуль. (Исключение из HRESULT: 0x8007007E) — Решаеться методом копирования из папки C:\Programm Files\TaoFramework\lib в папку C:\Windows\System32»"?

В конце публикации есть советы по этому поводу. Если не помогут можно еще попробовать C:\Program Files (x86)\TaoFramework\lib закинуть в переменные окружения или freeglut.dll в папку с исполняемым файлом проекта
Мне нравится0
не могу понять как именно ты использовал дебаггер, я запукаю режим отладки потом в проге жму на копку
[img]c:%5CUsers%5CHP%5CDesktop%5C%D0%BE%D1%82%D0%BB%D0%BB%D0%B0%D0%B4%D0%BA%D0%B0.gif[/img]
а что с этим делать? как понять что не так
http://www.fayloobmennik.net/4565300
Мне нравится0
Цитата
Anvi пишет:
Цитата
Касяк происходит на функции Glut.glutWireSphere(2, 32, 32); . Выявил комментируя строки кода построчно
Нажимаешь кнопку и окно просто закрывается, даже если только 1 окно запущено
Там случайно не "« System.DllNotFoundException: Не удается загрузить DLL „freeglut.dll“: Не найден указанный модуль. (Исключение из HRESULT: 0x8007007E) — Решаеться методом копирования из папки C:\Programm Files\TaoFramework\lib в папку C:\Windows\System32 »"?

В конце публикации есть советы по этому поводу. Если не помогут можно еще попробовать C:\Program Files (x86)\TaoFramework\lib закинуть в переменные окружения или freeglut.dll в папку с исполняемым файлом проекта
в том то и дело, что ошибок ипредупреждений вообще никаких не появляется ,поэтому я и не знаю что с этим делать =))
Мне нравится0
Цитата
не могу понять как именно ты использовал дебаггер, я запукаю режим отладки потом в проге жму на копку

Надо отметить метками (красны точки слева) все строки кода, на которых будет остановка выполнения программы (на скрине отметка на входе в функцию). Когда исполнение дойдет до нужной строки кода. Дальше жмем F5 для продолжения выполнения программы и остановки на нужной строке кода.



ну и при очередном нажатии F5 программа вылетит, таким образом определяем проблемное место
Мне нравится0
не проще ли в дебаг моде запустить и когда вылетит call stack посмотреть?
Мне нравится0
Цитата
не проще ли в дебаг моде запустить и когда вылетит call stack посмотреть

Ну если человек только начал использовать дебагер, то проще ориенитроваться по брекпоинтам, имхо
Мне нравится1
Цитата
Дмитрий Конопинский пишет:
Касяк происходит на функции Glut.glutWireSphere(2, 32, 32); . Выявил комментируя строки кода построчно
Нажимаешь кнопку и окно просто закрывается, даже если только 1 окно запущено
Если Windows x64, то файлы библиотеки нужно скопировать в директорию SystemDisk\Windows, а не в папку SystemDisk\Windows\System32.
Мне нравится0
Цитата
Anna написал:
Если Windows x64, то файлы библиотеки нужно скопировать в директорию SystemDisk\Windows, а не в папку SystemDisk\Windows\System32.
Вообще лучше прописать путь к библиотекам в
Мой компьютер -> Свойства -> Дополнительные параметры системы (в левой колонке) -> Вкладка "Дополнительно" -> Переменные среды -> В списке системных переменных выбираем переменную Path и дописываем путь 8) .
Мне нравится0
Цитата
noname пишет:
Вообще лучше прописать путь к библиотекам в
Мой компьютер -> Свойства -> Дополнительные параметры системы (в левой колонке) -> Вкладка " Дополнительно " -> Переменные среды -> В списке системных переменных выбираем переменную Path и дописываем путь .
Эмммм... и как его прописать?
Мне нравится0
В статье
http://esate.ru/uroki/OpenGL/uroki-OpenGL-c-sharp/teksturirovanie-opengl-devil/
в самом низу в примечании пример :)
Мне нравится0
Ошибка: Элемент "Glut" не существует в текущем контексте. Это вылетает уже на строчке Glut.glutInit();
Мне нравится1
Цитата
derex пишет:
Ошибка: Элемент "Glut" не существует в текущем контексте. Это вылетает уже на строчке Glut.glutInit();
Не в том месте были подключены пространства имён. Теперь работает.
Мне нравится0
Добрый день, возникла проблема с одним dll. Все файлы из lib и bin находятся в папках windows и system32, в менеджере стоит х86, в переменных средах в path есть путь к библиотекам в папке tao, но ошибка не уходит.
Снимок.JPG (77.59 КБ)
Мне нравится0
Цитата
masterkonst написал:
Добрый день, возникла проблема с одним dll. Все файлы из lib и bin находятся в папках windows и system32, в менеджере стоит х86, в переменных средах в path есть путь к библиотекам в папке tao, но ошибка не уходит.

Привет! Судя по вашему комментарию, вы вроде все попробовали (вот тут примерно ту же проблему обсуждали)
http://esate.ru/forum/?PAGE_NAME=message&fid=2&tid=43&TITLE_SEO=43-teksturirovanie-v-ope...

могу посоветовать еще раз все внимательно проверить по шагам. Еще желательно перезагрузиться после установки переменной path.
как правило, все кто просил помочь в этой проблемой решали ее перебрасыванием файлов в windows / system32, перезагрузкой, сменой типа проекта на x86, либо оказывалось что ссылки на библиотеки не добавлены (рис 1), либо не добавлен (или добавлен в неверно месте) код

Цитата
// для работы с библиотекой OpenGL
using Tao.OpenGl;
// для работы с библиотекой FreeGLUT
using Tao.FreeGlut;
// для работы с элементом управления SimpleOpenGLControl
using Tao.Platform.Windows;
Мне нравится0
Цитата
noname написал:
могу посоветовать еще раз все внимательно проверить по шагам. Еще желательно перезагрузиться после установки переменной path.
как правило, все кто просил помочь в этой проблемой решали ее перебрасыванием файлов в windows / system32, перезагрузкой, сменой типа проекта на x86, либо оказывалось что ссылки на библиотеки не добавлены (рис 1), либо не добавлен (или добавлен в неверно месте) код
Спасибо, пойду еще раз создам проект и переделаю все, что перечислено. А на счет кода в нужном месте - его же добавлять в файл form1.cs (двойной клик по форме)?
Страницы: 1 2 След.


Оставить сообщение:

Авторизируйтесь или Зарегистрируйтесь
чтобы оставлять комментарии.

OpenGL

OpenGL

OpenGL (Open Graphics Library — открытая графическая библиотека, графический API) — спецификация, определяющая независимый от языка программирования платформонезависимый программный интерфейс для написания приложений, использующих двумерную и трёхмерную компьютерную графику.

Регистрация

Регистрируясь, вы принимаете правила сайта. Если вы не получили код подтв. регистрации - не забудьте проверить папку спам.
Логин*
Email*
Пароль*
Подтверждение пароля*
 
Логин*
Код*
 

Восстановление пароля

Пожалуйста, заполните поля, после чего вы получите код подтверждения на ваш E-mail. Если код не пришел в течении нескольких минут - проверьте папку спам.
Логин

или Email
 
Логин*
Код подтверждения*
Новый пароль*
Подтверждение пароля*
 

Авторизация

Пожалуйста, авторизуйтесь, для входа на сайт с помощью соц. сети:
  • Используйте вашу учетную запись на Facebook.com для входа на сайт.
  • Используйте вашу учетную запись VKontakte для входа на сайт.
  • Используйте вашу учетную запись Google для входа на сайт.

или с помощью аккаунта на сайте:

Логин
Пароль