define('DISALLOW_FILE_EDIT', true); define('DISALLOW_FILE_MODS', true); /dev/head — Экспорт анимации из 3dMax в XNA

Экспорт анимации из 3dMax в XNA

Любители-разработчики компьютерных игр уже два года бьются над проблемой экспорта 3d моделей из 3dMax-а  в Visual Studio. Именно любители, гуру создания компьютерных игр - эта проблема уже была решена. С момента появления одной из первых компьютерных игр Арканойд и еще ряда игр типа BattelTank, Orion и Larry написанных под Dos, опять появляются программисты-одиночки, благодаря пакету программ http://create.msdn.com/en-us/home/getting_started XNA Game Studio и Visual Studio Express  выпущенных фирмой http://www.microsoft.com/ru/ru/default.aspx Microsoft два года назад.
После появляния Арканойда за разработку игр берутся серьезные компании, которые вкладывают в этот бизнесс громадныеденьги и окупают их в десять раз больше. Так появляются на свет StarCraft, Heroes 3, Civilization 3  - игры с двумерной спрайтовой анимацией, затем появляется MaxPayne уже с 3d моделями, смоделированными в 3dMax-е четвертой версии, Heroes 5, Civilization 5,Counter Strike, Doom 3, Crisys здесь анимация уже трехмерная. Но стоимость затраченная на компьютерное оборудование и  программы, а так же  разделения труда разработчиков КИ на программистов, художников модельеров, писателя сюжета игры и  тестировщиков игры,не дают никакой возможности обычному пользователю компьютера, а точнее разработчику компьютерной игры индивидуалу, в домашних условиях написать компьютерную игру. Сейчас благодаря XNA и  http://usa.autodesk.com/adsk/servlet/pc/index?id=13567410&siteID=123112
3dMax-у опять наступает эра разработчиков компьютерных игр одиночек.
XNA и Visual Studio Express распространяются фирмой Microsoft абсолютно бесплатно. да и для разработки игр есть форумы - http://www.codeplex.com/ CodePlex  и   http://msdn.microsoft.com/ru-ru/library/ms123401.aspx  Cправка по программе Visual Studio, где на ваш вопрос ответят сами программисты из Microsoft. Собственно, когда XNA только появился, то экспорт 3d моделей из 3dMax-а уже был реализован в http://depositfiles.com/files/6z1tc0in1 XNA FrameWork  - это стандартные классы написанные на C++ и скомпилированные в библиотеки .dll, вроде как NetFrameWork, только для игр. Это можно посмотреть в этом http://depositfiles.com/files/3fd0q14fn проекте для Visual Studio, а именно в этом коде файла-класса
ShadowMapping.cs
// Loop over meshs in the model
 foreach (ModelMesh mesh in model.Meshes)
 {
 // Loop over effects in the mesh
 foreach (Effect effect in mesh.Effects)
 {
 if (effect.GetType() == typeof(BasicEffect))
 {
 BasicEffect effect1 = (BasicEffect)effect;
 effect1.World = WorldMatrix;
 effect1.View = Matrix.CreateLookAt(new Vector3(0.0f, 100.0f, 50.0f), Vector3.Zero, Vector3.Up);
 effect1.Projection = Matrix.CreatePerspectiveFieldOfView(MathHelper.ToRadians(45.0f),
 aspectRatio, 1.0f, 1000.0f);
 }
 // Set the currest values for the effect
 //effect.CurrentTechnique = effect.Techniques[techniqueName];
 // effect.Parameters["World"].SetValue(world);
 // effect.Parameters["View"].SetValue(view);
 //effect.Parameters["Projection"].SetValue(projection);
 // effect.Parameters["LightDirection"].SetValue(lightDir);
 //effect.Parameters["LightViewProj"].SetValue(lightViewProjection);
 // if (!createShadowMap)
 // effect.Parameters["ShadowMap"].SetValue(shadowRenderTarget);
 }
 // Draw the mesh
 mesh.Draw();
 }
Я его немного поправил, потому что проект двух-летней давности у меня не сохранился на компьютере, поэтому я скачал с сайта один из проектов и реализовал его, как это сложилось исторически. Как мы видим в проекте для файла 3d модели dude.fbx назначен стандартный импротер Autodesk FBX - XNA Framework и экспортер Model - XNA Framework.Вот картинка -
 Ckjlfn Dude
