C++ и среды разработки

Предположим, мы хотим научиться программировать на C/C++. Для этого нам понадобятся следующие вещи: Написать простейший исходный код (программа HelloWorld) Скомпилировать исходный код в исполняемое приложение Запустить приложение (в том числе, в режиме отладки) В чем будем писать исходный код? Текстовый редактор. Сгодится любой текстовый редактор. Но желательно, с подсветкой синтаксиса. Я привык пользоваться Notepad++ (для справки: я — пользователь Windows). Другой редактор, которым я пользуюсь, но для программирования на платформе .NET, это — Visual Studio Code (или сокращенно — VSCode). Читать дальше …

Переход с Visual Studio на VS Code

Если вы используете Microsoft Visual Studio в коммерческих целях, то вам нужно покупать лицензию. Фирма, в которой я работаю, такую лицензию имеет. Однако, почему бы не избавиться от необходимости платить, и не перейти на бесплатные средства разработки? Вот и стали мы переходить… Оказалось, что не так это сложно, в конце концов интегрированная среда разработки (ее платная часть) — это лишь графическая оболочка, которая для своей работы пользуется различными бесплатными утилитами командной строки. Графическую Visual Studio часть можно компенсировать бесплатным редактором Читать дальше …

Тест по программированию на C++ от GeekBrains (средний уровень)

Недавно я завис на портале geekbrains.ru, раздумывая, не поступить ли мне на курс по C++ или по Unity. Решил для развлечения тесты порешать по моим любимым языкам C/C++/C#. Несколько базовых тестов успешно прошел, а дальше забуксовал. И решил проработать проблемные вопросы, а в качестве стимула написать заметку в блог. Итак, поехали. Я немножко переформатировал фрагменты кода, чтобы он лучше воспринимался глазами. Ответы и пояснения иногда привожу прямо в исходном коде тестов в виде комментариев. 1. Что будет выведено на экран Читать дальше …

PowerShell, NuGet & Visual Studio postbuild event (продолжение)

В предыдущей заметке я начал рассказ о том, как я переходил к использованию NuGet package manager и как использовал в связи с этим скрипт PowerShell, чтобы копировать сторонние библиотеки из одного места в другое. Удаление недействительных ссылок Проектов в моем решении очень много. Многие из них ссылаются на одну и ту же стороннюю библиотеку. Сторонние библиотеки у меня живут в папке $(SolutionDir)Lib. С переходом на NuGet значительная часть библиотек перебралась в папку $(SolutionDir)packages. При установке пакета в NuGet вы указываете Читать дальше …

PowerShell, NuGet & Visual Studio postbuild event

На работе я много лет работаю над большим-пребольшим проектом на платформе C#/.NET. В проекте используется ряд сторонних библиотек. Но поскольку я — программист-любитель, я не до сих пор использовал для управления ими package-manager, а просто тупо скачивал архивы с нужными библиотеками с оф. сайтов. Но вот, я решил-таки все решение перевести на использование NuGet package-manager, и в процессе столкнулся с рядом проблем, которые решил при помощи скриптов PowerShell, о чем и расскажу в этой заметке. Почему я решил начать использовать Читать дальше …

Опыт изучения OpenGL — Часть 9 — Uniform Variables & Uniform Blocks

В прошлых заметках речь шла о пространственных преобразованиях и соответствующих матрицах. Преобразования производятся над вершинами 3-хмерного объекта (модели) путем умножения координат вершин на матрицы. Заниматься этим умножением вершин на матрицы должен видеопроцессор, то есть шейдеры, а именно vertex shader. Почему именно видеопроцессор? Потому что вершин очень много, а у видеопроцессора много ядер, поэтому он может выполнить преобразование большого количества вершин гораздо эффективнее, чем это сделает CPU. Когда производится конкретное пространственное преобразование над некоторой моделью, все вершины этой модели умножаются на Читать дальше …

Опыт изучения OpenGL — Часть 8 — Vector maths API

В прошлой заметке я закончил теоретическую часть рассказа про пространственные преобразования в компьютерной графике. Теперь хочу сказать два слова про программирование всего этого на C++. Vector & Matrix Было довольно очевидно, из чего должен состоять API для векторной алгебры в моем проекте. Это должны были быть два класса: Vector и Matrix. Элементами вектора могут быть числа различных типов (скажем, int, float, double и пр.), поэтому очевидно, что классы Vector и Matrix должны были быть шаблонными (тип элемента матрицы/вектора должен быть Читать дальше …

Опыт изучения OpenGL — Часть 7 — Пространственные преобразования (продолжение)

В прошлой заметке мы рассмотрели преобразование перспективной проекции. В этой рассмотрим еще несколько вопросов, которые касаются в основном преобразований в пространствах model, world и camera. Смена базиса Для начала поговорим переходе от одной системы координат к другой. В 3-хмерном евклидовом пространстве существует т. н. базис, который состоит из трех векторов. Базис — это набор векторов, такой, что любой вектор можно представить в виде линейной комбинации базисных векторов. Коэффициенты в этой линейной комбинации называются координатами. Пусть есть две системы координат K Читать дальше …

Опыт изучения OpenGL — Часть 7 — Пространственные преобразования. Перспективная проекция.

В предыдущих заметках мы рисовали плоский треугольник на плоском экране. Трехмерный мир оказывается более разнообразен, чем плоский экран. Тут есть много о чем поговорить. Литература Jason McKesson — Learning Modern 3D Graphics Programming. Jason Gregory — Game Engine Architecture (2nd Edition). Пространства в 3d-играх World Space В трехмерных программах используется несколько координатных пространств. Одно из них называется мир (world space). В мире находятся объекты (в компьютерной игре это — персонажи, окружение и пр.) и камера. И камера, и объекты могут Читать дальше …

C++11 new features

Недавно посмотрел курс Advanced C++ Programming на портале caveofprogramming.com. Как обычно, решил некоторые вещи законспектировать, чтобы не забыть. Определение пользовательского типа внутри функции Ключевое слово auto Range-based for loop Вложенные классы Что должен уметь класс контейнера, чтобы быть «итерабельным» Лямбда-выражения std::function — General-purpose polymorphic function wrapper Шаблоны с произвольным числом аргументов (Variadic Templates) Rvalue reference Perfect forwarding Способы передачи параметров в функции std::bind static_assert Что осталось за кадром Литература Дэвид Вандервурд, Николаи Джосаттис, Дуглас Грегор — Шаблоны C++. Справочник разработчика. Читать дальше …