OpenGL в Haskell: загрузка текстуры в GPU, UV-координаты

На базе нашей программки вращения кубика (из прошлых статей) разберёмся с простейшей загрузкой текстур в аппаратуру и текстурированием четырёхугольника. Забудем пока про куб и цвета и вернёмся к квадрату со стороной 1 и 2D-координатам. UV-координаты В компьютерной графике для “закрепления” текстуры на объекте используют так называемые UV-координаты. Размеры текстуры нормализуются до [0..1] по оси X и Y, и каждая вершина треугольников, из которых состоит объект, мапится к пикселю картинки как показано выше.
ЧТАТ ПОЛН →

Объекты OpenGL в Haskell: VAO и VBO

В прошлый раз мы говорили об инициализации системы OpenGL на Haskell и создали простенький модульный шаблон программы (мы используем биндинги GLUT). В этот раз мы немного дополним наш кубик, раскрасив вершины треугольников, из которых он собран, случайными цветами. Немного о VAO и VBO Спецификация OpenGL определяет два объекта, которые мы уже использовали: VAO (Vertex Array Object): инкапсулирует состояние системы, достаточное для запуска конвейера (то есть для поставки вершинных данных) и полного рендеринга объекта.
ЧТАТ ПОЛН →

Инициализация программируемого графического конвейера OpenGL

Для Haskell есть замечательные биндинги к OpenGL, а также биндинги к популярным “клиентским” вспомогательным библиотекам вроде GLUT, GLFW, SDL и прочим. Мощь и изящество языка Haskell вместе с разнообразием фундаментальных подходов к композиции программ (монады, Arrow, FRP и т.д.) делают его чуть-ли не идеальным инструментом в написании корректных графических программ вроде симуляций или игр. Задачи Попробуем разобраться с минимальными действиями, необходимыми для создания простенькой программки, использующей систему OpenGL современным образом: а именно, выполняя вычисления на высокопроизводительном GPU и управляя программируемым графическим конвейером с помощью вершинных, фрагментных и других шейдеров.
ЧТАТ ПОЛН →