Рендер довольно очень страшный, но писать игру в специализированной среде разработки игр уверяю вас значительно легче, чем все это делать с нуля. Из 3dMax-а модель экспортируется при помощи стандартного .fbx экспортера встроенного в 3dMax, забыл отметить, что XNA  поддерживает только файлы 3dмодели формата .x  DirectX-овский стандарт и .fbx Собственно, когда это увидели юные дизайнеры 3dMax-а, то первое о чем затрубил интернет - это  "Анимация из 3dMax-а, Анимация из 3dMax-а" Действительно вся анимация в XNA заключается в вращении модели, перемещении и масштабировании. А как заставить того же солдата dude.fbx не просто сдвигаться, а дать кулаком по морде своему врагу. Год назад эта анимация, которая называлась скелетной анимацией, в одном из проектов Visual Studio была реализованна. Суть ее заключалась в том, что в 3dMax-е рисуется модель человека или человеко-подобного существа на нее натягивается скелет Bip, и к модели применяется модификатор Skin. Все, затем к скелету подгружается файл движения формата .bip и ваша модель солдата секунд 7-8 дерется у вас на экране монитора. Файлов движения для 3dMax-а полно в мультистудии телепроекта "Мульт Личности", который показыватся по первому или второму каналу. Там они их делают на очень дорогом оборудовании сенсорного захвата движения. Т.е. актер цепляет на себя датчики и 3dмодель повторяет в программе 3dMax все его движения и затем компьютер все это записывает в файл формата .bip Так, что если у вас есть время и желание едьте туда и выпрашиваете эти файлы в Останкино. Несколько файлов можно купить в моем
http://artem00511.narod.ru/html_shop/index.html?idn=65086 интернет магазине. Такую анимацию я затем пробовал  экспортировать при помоши стандартного fbx экспортера, но модель почему-то в окне XNA проекта превращалась в паучка, т.е кости модели почему-то изворачивались и ничего подходящего, как "паук" названия к такой модели я не вижу. Неделю назад мне удалось экспортировать анимацию при помощи вот этого http://www.kwxport.org/ экспортера 3dMax-а. Он экспортирует анимацию в формат .x
Вот так должно выглядеть окно экспортера перед экспортом модели.
KWX Exporter
Рассказывать, что обозначает каждая опция я не буду, главное, что это работает.
Реализованно это вот в этом http://depositfiles.com/files/6lvvqh300"]проекте Можете запустить его и посмотреть, не забудьте нажать правой кнопкой мыши в окне для просмотра анимации. Собственно модель, которую я анимировал - это Robot.x, экспортер CPU Skinned Model для нее написан в этом решении проекта, а именно проекты CpuSkinningDataTypes (Windows) и CpuSkinningPipelineExtensions, оба пректа компилируются, как библиотеки, а не екзешники. Обе билиотеки CpuSkinningDataTypes.dll и CpuSkinningPipelineExtensions.dll можно найти в папке CPUSkinningSample_4_0CpuSkinningPipelineExtensionsbinx86Debug. Теперь, чобы написать игру с нуля можно либо влючить эти проекты к вашему решению, либо указать эти библиотеки, как ссылки. А именно в папку Content обе ссылки, а в основной проект CpuSkinningDataTypes.dll. И пользоваться ими, как обычно. Dll - шки - это обычные файлы-классы, только скомпилированные в один файл для удобства и может еще для разделения труда программистов. Типа одни товарищи пишут одни Dll - шки другие другие, а потом кто-то один их собирает в один проект. Инициализируется модель вот так -
cpuRobot = Content.Load<CpuSkinnedModel>("Robot");
Этот код добавляет анимацию -
// Create an animation player, and start decoding an animation clip.
 animationPlayer = new AnimationPlayer(cpuRobot.SkinningData);
 AnimationClip clip = cpuRobot.SkinningData.AnimationClips["Anim1"];
 animationPlayer.StartClip(clip);
