1 просмотров
Рейтинг статьи
1 звезда2 звезды3 звезды4 звезды5 звезд
Загрузка...

Обзор современных 3D-видеостандартов

Содержание

Обзор современных 3D-видеостандартов

Сегодня новые акселераторы трехмерной графики безбожно выворачивают карманы пользователей. Цена за «горячие» 3D-новинки приближается к 400 долл. — сумме, за которую можно приобрести «не слабый» системный блок персонального компьютера. Лидер 3D-прогресса, фирма nVIDIA, заявляет, что до тех пор, пока они продают все чипы, которые производят, цена на 3D-карты высшего уровня производительности будет расти, и даже 500 долл. — далеко не предел. 3D-карта — словно наркотик, требующий все больше денег за растущую потребность в удовольствии. Сегодня мало кто вспоминает, что 3D-графические ускорители для ПК — это относительно новый класс устройств, который сформировался на наших глазах около трех лет назад. Бывшие первоначально достоянием профессиональных рабочих станций класса Silicon Graphics (ныне SGI), акселераторы 3D-графики сегодня превратились в самую желанную вещь в персоналке геймера. С тех пор темпы роста мощности графических процессоров намного превосходят даже развитие центральных микропроцессоров. Современный 3D-акселератор представляет собой видеокарту (в виде неприметной печатной платы), на которой интегрированы один или несколько графических процессоров и 8-64 Мбайт собственной видеопамяти. По сути, 3D-акселератор — это «компьютер в компьютере». Задача 3D-акселератора — брать на себя почти всю нагрузку по геометрическому построению трехмерных изображений. Понятно, что речь идет преимущественно об «объемных» 3D-играх. Именно из-за них центральный процессор перестал справляться с возрастающей нагрузкой и был вынужден передать часть полномочий 3D-процессорам на специализированных акселераторах трехмерной графики. Для работы же с традиционными двухмерными приложениями класса Microsoft Office и Adobe Photoshop нужен мощный 2D-, а не 3D-акселератор.

В принципе 3D-ускорители существовали и десять лет назад, только стоили они до 15 тыс. долл. и были прерогативой профессиональных рабочих станций. Эти акселераторы применялись в системах автоматизированного проектирования и трехмерного моделирования. Выход первых 3D-карт на массовый рынок практически произошел в 1995 году, когда 2D-ускорители фактически исчерпали свои возможности по обработке сложной графики.

Подавляющее большинство тех, кто хотел бы приобрести компьютер или хотя бы его модернизировать, делают это не из-за острой нужды в таких офисных программах, как Microsoft Word или Excel. В основном upgrade производится, чтобы вкусить все прелести современных технологий, используемых в новейших играх. Ведь именно они являются «пожирателями» всех ресурсов компьютера, и это нормально, поскольку разработчики ориентируются на самые новые комплектующие, позволяющие создавать феноменальные эффекты. По сути, весь этот процесс является бесконечной «гонкой», в которой производители «железяк» постоянно убегают от разработчиков игровых новинок. На чем же еще, как не на играх, можно протестировать свою персоналку? Если ее конфигурация соответствует (или еще лучше — немного опережает) системные требования современных игр, то можно быть на 100% уверенным, что любые офисные или графические приложения не загонят ваш компьютер в тупик.

API, использующие протокол HTTP = веб-сервисы

«Веб-сервис» — это веб-приложение, предоставляющее ресурсы в формате, используемом другими компьютерами. Веб-сервисы включают в себя различные типы API, в том числе REST и SOAP API. Веб-сервисы — это, в основном, запросы и ответы между клиентами и серверами (компьютер запрашивает ресурс, а веб-сервис отвечает на запрос).

API, использующие протокол HTTP для передачи запросов и ответов, рассматриваются как «веб-сервисы». В случае веб-сервисов клиент, делающий запрос на ресурс, и сервер API, предоставляющий ответ, могут использовать любой язык программирования или платформу. Не имеет значения, какой ЯП или платформа будут использоваться, потому что запрос сообщения и ответ сделаны через общий веб-протокол HTTP.

Веб-протокол является частью прекрасного веб-сервисов: они независимы от языка и поэтому совместимы между различными платформами и системами. При документировании REST API не имеет значения, строят ли инженеры API с помощью Java, Ruby, Python или какого-либо другого языка. Запросы выполняются через HTTP, и ответы возвращаются через HTTP.

Диаграмма ниже показывает общую модель REST API:

Как видно, между клиентом и сервером API существует запрос и ответ. Клиент и сервер могут быть основаны на любом языке, но HTTP — это протокол, используемый для передачи сообщения. Этот шаблон запроса и ответа, по сути, является принципом работы API REST.

Любой язык программирования, создающий запрос, будет по-своему отправлять веб-запрос и анализировать ответ на своем языке. Эти специфичные для языка функции отправки запросов и анализа ответов не являются частью REST API (хотя они могут быть предоставлены в прилагаемом SDK). REST API не зависит от языка и обрабатывает входящую и исходящую информацию по HTTP.

Что не является графическим API

