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++. Справочник разработчика. Читать дальше …

Компьютерные сети

Недавно я в целях ликвидации безграмотности посмотрел видеокурс GeekBrains по компьютерным сетям (автор — Алексей Степченко). Курс великолепный, то как автор доносит информацию до слушателей — выше всяких похвал. Зиждется данный курс на практических примерах и заданиях, которые выполняются в программе Cisco Packet Tracer, которая эмулирует компьютерные сети, то бишь хосты, серверы, свичи, роутеры и пр. Причем эмулирует, я бы сказал, с высокой степенью реалистичности. В этой программе вы настраиваете сетевое оборудование и можете в реальном времени наблюдать функционирование сети. Читать дальше …

Опыт изучения OpenGL — Часть 6 — Улучшаем программу рисования треугольника

В прошлой заметке мы нарисовали треугольник с использованием практически голого OpenGL. Начнем теперь видоизменять программу. Цель — сделать ее более простой для понимания и менее подверженной ошибкам. Предпосылки для написания своего фреймворка У приведенной в прошлой заметке программы рисования треугольника есть следующие потенциальные возможности для улучшения: Очень много вызовов всяких функций, выполняющих очень мелкие операции в рамках некой сравнительно крупной задачи. Например, чтобы скомпоновать шейдерную программу, надо вызвать функции glCreateProgram, glAttachShader, glLinkProgram, glDetachShader. Ясно, что в подобных случаях все эти Читать дальше …

Опыт изучения OpenGL — Часть 5 — Рисуем треугольник

В предыдущих заметках мы провели всю необходимую подготовку для того, чтобы начать рисовать. Рисовать начнем с треугольника (так поступают авторы большинства книжек по OpenGL). На примере рисования треугольника мы обсудим ряд базовых концепций компьютерной графики. Пока речь не пойдет о трехмерном пространстве, наш треугольник не будет поворачиваться, и на него нельзя будет взглянуть под произвольным углом. Литература Настоятельно рекомендую вам главы из нижеследующих книг перед чтением этой заметки (или после чтения): Jason McKesson — Learning Modern 3D Graphics Programming. — Читать дальше …