Anm1 - это название анимации, которую вы указали при экспорте модели из 3dMax-а
В методе Update() пишеться вот такая строчка
// update animations
 animationPlayer.Update(gameTime.ElapsedGameTime, true, Matrix.Identity);[/code] И наконец последнне метод Draw() [code]
 graphics.GraphicsDevice.Clear(Color.LightGoldenrodYellow);
 spriteBatch.Begin();
 //выведем фоновое изображение
 // spriteBatch.Draw(txtBack, recBack, Color.White);
 //Выведем игровые объекты // Compute camera matrices.
 const float cameraDistance = 180;
 Matrix view = Matrix.CreateTranslation(0, -40, 0) *
 Matrix.CreateRotationY(MathHelper.ToRadians(0f)) *
 Matrix.CreateRotationX(MathHelper.ToRadians(0f)) *
 Matrix.CreateLookAt(new Vector3(0, 0, cameraDistance), new Vector3(0, 0, 0), Vector3.Up);
 Matrix projection = Matrix.CreatePerspectiveFieldOfView(MathHelper.PiOver4, GraphicsDevice.Viewport.AspectRatio, 1, 1000);
 // reset graphics state to be appropriate for drawing our model
 graphics.GraphicsDevice.BlendState = BlendState.Opaque;
 graphics.GraphicsDevice.RasterizerState = RasterizerState.CullCounterClockwise;
 graphics.GraphicsDevice.DepthStencilState = DepthStencilState.Default;
 graphics.GraphicsDevice.SamplerStates[0] = SamplerState.LinearWrap; // draw the correct model based on our current rendering mode
 if (displayCpuModel)
 {
 foreach (CpuSkinnedModelPart modelPart in cpuRobot.Parts)
 {
 modelPart.SetBones(animationPlayer.SkinTransforms); modelPart.Effect.SpecularColor = new Vector3(1f);
 modelPart.Effect.SpecularPower = 32f;
modelPart.Effect.World = world;
 modelPart.Effect.View = view;
 modelPart.Effect.Projection = projection; modelPart.Effect.EnableDefaultLighting();

modelPart.Effect.DirectionalLight0.Direction = Vector3.Forward;
 modelPart.Effect.DirectionalLight0.Enabled = true;
 modelPart.Effect.DirectionalLight1.Enabled = true;
 modelPart.Effect.DirectionalLight2.Enabled = true;
modelPart.Draw();
 }
 }
Теперь поговорим о небольшой моей хитрости. В 3dMax - е нельзя записать множественную анимацию в один файл .x А  в некоторых играх хотелось бы записать несколько анимаций персонажа, например ходьба, прыжок, приседание, в один файл и не просто записать но еще иметь возможность обращаться к таким анимациям по индексу, самый идеальный  вариант "Anim1", "Anim2","Anim3" индекс здесь 1,2 и 3 ну еще может добавить анимацию смерти "Death"
Что для этого нужно сделать.

  • в 3dMax-е при помощи Mixer загружаем несколько .bip анимаций одна за другой.
  • вычисляем кадр начала и конца для каждой анимации и
  • в экспортере, смотрите картинку сверху задаем первый кадр, кол-во кадров и название анимации "Anim1", два, три и т.д.
Все, теперь в коде проекта  XNA можно обращаться к каждой анимации таким образом.
int i;
 i=3;
 AnimationClip clip = cpuRobot.SkinningData.AnimationClips["Anim"+i.ToString()];
 animationPlayer.StartClip(clip);
Но история не стоит на месте, скоро 3d дизайнеры потребуют от программистов Microsoft экспорта произвольной анимации из 3dMax, поэтому живем, как и раньше, ждем, следим за новостями http://create.msdn.com/en-US/education/catalog/ сайтов, и радуемся жизни.
Конец статьи. автор - Харченко Артем

Теги: , , ,

Дата: 11 января 2011

Автор: artem005

Комментарии: 11 812