В этом уроке рассмотрим требования к графическим материалам, которые понадобятся для запуска интернет-магазина на основе Аспро: Next. К ним относятся баннеры на главной странице, тизеры, картинки для новостей, акций и т.д.

Логотип

Логотип располагается в левом верхнем углу.

Требования к логотипу: файл .jpg или .png с разрешением 190×40 px.

Главный баннер

Тип главной страницы №1

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

В зависимости от выбранной ширины сайта размер баннера может меняться от 930 до 1314 px.

Требования к основному баннеру: файл .jpg или .png с разрешением 1920×450 px (c рекомендуемой безопасной зоной в 766 px по центру). Размер элемента на баннер – 450 x 450 рx

Требования к дополнительным баннерам: файл .jpg или .png с разрешением 320×215 px.

  • Тип главной страницы № 2

При таком типе баннер со слайдером располагается во всю ширину экрана.

Требования к основному баннеру: файл .jpg или .png с разрешением 1920×450 px.

Типы главной страницы №3,4

При разной выбранной ширине сайта размер баннера может меняться от 930 до 1314 px. Вы можете для каждой ширины сайта указывать свою ширину баннера, но мы рекомендуем выбирать 1920 px, тогда края обрежутся с каждой стороны под нужную ширину.

Требования к основному баннеру: файл .jpg или .png с разрешением 1920×450 px.

Широкий баннер на главной

Располагается внизу главной страницы. На нем вы можете рекламировать ваши товары.

Требования к широкому баннеру на главной: файл .jpg или .png с разрешением 1920×150 px (c рекомендуемой безопасной зоной в 900px по центру).

Маленькие баннеры на главной

Располагаются под главным баннером при типе главной страницы № 2 и перед блоком новостей и акций при типе главной страницы №1.

Требования к 3 маленьким баннерам: файл .jpg или .png с разрешением 530×180 px.

Баннеры левой колонки

Располагаются в левой части сайта под каталогом при выбранном типе главной страницы № 3 или 4.

Требования к баннерам левой колонки: файл .jpg или .png с разрешением 530×390 px.

Плавающие баннеры (большой и малый)

Блок баннеров на главной странице (тип №3) с быстрым доступом к разделам каталога. Эти баннеры выстраиваются в ровную плитку на любой ширине окна. Они бывают двух видов: большие и маленькие.

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

В административной части перейдите в Аспро: Next → Настройки → Ширина сайта.

Проверьте ширину вашего сайта или задайте необходимую.

В таблице представлены размеры большого и маленького баннера для 4 расширений:


Ширина сайта
Размеры для большого баннераРазмеры для маленького баннера
1200 px455х181 px218х181 px
1344 px503х199 px242х199 px
1500 px551х217 px267х217 px
1700 px647х227 px314х227px

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

Требования к плавающим баннерам: файл .jpg или .png.

Круглые тизеры на главной странице типа №3

Располагаются под главным блоком. Позволяют осуществлять быстрый переход к разделам каталога.

Требования к круглым тизерам: файл .jpg или .png. с разрешением 80×80 px.

Тизеры преимуществ

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

Требования к тизерам преимуществ: файл .jpg или .png. с разрешением 44×44 px.

Фото для блока новостей и акций

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

Требования для фото блока новостей и акций: файл .jpg или .png. с разрешением 630х420 px.

Баннеры детальных страниц новостей и акций

Требования к баннерам детальных страниц новостей и акций: файл .jpg или .png. с разрешением 1314×360 px.

Баннеры в детальных страницах разделов

Сюда относятся, например, страницы акций или лендингов. Баннер на таких страницах состоит из фонового баннера и активной картинки.

Требования к фоновому баннеру: файл .jpg или .png. с разрешением 1920×450 px.

Требования к активной картинке: файл .jpg или .png. с разрешением 555×450 px.

Фоновое изображение (бэкраунд)

Вы можете установить для своего сайта фон и настроить условия его показа (например, ширину экрана, при которой фон демонстрируется и при которой пропадает). Подробнее об управлении фоновыми изображениями сайта читайте в уроке «Фоновое изображение».

Требования к фону: файл .jpg с разрешением не менее 1920×1500 px

Фото товара для карточки

Основное фото товара на его странице.

Требования к фото для карточки товара: файл .jpg или .png с разрешением не менее 500х500 px. Оптимально — 1000х1000 px. Изображение обязательно должно быть квадратным.

Картинки в списке каталога преобразуются из анонсных изображений. Подстраиваются под сетку и тип вывода элементов. Размер нужно подбирать, исходя из дополнительных настроек. Сколько элементов в ряд, тип отображения, наличие левого меню и др.

Фото товара для раздела каталога

Требования к фото для раздела каталога: файл .jpg или .png с разрешением не менее 120×120 px. Изображение обязательно должно быть квадратным.

Иконки левого меню каталога

Новая опция в Аспро: Next — загрузка пользовательский картинок для меню каталога. Подробнее, как это сделать, читайте в этой главе.

Иконки каталога в левом меню автоматически уменьшаются из картинок категорий каталога до размера 32×32 px.

Уроки по OpenGL с сайта OGLDev

