C++ C# Python JavaScript PHP разговорник

Я давно программирую на C++ и C#. Python начал изучать недавно. С JavaScript у меня с давних пор было знакомство, но шапочное, поэтому стал изучать и его. И вот решил составить «разговорник» — удобная штука, чтобы легко было вспоминать материал. Эту необъятную заметку я буду пополнять по мере изучения языков. C++ C# Python 3 JavaScript PHP Расширение файлов .cpp, .h, .hpp .cs .py .js .php Исполняющая среда CPU + OS CLR (Common Language Runtime) Интерпретатор Python: CPython, IronPython, PyPy, Jython Читать дальше …

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

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

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

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

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

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

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

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

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