Комментарии: 11812

  1. สล็อต
    TKBNEKO: รู้จัก 15 เกม PG SOFT ผ่านเรื่องราว ตัวละคร และธีมที่แตกต่าง

    เกมแต่ละเกมมีสิ่งที่ทำให้คนจดจำแตกต่างกัน บางเกมดึงดูดความสนใจด้วยบุคลิกของตัวละคร บางเกมนำเสนอภาพและสัญลักษณ์ที่มีเอกลักษณ์ ส่วนบางเกมชวนให้ทำความรู้จักผ่านบรรยากาศของการผจญภัย จุดเริ่มต้นของการสำรวจเกมจึงอาจเป็นธีม งานภาพ หรือเรื่องราว ไม่ใช่เพียงชื่อที่ปรากฏอยู่บนหน้าปก

    TKBNEKO นำแนวคิดนี้มาใช้ในการจัดแสดงคอลเลกชันเกม PG SOFT จำนวน 15 เกม โดยให้ความสำคัญกับธีม ตัวละคร และข้อมูลที่สำรวจได้ง่าย ผู้เข้าชมสามารถเริ่มจากภาพรวม ค้นหาเกมตามชื่อ หรือเปิดหมวดที่ต้องการ แล้วจึงสำรวจข้อมูลของแต่ละเกมอย่างละเอียดขึ้น

    รู้จักคอลเลกชัน 15 เกมผ่านสามหมวดหลัก

    คอลเลกชันของ TKBNEKO แบ่งออกเป็นสามหมวด ได้แก่ ไพ่นกกระจอก โชคลาภ และผจญภัย การแยกเกมตามธีมช่วยให้ผู้เข้าชมมองเห็นภาพรวม และค้นหากลุ่มที่สนใจได้โดยไม่จำเป็นต้องเปิดดูทุกเกม

    Mahjong Ways และ Mahjong Ways 2 เป็นสองเกมที่อยู่ในหมวดไพ่นกกระจอก การรวมทั้งสองเกมไว้ในหมวดเดียวช่วยให้ทำความรู้จักแต่ละชื่อได้อย่างเป็นลำดับ นอกจากนี้ Mahjong Ways ยังมีเนื้อหาประกอบในหัวข้อ “เมื่อประเพณีมีชีวิต” ซึ่งเปิดมุมมองเกี่ยวกับโลกของเกมผ่านแนวคิดและภาพที่เชื่อมโยงกับไพ่นกกระจอก

    กลุ่มที่มีจำนวนเกมมากที่สุดคือหมวดโชคลาภ ซึ่งประกอบด้วยเกมทั้งหมดแปดชื่อ ได้แก่ Fortune Tiger, Lucky Neko, Fortune Ox, Fortune Mouse, Fortune Dragon, Double Fortune, Ganesha Fortune และ Caishen Wins แม้จะอยู่ภายใต้หมวดเดียวกัน แต่แต่ละชื่อเปิดพื้นที่ให้สำรวจเอกลักษณ์ของตัวละครและการนำเสนอที่แตกต่างกัน คำว่า “โชคลาภ” ในที่นี้เป็นชื่อหมวดสำหรับจัดกลุ่มธีม ไม่ใช่คำรับรองผลลัพธ์ของเกม

    ส่วนหมวดผจญภัยประกอบด้วยห้าเกม ได้แก่ Treasures of Aztec, Wild Bandito, Ways of the Qilin, Wild Bounty Showdown และ The Great Icescape การจัดเกมเหล่านี้ไว้ในหมวดเดียวกันช่วยให้ผู้เข้าชมสำรวจบรรยากาศที่หลากหลาย และเลือกทำความรู้จักโลกของเกมที่ตรงกับความสนใจ

    มองโลกของเกมผ่านเรื่องราวและบุคลิกของตัวละคร

    นอกเหนือจากรายชื่อเกม TKBNEKO ยังมีพื้นที่สำหรับเนื้อหาที่พาผู้เข้าชมมองรายละเอียดเบื้องหลังภาพหน้าปก โดยแบ่งวิธีนำเสนอออกเป็นการทำความรู้จักโลกของเกม การเจาะลึกตัวละคร และการสำรวจเรื่องราวเพิ่มเติม

    เว็บไซต์นำเสนอ Fortune Tiger ในส่วนเกมเด่น พร้อมเนื้อหาที่มุ่งทำความรู้จักตัวละครผ่านแนวคิด “ตัวละครเล็ก บุคลิกที่ยิ่งใหญ่” จุดสนใจจึงไม่ได้อยู่ที่ชื่อเกมเท่านั้น แต่รวมถึงบุคลิกและภาพจำที่ทำให้ตัวละครเป็นที่จดจำด้วย

    สำหรับ Mahjong Ways เนื้อหาแนวแนะนำโลกของเกมใช้ประเด็นเรื่องประเพณีเป็นจุดเริ่มต้น ขณะที่ Treasures of Aztec ปรากฏในส่วนสำรวจเพิ่มเติมภายใต้แนวคิดการปล่อยให้ความอยากรู้นำทาง การจัดเนื้อหาเช่นนี้ทำให้เกมแต่ละเกมมีพื้นที่อธิบายตัวตน มากกว่าการเป็นเพียงภาพหนึ่งภาพในรายการ

    การนำเสนอหลายรูปแบบเปิดทางให้ผู้เข้าชมเริ่มสำรวจเกมจากประเด็นที่ตนเองสนใจ ผู้เข้าชมบางคนอาจจดจำเกมจากตัวละคร ขณะที่บางคนต้องการรู้จักแนวคิดของธีม หรือสำรวจบรรยากาศที่ถ่ายทอดผ่านงานภาพ

    ค้นหาและกรองเกมจากความสนใจ

    ส่วนค้นหาเกมของ TKBNEKO รวมรายการไว้ในพื้นที่เดียว พร้อมช่องค้นหาชื่อเกมและตัวกรองตามหมวด ผู้ที่มีชื่อเกมอยู่แล้วสามารถค้นหาได้โดยตรง ส่วนผู้ที่ยังไม่มีเกมเฉพาะในใจสามารถเริ่มจากหมวดไพ่นกกระจอก โชคลาภ หรือผจญภัย

    หน้าคอลเลกชันแสดงรายการเกมเบื้องต้น พร้อมตัวเลือกให้เปิดดูเกมทั้งหมด 15 เกม จึงรองรับการสำรวจสองรูปแบบ คือการดูรายการเบื้องต้นอย่างรวดเร็วและการไล่ดูคอลเลกชันทั้งหมดอย่างเป็นลำดับ

    แต่ละรายการแสดงชื่อเกมควบคู่กับผู้พัฒนาและหมวดหมู่ ข้อมูลเหล่านี้ช่วยให้ผู้เข้าชมแยกแยะได้ว่าเกมที่กำลังดูคือเกมใด อยู่ในกลุ่มใด และมีความเชื่อมโยงกับรายการอื่นอย่างไร โดยไม่ต้องอาศัยภาพประกอบเพียงอย่างเดียว

    ทำความรู้จักเกมผ่านอุปกรณ์และภาษาที่คุ้นเคย

    TKBNEKO ระบุการเข้าถึงผ่านคอมพิวเตอร์และมือถือ พร้อมตัวเลือกภาษา 14 ภาษา การมีตัวเลือกด้านภาษาและอุปกรณ์ช่วยให้ผู้เข้าชมเลือกวิธีอ่านข้อมูลและสำรวจเว็บไซต์ได้ตามความคุ้นเคย

    เว็บไซต์วางแนวทางการสำรวจไว้สามส่วน คือค้นหาธีมที่ชอบ รู้จักตัวละครและฟีเจอร์ และอ่านข้อมูลในภาษาของผู้เข้าชม องค์ประกอบเหล่านี้เชื่อมการดูภาพรวมของคอลเลกชันเข้ากับการทำความรู้จักรายละเอียดของเกมแต่ละรายการ

    การมีทั้งคอลเลกชัน ตัวกรอง และเนื้อหาประกอบ ทำให้ผู้เข้าชมไม่จำเป็นต้องเริ่มจากจุดเดียวกันทุกครั้ง การทำความรู้จักเกมอาจเริ่มจากการค้นหาชื่อ การเลือกหมวด หรือการอ่านเนื้อหาเกี่ยวกับเรื่องราวและตัวละครของเกม

    ทำความเข้าใจภาพประกอบและเครื่องหมายการค้า

    TKBNEKO แจ้งว่าภาพที่ใช้ประกอบเกมสร้างขึ้นด้วย AI ส่วนเครื่องหมายการค้าของเกมเป็นทรัพย์สินของเจ้าของแต่ละราย ข้อมูลนี้เป็นส่วนสำคัญของการทำความเข้าใจสิ่งที่เห็นบนหน้าเว็บไซต์ เพราะภาพประกอบที่ใช้สื่อธีมหรือบรรยากาศไม่ควรถูกตีความโดยอัตโนมัติว่าเป็นภาพหน้าจอจากเกมจริง

    TKBNEKO จึงนำเสนอคอลเลกชันในลักษณะพื้นที่ทำความรู้จักเกมผ่านข้อมูล ธีม และภาพประกอบ คุณค่าของการจัดคอลเลกชันไม่ได้จำกัดอยู่ที่การรวบรวมเกม 15 ชื่อ แต่รวมถึงการจัดหมวดและนำเสนอเนื้อหาที่ช่วยให้ผู้เข้าชมทำความรู้จักเอกลักษณ์ของแต่ละโลกได้ชัดเจนขึ้น

  2. Перед началом лечения врач измеряет давление, частоту пульса, оценивает дыхание, сознание и выраженность абстиненции. При необходимости проводится дополнительная диагностика. Состав капельниц подбирают индивидуально: универсальная схема подходит не всем, а количество растворов зависит от степени интоксикации, возраста и сопутствующей патологии. В работе используются проверенные лекарственные препараты, применение которых определяется клинической ситуацией и медицинскими показаниями.
    Ознакомиться с деталями - [url=https://8vyvod-iz-zapoya-podolsk77.ru/]vyvod-iz-zapoya-oblast[/url]

  3. Помощь может включать консультацию, детоксикацию, стационар и дальнейшее сопровождение по показаниям.
    Дополнительная информация - https://narkologicheskaya-klinika-balashiha15.ru/

  4. Помогаем быстро перейти от консультации к конкретному плану: выезд, стационар или наблюдение.
    Получить больше информации - https://nnarkologicheskaya-klinika-sankt-peterburg14.ru/

  5. Продолжительное употребление алкоголя приводит к накоплению продуктов распада этанола, обезвоживанию, нарушениям электролитного баланса и ухудшению работы органов. Человек может чувствовать слабость, тревожность, тремор, бессонницу, тошноту, боль, сердцебиение и резкое ухудшение общего состояния. В таких случаях самостоятельное лечение не всегда эффективно и иногда опасно. Нарколог оценивает тяжесть абстиненции, проверяет основные показатели и определяет, можно ли провести вывод из запоя на дому или безопаснее продолжить лечение в клинике.
    Узнать больше - [url=https://vyvod-iz-zapoya-balashiha15-1.ru/]vyvod-iz-zapoya-na-domu-nedorogo[/url]

  6. В последних случаях стандартная капельница на дому может быть недостаточной. Неотложная помощь и госпитализация позволяют проводить лечение запоя под постоянным наблюдением медицинского персонала. При потере сознания, судорогах, выраженной боли в груди, признаках инсульта или тяжелых нарушениях дыхания требуется экстренное обращение в службу скорой медицинской помощи.
    Получить больше информации - [url=https://9vyvod-iz-zapoya-podolsk77.ru/]vyvod-iz-zapoya-v-stacionare[/url]

  7. Первичная консультация помогает определить, какая помощь необходима именно сейчас. Врач-нарколог уточняет продолжительность употребления, количество алкоголя или психоактивных веществ, наличие бессонницы, тревоги, расстройства поведения, хронических заболеваний и предыдущего лечения. При необходимости проводятся анализы и дополнительные диагностические мероприятия. В сложных случаях к оценке подключается психиатр, поскольку длительная алкогольная или наркотическая интоксикация может провоцировать психические нарушения, страх, выраженную тревожность, изменения личности и другие состояния, требующие профессиональной медицинской оценки.
    Изучить вопрос подробнее - https://narkologicheskaya-klinika-balashiha15.ru/

  8. При появлении угрожающих симптомов важно действовать быстро. Врач после осмотра определяет возможность лечения на дому. Если необходим постоянный контроль жизненно важных показателей или существует высокий риск осложнений, рекомендуется госпитализация. В стационаре доступны более широкие возможности диагностики, наблюдения и коррекции назначений.
    Дополнительная информация - [url=https://7vyvod-iz-zapoya-podolsk77.ru/]наркология вывод из запоя на дому[/url]

  9. При подобных симптомах стоит обратиться за помощью. Бесплатно можно уточнить общие условия и стоимость, однако индивидуальное лечение назначает врач при личном контакте с больным.
    Изучить вопрос подробнее - [url=https://viivod-iz-zapoya-v-sankt-peterburge16.ru/]https://viivod-iz-zapoya-v-sankt-peterburge16.ru/[/url]

  10. Помощь оказывают врачи с практикой в наркологии, психиатрии и восстановительной терапии.
    Получить больше информации - https://3narkologicheskaya-klinika-balashiha.ru/

Оставить комментарий

*

Комментарий:

Ваш e-mail не будет опубликован.
Обязательные поля помечены *

Разрешенные HTML теги:

<a href="" title=""> <abbr title=""> <acronym title=""> <b> <blockquote cite=""> <cite> <code> <del datetime=""> <em> <i> <q cite=""> <strike> <strong>