Думаю, вы как минимум слышали об Vulkan API — новом графическом API от Khronos (некоммерческая организация разрабатывающая OpenGL). Vulkan был анонсирован в феврале 2016, через 24 года после OpenGL, и является полностью новым стандартом и уходом от текущей модели. Я не буду глубоко вдаваться в отличия Vulkan, а только скажу, что он в разы более низкоуровневый чем OpenGL, и даёт разработчику большой контроль над производительностью. Но с большой силой приходит и большая ответственность. Разработчик должен взять под контроль самые разные аспекты, например, буфер команд, синхронизацию и управление памятью; ранее этим занимался драйвер. Но благодаря знанию структуры приложения в деталях, разработчик может добиться максимальной производительности используя Vulkan API нужным ему образом.

На мой взгляд, больше всего в Vulkan людей шокирует то, сколько требуется написать кода просто для того, что бы вывести на экран первый треугольник. В первых уроках по OpenGL для этого потребуется буквально пара строк, но здесь, для многих, желающих начать цикл статей по Vulkan, это становится целым испытанием. Поэтому, как и всегда для OGLDEV, я начну представлять материал по шагам. Мы выведем первый треугольник за пару уроков, понемногу продвигаясь в каждом. Кроме того, я постараюсь не вываливать дюжину вызовов API в одном длинном куске кода, а сразу начну заворачивать в приложение с простым дизайном, который, я надеюсь, пригодится вам для будущих приложений. Но в любом случае, это обучающее приложение, и не стесняйтесь его изменять под себя.

Двигаясь по коду мы будем поочередно изучать ключевые компоненты Vulkan, поэтому сейчас я просто хочу представить общую диаграмму:

Эта диаграмма ни в коем случае не претендует на полноту. Она содержит только основные компоненты, которые будут использоваться в большинстве приложений. Связи между компонентами обозначают зависимости в момент создания, либо перечисления. Например, для создания поверхности требуется экземпляр объекта, а когда вы перечисляете физические устройства системы, то также потребуется экземпляр. Два цвета объясняют наш дизайн в общих чертах. Красный объединяет то, что я бы назвал «ядром», а зелёный те части, которые будут «приложением». Позже мы разберем для чего это нужно. Код самого приложения, которое вы будете писать, будет наследоваться от «приложения», и все его части будут вам доступны для использования. Очень надеюсь, что такой дизайн поможет нам в разработке следующих частей этого цикла по Vulkan.

Подготовка системы

Первое что нам нужно, это проверить, что система поддерживает Vulkan, и подготовить всё для разработки. Вы должны проверить, что ваша видеокарта поддерживает Vulkan, и установить свежие драйвера. Так как Vulkan вышел в свет ещё совсем недавно, то лучше проверять обновления драйверов как можно чаще, там могут быть исправления ошибок. Поскольку существует огромное число GPU, я не могу подробно рассказать о каждом. Обновление / установка драйверов под Windows не должна вызвать затруднений. Под Linix могут потребоваться некоторые танцы с бубном. Для разработки я использую Linux Fedora с видеокартой GT710 от NVIDIA на борту. NVIDIA предоставляет один бинарный файл, который может быть установлен только из командной строки. У других производителей всё может быть иначе. Под Linux вы можете использовать lspci для скана системы и поиска своего GPU. Попробуйте добавить опции -v, -vv и -vvv чтобы увидеть больше деталей.

Далее нам потребуется установить Vulkan SDK от компании Khronos, скачать который можно по ссылке. SDK, помимо заголовочных файлов и библиотек, включает в себя большое число примеров, которые вы можете использовать для лучшего ознакомления с возможностями API. На момент написания урока актуальная версия SDK 1.0.30.0, и я призываю вас регулярно проверять обновления, так как SDK сейчас находится в активной разработке. В нескольких следующих разделах версия будет указываться в командах в явном виде, так что не забывайте изменять её на ту, которую вы устанавливаете.

Linux

Khronos предоставляет запускаемый файл предназначенный для Ubuntu. После запуска он устанавливает всё что требуется, но при запуске под Fedora я столкнулся с некоторыми сложностями. Я использовал следующие команды:

  • bash$ chmod +x vulkansdk-linux-x86_64-1.0.30.0.run
  • base$ ./vulkansdk-linux-x86_64-1.0.30.0.run –target VulkanSDK-1.0.30.0 –noexec
  • base$ ln -s

Эти команды извлекают содержимое пакета без запуска внутренних скриптов. После распаковки директория VulkanSDK-1.0.30.0 будет содержать каталог 1.0.30.0 с файлами пакета. Предположим, что я запускал эти команды находясь в домашнем каталоге (известном как

/VulkanSDK на каталог с содержимым пакета (с каталогами source, samples, и т.д.). Ссылка упрощает переключение среды разработки на более свежую версию. По ссылке можно получить библиотеки и заголовочные файлы. Чуть позднее мы разберемся с тем, как их использовать. А пока что сделайте следующее:

  • bash$ cd VulkanSDK/1.0.30.0
  • bash$ ./build_examples.sh

Если всё прошло успешно, то примеры были собраны в examples/build. Для их запуска вы должны cd в этот каталог. А теперь попробуйте запустить ./cube и ./vulkaninfo чтобы убедиться, что Vulkan запускается на вашей системе, и получить информацию о драйвере.

Надеюсь, что всё прошло успешно, так что мы можем добавить немного символических ссылок, чтобы удобнее обращаться к файлам, которые нам требуются для разработки. Зайдите под суперпользователем (с помощью вызова su и ввода пароля) и запустите команды:

  • bash# ln -s /home/ /VulkanSDK/x86_x64/include/vulkan /usr/include
  • base# ln -s /home/ /VulkanSDK/x86_x64/lib/libvulkan.so.1 /usr/lib64
  • base# ln -s /usr/lib64/libvulkan.so.1 /usr/lib64/libvulkan.so

С помощью этих трёх команд мы добавили символические ссылки из /usr/include в каталог заголовочных файлов Vulkan. Кроме того, мы добавили ссылки на динамические библиотеки, которые будут использоваться при линковке. Теперь, если мы обновили SDK, то нам требуется только изменить ссылку

/VulkanSDK на местоположение новой версии. Отметим, что вызов команд из-под рута требуется только один раз. После обновления SDK потребуется изменить ссылку только в домашнем каталоге. Вы, конечно, можете дать ссылке любое имя, но код, который идет с моими уроками, предполагает, что она находится в домашнем каталоге.

Windows

Установка под Windows ощутимо проще чем под Linux. Просто скачайте последнюю версию здесь, дважды кликните по файлу установщика, согласитесь со всем, что вам предложат, выберите директорию установки, и, в общем-то, всё. Я бы предложил установить SDK в c:VulkanSDK для обеспечения совместимости с моим проектом Visual Studio. Если вы устанавливаете куда-то ещё, то не забудьте обновить в проекте директории с заголовочными файлами и библиотеками. Детали вы найдете в следующем разделе.

Сборка и запуск

Linux

Под Linux я в основном разрабатываю в Netbeans. Код, который идет с уроками, содержит проекты сборки Netbeans для C/C++. Если вы установили SDK как я написал выше, то эти проекты должны работать их коробки (и, пожалуйста, сообщайте мне о любых проблемах). Если вы используете другую систему сборки, убедитесь, что вы добавили:

    В команду компиляции: -I

В команду линковки: -L

Даже если вы не используете Netbeans, вы всё ещё можете скомпилировать урок командой make. Netbeans самостоятельно генерирует Makefile. Этого будет достаточно, чтобы проверить настройку системы. Для этого скачайте исходники, разархивируйте их, зайдите в каталог ogldev/tutorial50, а затем запустите команду make. Если вы всё сделали правильно, то вы можете запустить dist/Debug/GNU-Linux-x86/tutorial50 из ogldev/tutorial50.

Windows

Если вы установили SDK в c:VulkanSDK, то мои проекты Visual Studio должны работать прямо из коробки. Если же нет, или вы хотите создать новый проект Visual Studio, то сделайте так:

Для обновления каталога с заголовочными файлами нажмите на проект в окошке solution explorer, перейдите в Properties, а затем в Configuration Properties -> C/C++ -> General. Теперь вы должны добавить c:VulkanSDK Include в Additional Include Directories. Пример приведен ниже:

Для обновления каталога с файлами библиотеки нажмите правой кнопкой мыши на проект в окошке solution explorer, перейдите в Properties и затем в Configuration Properties -> Link -> General. Теперь вы должны добавить c:VulkanSDK Bin32 в поле Additional Library Directories. Пример приведен ниже:

Пока вы ещё настраиваете линковщик зайдите в Input (сразу же под General), а затем добавьте vulkan-1.lib в поле Additional Dependencies.

Общие комментарии

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

Многие функции в Vulkan (особенно те, которые создают объекты) принимают на вход параметр — структуру. Такая структура используется как обертка над большей частью параметров, которые нужны функции. Благодаря этому у функций ощутимо меньше входящих параметров. Разработчики Vulkan решили, что первым параметром у таких структур будет свойство sType. Оно имеет перечислимый тип, и для каждой структуры свой код. Это позволяет драйверу определять тип структуры, зная только её адрес. У каждого кода есть префикс VK_STRUCTURE_TYPE_. Например, код структуры используемой при создании экземпляра VK_STRUCTURE_TYPE_INSTANCE_CREATE_INFO.

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

Ещё одно важное замечание об этих структурах — у них очень много свойств, которые нас пока не волнуют. Что бы код был компактнее (а уроки короче…) я всегда буду инициализировать структуры нулями (с помощью нотации struct = <>) и в явном виде обозначать только те свойства, которые не могут быть нулями. Я объясню их в следующих уроках, когда эти свойства будут востребованы.

В Vulkan функции либо являются процедурами, либо возвращают код ошибки в объекте VkResult. Код ошибки является перечислением, где VK_SUCCESS равно 0, а все остальные коды ошибок больше 0. По мере возможностей я добавляю проверку на ошибки. Если возникла ошибка, то я вывожу сообщение в консоль (а в Window в отдельном окошке) и выхожу. Обработка ошибок в реальном приложении слишком усложняет код, а моя задача сохранить простоту.

Многие функции Vulkan (особенно те, которые создают объекты) принимают на вход функцию выделения памяти. Такой подход позволяет контролировать процесс выделения памяти Vulkan. На мой взгляд это тема для уже опытных разработчиков, поэтому мы не будем заморачиваться с этим и всегда будем передавать NULL. В этом случае драйвер будет использовать свою функцию по умолчанию.

Vulkan не гарантирует экспорт своих функций в библиотеке. Это значит, что на некоторых платформах вы можете получить segmentation fault при вызове функции Vulkan так как она оказалась равна NULL. В этом случае вы вынуждены использовать vkGetInstanceProcAddr() для получения адреса функции перед её использованием (вспомним, что в OpenGL для этой проблемы мы использовали GLEW). В моем случае только vkCreateDebugReportCallbackEXT() была не доступна. Эта функция требуется только для дополнительной проверочной прослойки. Поэтому, я решил рискнуть и для всех функций которые я использую в уроке не получать адресов. Если поступят жалобы, то я обновлю код урока.

Процесс многочисленного форматов файлов

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

  • документы Microsoft Word
  • электронные таблицы Microsoft Excel
  • презентаций Microsoft PowerPoint
  • документы Adobe PDF
  • Microsoft Visio чертежи
  • сообщения электронной почты Microsoft Outlook,
  • документы Microsoft Project
  • документы OneNote Microsoft
  • AutoCAD чертежи и 3D форматы
  • Изображений
  • HTML-файлы

Похожие темы

  • Повторное использование компоненты Simulink в диаграммах Stateflow
  • Почему использование функция Simulink в диаграмме Stateflow?
  • Совместно используйте функции через Simulink и Stateflow
Документация Stateflow
  • Блоки и другая ссылка
  • Информация о релизах
  • PDF-документация
Поддержка
  • MATLAB Answers
  • Помощь в установке
  • Отчеты об ошибках
  • Требования к продукту
  • Загрузка программного обеспечения

© 1994-2020 The MathWorks, Inc.

1. Если смысл перевода понятен, то лучше оставьте как есть и не придирайтесь к словам, синонимам и тому подобному. О вкусах не спорим.

2. Не дополняйте перевод комментариями “от себя”. В исправлении не должно появляться дополнительных смыслов и комментариев, отсутствующих в оригинале. Такие правки не получится интегрировать в алгоритме автоматического перевода.

3. Сохраняйте структуру оригинального текста — например, не разбивайте одно предложение на два.

4. Не имеет смысла однотипное исправление перевода какого-то термина во всех предложениях. Исправляйте только в одном месте. Когда Вашу правку одобрят, это исправление будет алгоритмически распространено и на другие части документации.

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

Уроки по OpenGL с сайта OGLDev

Думаю, вы как минимум слышали об Vulkan API — новом графическом API от Khronos (некоммерческая организация разрабатывающая OpenGL). Vulkan был анонсирован в феврале 2016, через 24 года после OpenGL, и является полностью новым стандартом и уходом от текущей модели. Я не буду глубоко вдаваться в отличия Vulkan, а только скажу, что он в разы более низкоуровневый чем OpenGL, и даёт разработчику большой контроль над производительностью. Но с большой силой приходит и большая ответственность. Разработчик должен взять под контроль самые разные аспекты, например, буфер команд, синхронизацию и управление памятью; ранее этим занимался драйвер. Но благодаря знанию структуры приложения в деталях, разработчик может добиться максимальной производительности используя Vulkan API нужным ему образом.

На мой взгляд, больше всего в Vulkan людей шокирует то, сколько требуется написать кода просто для того, что бы вывести на экран первый треугольник. В первых уроках по OpenGL для этого потребуется буквально пара строк, но здесь, для многих, желающих начать цикл статей по Vulkan, это становится целым испытанием. Поэтому, как и всегда для OGLDEV, я начну представлять материал по шагам. Мы выведем первый треугольник за пару уроков, понемногу продвигаясь в каждом. Кроме того, я постараюсь не вываливать дюжину вызовов API в одном длинном куске кода, а сразу начну заворачивать в приложение с простым дизайном, который, я надеюсь, пригодится вам для будущих приложений. Но в любом случае, это обучающее приложение, и не стесняйтесь его изменять под себя.

Двигаясь по коду мы будем поочередно изучать ключевые компоненты Vulkan, поэтому сейчас я просто хочу представить общую диаграмму:

Эта диаграмма ни в коем случае не претендует на полноту. Она содержит только основные компоненты, которые будут использоваться в большинстве приложений. Связи между компонентами обозначают зависимости в момент создания, либо перечисления. Например, для создания поверхности требуется экземпляр объекта, а когда вы перечисляете физические устройства системы, то также потребуется экземпляр. Два цвета объясняют наш дизайн в общих чертах. Красный объединяет то, что я бы назвал «ядром», а зелёный те части, которые будут «приложением». Позже мы разберем для чего это нужно. Код самого приложения, которое вы будете писать, будет наследоваться от «приложения», и все его части будут вам доступны для использования. Очень надеюсь, что такой дизайн поможет нам в разработке следующих частей этого цикла по Vulkan.

Подготовка системы

Первое что нам нужно, это проверить, что система поддерживает Vulkan, и подготовить всё для разработки. Вы должны проверить, что ваша видеокарта поддерживает Vulkan, и установить свежие драйвера. Так как Vulkan вышел в свет ещё совсем недавно, то лучше проверять обновления драйверов как можно чаще, там могут быть исправления ошибок. Поскольку существует огромное число GPU, я не могу подробно рассказать о каждом. Обновление / установка драйверов под Windows не должна вызвать затруднений. Под Linix могут потребоваться некоторые танцы с бубном. Для разработки я использую Linux Fedora с видеокартой GT710 от NVIDIA на борту. NVIDIA предоставляет один бинарный файл, который может быть установлен только из командной строки. У других производителей всё может быть иначе. Под Linux вы можете использовать lspci для скана системы и поиска своего GPU. Попробуйте добавить опции -v, -vv и -vvv чтобы увидеть больше деталей.

Далее нам потребуется установить Vulkan SDK от компании Khronos, скачать который можно по ссылке. SDK, помимо заголовочных файлов и библиотек, включает в себя большое число примеров, которые вы можете использовать для лучшего ознакомления с возможностями API. На момент написания урока актуальная версия SDK 1.0.30.0, и я призываю вас регулярно проверять обновления, так как SDK сейчас находится в активной разработке. В нескольких следующих разделах версия будет указываться в командах в явном виде, так что не забывайте изменять её на ту, которую вы устанавливаете.

Linux

Khronos предоставляет запускаемый файл предназначенный для Ubuntu. После запуска он устанавливает всё что требуется, но при запуске под Fedora я столкнулся с некоторыми сложностями. Я использовал следующие команды:

  • bash$ chmod +x vulkansdk-linux-x86_64-1.0.30.0.run
  • base$ ./vulkansdk-linux-x86_64-1.0.30.0.run –target VulkanSDK-1.0.30.0 –noexec
  • base$ ln -s

Эти команды извлекают содержимое пакета без запуска внутренних скриптов. После распаковки директория VulkanSDK-1.0.30.0 будет содержать каталог 1.0.30.0 с файлами пакета. Предположим, что я запускал эти команды находясь в домашнем каталоге (известном как

/VulkanSDK на каталог с содержимым пакета (с каталогами source, samples, и т.д.). Ссылка упрощает переключение среды разработки на более свежую версию. По ссылке можно получить библиотеки и заголовочные файлы. Чуть позднее мы разберемся с тем, как их использовать. А пока что сделайте следующее:

  • bash$ cd VulkanSDK/1.0.30.0
  • bash$ ./build_examples.sh

Если всё прошло успешно, то примеры были собраны в examples/build. Для их запуска вы должны cd в этот каталог. А теперь попробуйте запустить ./cube и ./vulkaninfo чтобы убедиться, что Vulkan запускается на вашей системе, и получить информацию о драйвере.

Надеюсь, что всё прошло успешно, так что мы можем добавить немного символических ссылок, чтобы удобнее обращаться к файлам, которые нам требуются для разработки. Зайдите под суперпользователем (с помощью вызова su и ввода пароля) и запустите команды:

  • bash# ln -s /home/ /VulkanSDK/x86_x64/include/vulkan /usr/include
  • base# ln -s /home/ /VulkanSDK/x86_x64/lib/libvulkan.so.1 /usr/lib64
  • base# ln -s /usr/lib64/libvulkan.so.1 /usr/lib64/libvulkan.so

С помощью этих трёх команд мы добавили символические ссылки из /usr/include в каталог заголовочных файлов Vulkan. Кроме того, мы добавили ссылки на динамические библиотеки, которые будут использоваться при линковке. Теперь, если мы обновили SDK, то нам требуется только изменить ссылку

/VulkanSDK на местоположение новой версии. Отметим, что вызов команд из-под рута требуется только один раз. После обновления SDK потребуется изменить ссылку только в домашнем каталоге. Вы, конечно, можете дать ссылке любое имя, но код, который идет с моими уроками, предполагает, что она находится в домашнем каталоге.

Windows

Установка под Windows ощутимо проще чем под Linux. Просто скачайте последнюю версию здесь, дважды кликните по файлу установщика, согласитесь со всем, что вам предложат, выберите директорию установки, и, в общем-то, всё. Я бы предложил установить SDK в c:VulkanSDK для обеспечения совместимости с моим проектом Visual Studio. Если вы устанавливаете куда-то ещё, то не забудьте обновить в проекте директории с заголовочными файлами и библиотеками. Детали вы найдете в следующем разделе.

Сборка и запуск

Linux

Под Linux я в основном разрабатываю в Netbeans. Код, который идет с уроками, содержит проекты сборки Netbeans для C/C++. Если вы установили SDK как я написал выше, то эти проекты должны работать их коробки (и, пожалуйста, сообщайте мне о любых проблемах). Если вы используете другую систему сборки, убедитесь, что вы добавили:

    В команду компиляции: -I

В команду линковки: -L

Даже если вы не используете Netbeans, вы всё ещё можете скомпилировать урок командой make. Netbeans самостоятельно генерирует Makefile. Этого будет достаточно, чтобы проверить настройку системы. Для этого скачайте исходники, разархивируйте их, зайдите в каталог ogldev/tutorial50, а затем запустите команду make. Если вы всё сделали правильно, то вы можете запустить dist/Debug/GNU-Linux-x86/tutorial50 из ogldev/tutorial50.

Windows

Если вы установили SDK в c:VulkanSDK, то мои проекты Visual Studio должны работать прямо из коробки. Если же нет, или вы хотите создать новый проект Visual Studio, то сделайте так:

Для обновления каталога с заголовочными файлами нажмите на проект в окошке solution explorer, перейдите в Properties, а затем в Configuration Properties -> C/C++ -> General. Теперь вы должны добавить c:VulkanSDK Include в Additional Include Directories. Пример приведен ниже:

Для обновления каталога с файлами библиотеки нажмите правой кнопкой мыши на проект в окошке solution explorer, перейдите в Properties и затем в Configuration Properties -> Link -> General. Теперь вы должны добавить c:VulkanSDK Bin32 в поле Additional Library Directories. Пример приведен ниже:

Пока вы ещё настраиваете линковщик зайдите в Input (сразу же под General), а затем добавьте vulkan-1.lib в поле Additional Dependencies.

Общие комментарии

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

Многие функции в Vulkan (особенно те, которые создают объекты) принимают на вход параметр — структуру. Такая структура используется как обертка над большей частью параметров, которые нужны функции. Благодаря этому у функций ощутимо меньше входящих параметров. Разработчики Vulkan решили, что первым параметром у таких структур будет свойство sType. Оно имеет перечислимый тип, и для каждой структуры свой код. Это позволяет драйверу определять тип структуры, зная только её адрес. У каждого кода есть префикс VK_STRUCTURE_TYPE_. Например, код структуры используемой при создании экземпляра VK_STRUCTURE_TYPE_INSTANCE_CREATE_INFO.

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

Ещё одно важное замечание об этих структурах — у них очень много свойств, которые нас пока не волнуют. Что бы код был компактнее (а уроки короче…) я всегда буду инициализировать структуры нулями (с помощью нотации struct = <>) и в явном виде обозначать только те свойства, которые не могут быть нулями. Я объясню их в следующих уроках, когда эти свойства будут востребованы.

В Vulkan функции либо являются процедурами, либо возвращают код ошибки в объекте VkResult. Код ошибки является перечислением, где VK_SUCCESS равно 0, а все остальные коды ошибок больше 0. По мере возможностей я добавляю проверку на ошибки. Если возникла ошибка, то я вывожу сообщение в консоль (а в Window в отдельном окошке) и выхожу. Обработка ошибок в реальном приложении слишком усложняет код, а моя задача сохранить простоту.

Многие функции Vulkan (особенно те, которые создают объекты) принимают на вход функцию выделения памяти. Такой подход позволяет контролировать процесс выделения памяти Vulkan. На мой взгляд это тема для уже опытных разработчиков, поэтому мы не будем заморачиваться с этим и всегда будем передавать NULL. В этом случае драйвер будет использовать свою функцию по умолчанию.

Vulkan не гарантирует экспорт своих функций в библиотеке. Это значит, что на некоторых платформах вы можете получить segmentation fault при вызове функции Vulkan так как она оказалась равна NULL. В этом случае вы вынуждены использовать vkGetInstanceProcAddr() для получения адреса функции перед её использованием (вспомним, что в OpenGL для этой проблемы мы использовали GLEW). В моем случае только vkCreateDebugReportCallbackEXT() была не доступна. Эта функция требуется только для дополнительной проверочной прослойки. Поэтому, я решил рискнуть и для всех функций которые я использую в уроке не получать адресов. Если поступят жалобы, то я обновлю код урока.

Зачем нужен 3D-акселератор

На сегодняшний день функции современных видеоадаптеров довольно просты: они должны быстро выполнять работу с программами, моделирующими трехмерные сцены, а дело это вовсе не шуточное, поскольку при подобных действиях графический процессор должен обсчитать каждый кадр со скоростью несколько миллиардов элементарных операций в секунду. Для большей реалистичности смена игровых сцен, положения персонажей и их действий должна проходить при довольно высоких скоростях, что достигается быстрой быстрой сменой кадров — от 25 FPS (frame per second, кадр/с). А реалистичность трехмерного мира достигается путем использования 32-битных текстур с большим разрешением, которые накладываются на все присутствующие в сцене предметы.

Выполнение всех перечисленных заданий оборачивается громаднейшим объемом вычислений для аппаратного обеспечения ПК. И центральный процессор зачастую просто не в состоянии справиться с таким потоком данных, поскольку он попросту не оптимизирован для 3D-вычислений, да у него и без того забот хватает. И вот тут-то на сцену выходит 3D-акселератор, имеющий «в личном пользовании» специальный графический процессор и дополнительную память. Эти незаменимые компоненты и помогают ему справиться со всеми задачами, в той или иной степени касающимися 3D-графики.

Что не является графическим API

В этом уроке рассмотрим требования к графическим материалам, которые понадобятся для запуска интернет-магазина на основе Аспро: Next. К ним относятся баннеры на главной странице, тизеры, картинки для новостей, акций и т.д.

Логотип

Логотип располагается в левом верхнем углу.

Требования к логотипу: файл .jpg или .png с разрешением 190×40 px.

Главный баннер

Тип главной страницы №1

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

В зависимости от выбранной ширины сайта размер баннера может меняться от 930 до 1314 px.

Требования к основному баннеру: файл .jpg или .png с разрешением 1920×450 px (c рекомендуемой безопасной зоной в 766 px по центру). Размер элемента на баннер – 450 x 450 рx

Требования к дополнительным баннерам: файл .jpg или .png с разрешением 320×215 px.

  • Тип главной страницы № 2

При таком типе баннер со слайдером располагается во всю ширину экрана.

Требования к основному баннеру: файл .jpg или .png с разрешением 1920×450 px.

Типы главной страницы №3,4

При разной выбранной ширине сайта размер баннера может меняться от 930 до 1314 px. Вы можете для каждой ширины сайта указывать свою ширину баннера, но мы рекомендуем выбирать 1920 px, тогда края обрежутся с каждой стороны под нужную ширину.

Требования к основному баннеру: файл .jpg или .png с разрешением 1920×450 px.

Широкий баннер на главной

Располагается внизу главной страницы. На нем вы можете рекламировать ваши товары.

Требования к широкому баннеру на главной: файл .jpg или .png с разрешением 1920×150 px (c рекомендуемой безопасной зоной в 900px по центру).

Маленькие баннеры на главной

Располагаются под главным баннером при типе главной страницы № 2 и перед блоком новостей и акций при типе главной страницы №1.

Требования к 3 маленьким баннерам: файл .jpg или .png с разрешением 530×180 px.

Баннеры левой колонки

Располагаются в левой части сайта под каталогом при выбранном типе главной страницы № 3 или 4.

Требования к баннерам левой колонки: файл .jpg или .png с разрешением 530×390 px.

Плавающие баннеры (большой и малый)

Блок баннеров на главной странице (тип №3) с быстрым доступом к разделам каталога. Эти баннеры выстраиваются в ровную плитку на любой ширине окна. Они бывают двух видов: большие и маленькие.

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

В административной части перейдите в Аспро: Next → Настройки → Ширина сайта.

Проверьте ширину вашего сайта или задайте необходимую.

В таблице представлены размеры большого и маленького баннера для 4 расширений:


Ширина сайта
Размеры для большого баннераРазмеры для маленького баннера
1200 px455х181 px218х181 px
1344 px503х199 px242х199 px
1500 px551х217 px267х217 px
1700 px647х227 px314х227px

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

Требования к плавающим баннерам: файл .jpg или .png.

Круглые тизеры на главной странице типа №3

Располагаются под главным блоком. Позволяют осуществлять быстрый переход к разделам каталога.

Требования к круглым тизерам: файл .jpg или .png. с разрешением 80×80 px.

Тизеры преимуществ

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

Требования к тизерам преимуществ: файл .jpg или .png. с разрешением 44×44 px.

Фото для блока новостей и акций

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

Требования для фото блока новостей и акций: файл .jpg или .png. с разрешением 630х420 px.

Баннеры детальных страниц новостей и акций

Требования к баннерам детальных страниц новостей и акций: файл .jpg или .png. с разрешением 1314×360 px.

Баннеры в детальных страницах разделов

Сюда относятся, например, страницы акций или лендингов. Баннер на таких страницах состоит из фонового баннера и активной картинки.

Требования к фоновому баннеру: файл .jpg или .png. с разрешением 1920×450 px.

Требования к активной картинке: файл .jpg или .png. с разрешением 555×450 px.

Фоновое изображение (бэкраунд)

Вы можете установить для своего сайта фон и настроить условия его показа (например, ширину экрана, при которой фон демонстрируется и при которой пропадает). Подробнее об управлении фоновыми изображениями сайта читайте в уроке «Фоновое изображение».

Требования к фону: файл .jpg с разрешением не менее 1920×1500 px

Фото товара для карточки

Основное фото товара на его странице.

Требования к фото для карточки товара: файл .jpg или .png с разрешением не менее 500х500 px. Оптимально — 1000х1000 px. Изображение обязательно должно быть квадратным.

Картинки в списке каталога преобразуются из анонсных изображений. Подстраиваются под сетку и тип вывода элементов. Размер нужно подбирать, исходя из дополнительных настроек. Сколько элементов в ряд, тип отображения, наличие левого меню и др.

Фото товара для раздела каталога

Требования к фото для раздела каталога: файл .jpg или .png с разрешением не менее 120×120 px. Изображение обязательно должно быть квадратным.

Иконки левого меню каталога

Новая опция в Аспро: Next — загрузка пользовательский картинок для меню каталога. Подробнее, как это сделать, читайте в этой главе.

Иконки каталога в левом меню автоматически уменьшаются из картинок категорий каталога до размера 32×32 px.

Читать еще:  Не включается рекавери на андроид что делать
Ссылка на основную публикацию
Статьи c упоминанием слов:
Adblock
detector