Blame doc/ru/animation.html

Ivan Mahonin cece70
<html>
Ivan Mahonin cece70
<head>
Ivan Mahonin cece70
<meta charset="UTF-8" />
Ivan Mahonin cece70
<link rel="stylesheet" type="text/css" href="style.css" />
Ivan Mahonin cece70
<title>Текстуры и анимация - Helianthus</title>
Ivan Mahonin cece70
</head>
Ivan Mahonin cece70
<body>
Ivan Mahonin cece70
Ivan Mahonin 77a314
  

Helianthus

Ivan Mahonin 77a314
  
Ivan Mahonin 77a314
  

Helianthus: Документация

Ivan Mahonin 77a314
  

Установка

Ivan Mahonin cece70
  

Запуск и общие функции

Ivan Mahonin cece70
  

Клавиатура и мышь

Ivan Mahonin cece70
  

Рисование

Ivan Mahonin cece70
  

Шрифты и текст

Ivan Mahonin cece70
  

Текстуры и анимация

Ivan Mahonin cece70
  

Буфер кадра

Ivan Mahonin cece70
  

Спрайты

Ivan Mahonin cece70
  

Группы спрайтов

Ivan Mahonin cece70
  

Звук

Ivan Mahonin e9aada
  

Пользовательский интерфейс

Ivan Mahonin cece70
  
Ivan Mahonin cece70
  

Все функции

Ivan Mahonin cece70
Ivan Mahonin cece70
Ivan Mahonin cece70
Ivan Mahonin cece70

Текстуры и анимация

Ivan Mahonin cece70
Ivan Mahonin cece70

Библиотека Helianthus позволяет вам загружать и использовать в ваших программах различные изображения (текстуры) из файлов PNG. Также вы можете использовать анимированные текстуры — для создания анимации нужно все кадры в формате PNG разместить в одной папке и указать эту папку в качестве имени файла для загрузки. Для вашего удобства и сокращения количества используемых функций и одиночная текстура и анимация представлены в Helianthus в качестве одного и того же типа объектов — это всё анимации. Просто для одиночной текстуры количество кадров анимации равно одному. Количество кадров для загруженной анимации можно узнать при помощи функции animationGetFramesCount.

Ivan Mahonin cece70
Ivan Mahonin cece70

Чтобы загрузить текстуру используйте функцию createAnimation, которая возвращает значение типа Animation, которое по сути является адресом в памяти — указателем на описание текстуры внутри библиотеки Helianthus. Библиотека запоминает пути к загружаемым файлам, и, в случае многократной загрузки одного и того же файла не расходует лишнюю память, а работает лишь с одной копией изображения. Это изображение будет выгружено из памяти в тот момент когда будет удалена (animationDestroy) последняя использующая его анимация.

Ivan Mahonin cece70
Ivan Mahonin cece70

Помимо загрузки анимации из папки вы можете скомпоновать анимацию из отдельных кадров при помощи функций createAnimationEmpty, animationInsert, animationRemove, animationClear.

Ivan Mahonin cece70
Ivan Mahonin cece70

Анимация загружается установленной на паузу — то есть по-умолчанию она не воспроизводится. Запустить воспроизведение можно функцией animationPlay, снова поставить на паузу — animationPause. Кроме того анимация по-умолчанию зациклена, то есть когда она проиграет до конца — она сразу же начинается сначала. Вы можете это изменить используя функцию animationSetLoop.

Ivan Mahonin cece70
Ivan Mahonin d38577

Ещё один важный параметр анимации это скорость её воспроизведения. По-умолчанию она равна общей частоте перерисовки кадров (см. windowSetFrameRate), но если задан диапазон частоты — переменная частота кадров (windowSetFrameRateEx), то берётся значение из этого диапазона ближайшее к 24 кадрам в секунду. Если вас это не устраивает, задайте свою частоту смены кадров функцией animationSetFps.

Ivan Mahonin cece70
Ivan Mahonin cece70

Вы можете и вручную управлять воспроизведением анимации — используйте функции animationNextFrame, animationSetFrame, animationAddTime и animationSetPos.

Ivan Mahonin cece70
Ivan Mahonin cece70

Текстуры и анимации описанные выше — это уже загруженные на видеокарту данные и читать или менять пиксели в них нельзя. Для того чтобы работать с пикселями напрямую вам нужно загрузить их в оперативную память из файла — imageLoad, из текстуры — imageFromGLTexture и animationGetGLTexId или из пикселей на экране — imageFromViewport.

Ivan Mahonin cece70
Ivan Mahonin cece70

В отличие от анимации данные изображения не сгруппированы в структуру, а представлены в виде трёх отдельных переменных: ширина изображения, высота изображения и указатель на данные — массив пикселей. Данные это простая последовательность байтов — пикселив них записаны по строкам сверху вниз слева направо. Каждый пиксель — это четыре байта в формате RGBA — красный, зелёный, синий и непрозрачность (alpha). Для хранения этих данных выделяется оперативная память и прежде чем закончить с ними работу и забыть нужно эту память освободить функцией free из стандартного модуля <stdlib.h>. Сложновато? Да. Но ведь это низкоуровневые функции и прибегать к ним вам придётся только в редких случаях — если вам не хватило базового функционала.

Ivan Mahonin cece70
Ivan Mahonin cece70

Читать и записывать отдельные пиксели можно либо вручную высчитав номера отдельных байтов или при помощи функций imageGetPixel, imageSetPixel — которые сделают эти вычисления за вас.

Ivan Mahonin cece70
Ivan Mahonin cece70

Полученное изображение можно сохранить в файл — imageSave, отправить на видеокарту в виде текстуры OpenGL — imageToGLTexture или создать из изображения однокадровую анимацию — createAnimationFromImage.

Ivan Mahonin cece70
Ivan Mahonin cece70

Вот пример работы с изображениями:

Ivan Mahonin cece70
Ivan Mahonin cece70
Ivan Mahonin cece70
// Все три переменные представленные ниже
Ivan Mahonin cece70
// необходимы для работы с одним единственным изображением.
Ivan Mahonin cece70
// Если вы захотите работать одновременно с двумя изображениями,
Ivan Mahonin cece70
// то вам придётся завести дополнительную
Ivan Mahonin cece70
// тройку аналогичных переменных.
Ivan Mahonin cece70
int width = 0, height = 0; // Сюда будут записаны
Ivan Mahonin cece70
                           // ширина и высота изображения.
Ivan Mahonin cece70
void *data = NULL;         // Это указатель на данные изображения,
Ivan Mahonin cece70
                           // пока он указывает в никуда.
Ivan Mahonin cece70
Ivan Mahonin cece70
// Попытаемся загрузить изображения
Ivan Mahonin cece70
// будьте готовы к тому, что это не всегда удастся -
Ivan Mahonin cece70
// вдруг кто-то удалит файл, например.
Ivan Mahonin cece70
if (imageLoad("image.png", &width, &height, &data)) {
Ivan Mahonin cece70
    // Ура! Файл существует и нам даже удалось его загрузить.
Ivan Mahonin cece70
    // Поставим синий пиксель в координатах 10, 2.
Ivan Mahonin cece70
    // Если, конечно, в загруженном изображении
Ivan Mahonin cece70
    // есть эти координаты.
Ivan Mahonin cece70
    if (width > 10 && height > 2)
Ivan Mahonin cece70
        imageSetPixel(data, 10, 2, colorByName("blue"));
Ivan Mahonin cece70
    
Ivan Mahonin cece70
    // Сохраним изображение в другой файлы
Ivan Mahonin cece70
    // будьте осторожны если такой файл уже существует,
Ivan Mahonin cece70
    // то он будет перезапиан!
Ivan Mahonin cece70
    imageSave("image2.png", width, heigh, data);
Ivan Mahonin cece70
    
Ivan Mahonin cece70
    // Мы закончили работу с изображением -
Ivan Mahonin cece70
    // нужно освободить выделенную для его данных память.
Ivan Mahonin cece70
    free(data);
Ivan Mahonin cece70
    
Ivan Mahonin cece70
    // Обнулим указатель на данные. Это необязательно,
Ivan Mahonin cece70
    // просто на всякий случай. Это немножко защитит нас
Ivan Mahonin cece70
    // от наших ошибок. Если мы вдруг попытаемся использовать
Ivan Mahonin cece70
    // нулевой указатель, то в большинстве случаев увидим
Ivan Mahonin cece70
    // явную ошибку и её источник. И сможем её исправить.
Ivan Mahonin cece70
    // Использование же ненулевого указателя на уже
Ivan Mahonin cece70
    // освобождённую память приведёт к совершенно
Ivan Mahonin cece70
    // не предсказуемым ошибкам в совсем других
Ivan Mahonin cece70
    // частях программы.
Ivan Mahonin cece70
    data = NULL;
Ivan Mahonin cece70
} else {
Ivan Mahonin cece70
    // Не удалось загрузить изображение,
Ivan Mahonin cece70
    // возможно файла нет или он есть, но повреждён,
Ivan Mahonin cece70
    // или ещё что-то случилось.
Ivan Mahonin cece70
    // Сообщим-ка пользователю об этой проблеме.
Ivan Mahonin cece70
    printf("Ничего не получилось, увы :(");
Ivan Mahonin cece70
}
Ivan Mahonin cece70
Ivan Mahonin cece70
Ivan Mahonin cece70
Ivan Mahonin cece70

Есть ещё несколько функций, которые могут вас заинтересовать — создание однокадровой анимации прямо из пикселей экрана или буфера кадра: createAnimationFromViewport, createAnimationFromFramebuffer. Сохранить снимок экрана (окна программы) в файл — viewportSave.

Ivan Mahonin cece70
Ivan Mahonin cece70

Функции:

Ivan Mahonin cece70
Ivan Mahonin cece70

Animation createAnimation(const char *path);

Ivan Mahonin cece70
Ivan Mahonin cece70

Загрузить текстуру из файла PNG или цепочку кадров в формате PNG из папки. Эквивалентно вызову createAnimationEx. со включенным сглаживанием (smooth) и отключенными повторами (horWrap, vertWrap).

Ivan Mahonin cece70
Ivan Mahonin cece70

Параметры:

Ivan Mahonin cece70
Ivan Mahonin cece70

path — путь к файлу или папке.

Ivan Mahonin cece70
Ivan Mahonin cece70

Animation createAnimationEx(const char *path, int smooth, int horWrap, int vertWrap);

Ivan Mahonin cece70
Ivan Mahonin cece70

Загрузить текстуру из файла PNG или цепочку кадров анимации в формате PNG из папки.

Ivan Mahonin cece70
Ivan Mahonin d38577

Если в качестве пути указана папка, из неё будут загружены все изображения и отсортированы в алфавитном порядке. Частота кадров для вновь созданной анимации будет равна частоте перерисовки экрана (windowSetFrameRate). Если задан диапазон частоты (windowSetFrameRateEx), то из этого диапазона будет выбрана частота ближайшая к 24-м кадрам в секунду.

Ivan Mahonin cece70
Ivan Mahonin cece70

Если файл не удалось загрузить файл(ы), то функция вернёт анимацию с нулевым количеством кадров.

Ivan Mahonin cece70
Ivan Mahonin cece70

Helianthus запоминает пути к загружаемым файлам, и, в случае многократной загрузки одного и того же файла не расходует лишнюю память, а работает лишь с одной копией изображения. Это изображение будет выгружено из памяти в тот момент когда будет удалена (animationDestroy) последняя использующая его анимация.

Ivan Mahonin cece70
Ivan Mahonin cece70

Если параметр smooth равен TRUE, то загруженная текстура будет отображаться сглаженной — вы не увидите резких переходов между пикселями (трилинейная фильтрация).

Ivan Mahonin cece70
Ivan Mahonin cece70

Параметры horWrap и vertWrap включают (TRUE) или выключают (FALSE) бесконечное повторение узора текстуры по горизонтали и вертикали соответственно.

Ivan Mahonin cece70
Ivan Mahonin cece70

См. также createAnimation, createAnimationFromImage, createAnimationFromViewport, createAnimationFromGLTexId, createAnimationEmpty, animationClone.

Ivan Mahonin cece70
Ivan Mahonin cece70

Параметры:

Ivan Mahonin cece70
Ivan Mahonin cece70

path — путь к файлу или папке;

Ivan Mahonin cece70
smooth — включить сглаживание (TRUE или FALSE);
Ivan Mahonin cece70
horWrap — включить бесконечное повторение узора текстуры по горизонтали (TRUE или FALSE);
Ivan Mahonin cece70
vertWrap — включить бесконечное повторение узора текстуры по горизонтали (TRUE или FALSE).

Ivan Mahonin cece70
Ivan Mahonin cece70

Animation createAnimationFromGLTexId(unsigned int texid);

Ivan Mahonin cece70
Ivan Mahonin cece70

Создать однокадровую анимацию из текстуры OpenGL. Будьте внимательны, не удаляйте текстуру из OpenGL (glDeteteTextures) до тех пор пока существует хотя бы одна анимация её использующая. И более того анимация при своём удалении сама удалит эту текстуру из OpenGL. Если вы создали несколько анимаций с одной и той же текстурой, то текстура будет удалена при удалении последней использующей её анимации. Вы можете отключить автоматическое удаление текстуры обратившись к функции animationGLTexIdSetOwnership.

Ivan Mahonin cece70
Ivan Mahonin cece70

Настройки повторения узора текстуры и сглаживания уже содержатся в текстуре OpenGL.

Ivan Mahonin cece70
Ivan Mahonin cece70

См.также animationGetGLTexId.

Ivan Mahonin cece70
Ivan Mahonin cece70

Параметры:

Ivan Mahonin cece70
Ivan Mahonin cece70

texid — идентификатор текстуры из OpenGL.

Ivan Mahonin cece70
Ivan Mahonin cece70

Animation createAnimationFromImage(int width, int height, const void *pixels, int wrap);

Ivan Mahonin cece70
Ivan Mahonin cece70

Создать однокадровую анимацию из изображения в памяти. Пиксели должны идти один за другим по строкам сверху вниз, слева на право. По 4 байта на пиксель, по одному байту на каждый из каналов: красный, зелёный, синий, альфа каналы, именно в таком порядке. При загрузке создаётся копия текстуры в видеопамяти, и исходные данные больше не требуются, их можно выгрузить из памяти.

Ivan Mahonin cece70
Ivan Mahonin cece70

Текстура загружается со включенным сглаживанием (smooth). См. также createAnimationFromImageEx, createAnimationEx, imageLoad.

Ivan Mahonin cece70
Ivan Mahonin cece70

Параметры:

Ivan Mahonin cece70
Ivan Mahonin cece70

width — ширина изображения;

Ivan Mahonin cece70
height — высота изображения;
Ivan Mahonin cece70
pixels — указатель на первый байт первого пикселя в формате RGBA32;
Ivan Mahonin cece70
wrap — включить бесконечное повторение узора текстуры во всех направлениях (TRUE или FALSE).

Ivan Mahonin cece70
Ivan Mahonin cece70

Animation createAnimationFromImageEx(int width, int height, const void *pixels, int horWrap, int vertWrap, int smooth, int mipMap);

Ivan Mahonin cece70
Ivan Mahonin cece70

Создать однокадровую анимацию из изображения в памяти. Пиксели должны идти один за другим по строкам сверху вниз, слева на право. По 4 байта на пиксель, по одному байту на каждый из каналов: красный, зелёный, синий, альфа каналы, именно в таком порядке. При загрузке создаётся копия текстуры в видеопамяти, и исходные данные больше не требуются, их можно выгрузить из памяти.

Ivan Mahonin cece70
Ivan Mahonin cece70

Вы можете включить или выключить бесконечное повторение узора текстуры по горизонтали и/или вертикали (параметры horWrap и vertWrap соответственно).

Ivan Mahonin cece70
Ivan Mahonin cece70

Также вы можете включить сглаживание пикселей изображения (smooth) и включить построение mip-уровней (mipMap). Если вы пока не знаете, что такое mip-уровни, то просто включайте их всегда, когда нужно сглаживание и выключайте, когда сглаживание не нужно. Если же вы не знаете требуется или нет вам сглаживание текстуры, то ответ один — требуется — включайте и сглаживание и mip-уровни.

Ivan Mahonin cece70
Ivan Mahonin cece70

См. также createAnimationFromImage, createAnimationFromImageEx, createAnimationEx, imageLoad.

Ivan Mahonin cece70
Ivan Mahonin cece70

Параметры:

Ivan Mahonin cece70
Ivan Mahonin cece70

width — ширина изображения;

Ivan Mahonin cece70
height — высота изображения;
Ivan Mahonin cece70
pixels — указатель на первый байт первого пикселя в формате RGBA32;
Ivan Mahonin cece70
horWrap — включить бесконечное повторение узора текстуры по горизонтали (TRUE или FALSE);
Ivan Mahonin cece70
vertWrap — включить бесконечное повторение узора текстуры по вертикали (TRUE или FALSE);
Ivan Mahonin cece70
smooth — включить сглаживание (TRUE или FALSE);
Ivan Mahonin cece70
mipMap — включить построение mip-уровней (TRUE или FALSE).

Ivan Mahonin cece70
Ivan Mahonin cece70

Animation createAnimationFromFramebuffer(Framebuffer framebuffer);

Ivan Mahonin cece70
Ivan Mahonin cece70

Создать новую динамическую текстуру связанную с заданным буфером кадра. Содержимое этой текстуры будет изменяться всякий раз когда вы рисуете в этом буфере кадра. Мгновенно, без каких либо дополнительных затрат на копирование. Дополнительную информацию смотрите в разделе «Буфер кадра».

Ivan Mahonin cece70
Ivan Mahonin cece70

Не удаляйте буфер кадра пока не удалите все связанные с ним анимации.

Ivan Mahonin cece70
Ivan Mahonin cece70

Если вам нужно зафиксировать именно копию текущего состояния буфера кадра, то используйте функцию createAnimationFromViewport в сочетании с функцией target.

Ivan Mahonin cece70
Ivan Mahonin cece70

Параметры:

Ivan Mahonin cece70
Ivan Mahonin cece70

framebuffer — буфер кадра.

Ivan Mahonin cece70
Ivan Mahonin cece70

Animation createAnimationFromViewport();

Ivan Mahonin cece70
Ivan Mahonin cece70

Создать новую текстуру (однокадровую анимацию) скопировав изображение с экрана.

Ivan Mahonin cece70
Ivan Mahonin cece70

Если точнее — из текущей области вывода OpenGL (glViewport) — обычно это и есть вся площадь окна. Но если вы переключили буфер кадра функцией target, то текстура будет взята из этого буфера кадра.

Ivan Mahonin cece70
Ivan Mahonin cece70

Текстура создаётся с выключенным повтором узора, но со включенным сглаживанием и mip-уровнями.

Ivan Mahonin cece70
Ivan Mahonin cece70

См. также createAnimationFromViewportEx, createAnimationFromFramebuffer, viewportByWindow, viewportByFramebuffer и раздел «Буфер кадра».

Ivan Mahonin cece70
Ivan Mahonin cece70

Animation createAnimationFromViewportEx(int horWrap, int vertWrap, int smooth, int mipMap);

Ivan Mahonin cece70
Ivan Mahonin cece70

Функция работает аналогично функции createAnimationFromViewport, но позволяет вам задать повторения узора текстуры по горизонтали и/или вертикали (параметры horWrap, vertWrap) и включить или выключить сглаживание (smooth) и mip-уровни. Подробнее обо всех этих параметрах смотрите в описании функции createAnimationFromImageEx.

Ivan Mahonin cece70
Ivan Mahonin cece70

Параметры:

Ivan Mahonin cece70
Ivan Mahonin cece70

horWrap — включить бесконечное повторение узора текстуры по горизонтали (TRUE или FALSE);

Ivan Mahonin cece70
vertWrap — включить бесконечное повторение узора текстуры по вертикали (TRUE или FALSE);
Ivan Mahonin cece70
smooth — включить сглаживание (TRUE или FALSE);
Ivan Mahonin cece70
mipMap — включить построение mip-уровней (TRUE или FALSE).

Ivan Mahonin cece70
Ivan Mahonin cece70

Animation createAnimationEmpty();

Ivan Mahonin cece70
Ivan Mahonin cece70

Создать пустую анимацию — анимацию с нулевым количеством кадров. См. также animationInsert.

Ivan Mahonin cece70
Ivan Mahonin cece70

void animationDestroy(Animation animation);

Ivan Mahonin cece70
Ivan Mahonin cece70

Удалить анимацию.

Ivan Mahonin cece70
Ivan Mahonin cece70

Важно: Скорее всего у вас в программе останется переменная в которой хранился указатель на анимацию. Этот указатель станет недействителен — будет указывать на неопределённую область памяти — не на анимацию, анимацию уже удалена. Вы можете занести в эту переменную другую анимацию, но использовать старое значение переменной больше нельзя это приведёт к ошибкам и непредсказуемому поведению программы.

Ivan Mahonin cece70
Ivan Mahonin cece70

Animation animationClone(Animation animation);

Ivan Mahonin cece70
Ivan Mahonin cece70

Создать копию анимации, которая будет иметь собственные параметрами позиции воспроизведения и частоты кадров. Функция не размножает копии изображений в оперативной памяти — все клоны ссылаются на одни те же изображения. Библиотека Helianthus контролирует сколько анимаций используют конкретный кадр в данный момент времени и выгружают этот кадр из памяти только тогда, когда удалена последняя анимация его использовавшая.

Ivan Mahonin cece70
Ivan Mahonin cece70

См.также animationCloneEx, animationInsert.

Ivan Mahonin cece70
Ivan Mahonin cece70

Animation animationCloneEx(Animation animation, int start, int count);

Ivan Mahonin cece70
Ivan Mahonin cece70

Создать копию анимации, которая будет иметь собственные параметрами позиции воспроизведения и частоты кадров. При помощи параметров start и count вы выбираете какие именно кадры из заданной анимации будут скопированы в новую анимацию. См. также animationClone, animationInsert.

Ivan Mahonin cece70
Ivan Mahonin cece70

Параметры:

Ivan Mahonin cece70
Ivan Mahonin cece70

start — порядковый номер кадра с которого нужно начать копирование (нумерация от нуля);

Ivan Mahonin cece70
count — количество кадров, которое нужно скопировать.

Ivan Mahonin cece70
Ivan Mahonin cece70

unsigned int animationGetGLTexId(Animation animation);

Ivan Mahonin cece70
Ivan Mahonin cece70

Функция возвращает внутренний идентификатор текстуры OpenGL для текущего кадра анимации. См.также animationGetFrameGLTexId, animationGetFrame, createAnimationFromGLTexId.

Ivan Mahonin cece70
Ivan Mahonin cece70

unsigned int animationGetFrameGLTexId(Animation animation, int frame);

Ivan Mahonin cece70
Ivan Mahonin cece70

Функция возвращает внутренний идентификатор текстуры OpenGL для заданного кадра анимации. См.также animationGetGLTexId, createAnimationFromGLTexId.

Ivan Mahonin cece70
Ivan Mahonin cece70

Параметры:

Ivan Mahonin cece70
Ivan Mahonin cece70

frame — порядковый номер кадра с для которого нужно получить идентификатор (нумерация от нуля);

Ivan Mahonin cece70
Ivan Mahonin cece70

void animationGLTexIdSetOwnership(unsigned int texid, int own);

Ivan Mahonin cece70
Ivan Mahonin cece70

Функция задаёт правила удаления текстуры с заданным идентификатором из OpenGL. Определяет кто является владельцем текстуры — библиотека Helianthus или ваша собственная программа. Если текстурой владеет Helianthus (own — TRUE), то текстуру из OpenGL удалит Helianthus сам в том момент когда ни одна анимация больше не будет на неё ссылаться. В противном случае вы сами должны позаботиться об удалении текстуры, проконтролировав при этом, что ни одна анимация больше эту текстуру не использует.

Ivan Mahonin cece70
Ivan Mahonin cece70

Используйте эту функцию если, например, вы не хотите чтобы Helianthus удалил из памяти вашу собственную текстуру, которую вы ему передали через функцию createAnimationFromGLTexId.

Ivan Mahonin cece70
Ivan Mahonin cece70

Параметры:

Ivan Mahonin cece70
Ivan Mahonin cece70

texid — внутренный идентификатор текстуры OpenGL;

Ivan Mahonin cece70
own — если TRUE, то об удалении текстуры из видео-памяти позаботится Helianthus, если FALSE, то удалить текстуру должена будет ваша программа.

Ivan Mahonin cece70
Ivan Mahonin cece70

int animationGetFramesCount(Animation animation);

Ivan Mahonin cece70
Ivan Mahonin cece70

Возвращает количество кадров в данной анимации.

Ivan Mahonin cece70
Ivan Mahonin cece70

void animationInsert(Animation animation, int index, Animation other);

Ivan Mahonin cece70
Ivan Mahonin cece70

Вставить все кадры из анимации other в заданную анимацию, таким образом, что бы вновь вставленные кадры начинались с номера index.

Ivan Mahonin cece70
Ivan Mahonin cece70

Функция не затирает старые кадры, а вставляет новые прямо в середину анимации, сдвигая при этом последние кадры.

Ivan Mahonin cece70
Ivan Mahonin cece70

См. также animationInsertEx, animationCloneEx.

Ivan Mahonin cece70
Ivan Mahonin cece70

Параметры:

Ivan Mahonin cece70
Ivan Mahonin cece70

index — определяет место (номер кадра, нумерация от нуля) в текущей анимации куда нужно вставить новые кадры;

Ivan Mahonin cece70
other — другая анимация кадры из которой нужно вставить в текущую.

Ivan Mahonin cece70
Ivan Mahonin cece70

void animationInsertEx(Animation animation, int index, Animation other, int start, int count);

Ivan Mahonin cece70
Ivan Mahonin cece70

Вставить некоторое количество подряд идущих кадров из анимации other в заданную анимацию, таким образом, что бы вновь вставленные кадры начинались с номера index.

Ivan Mahonin cece70
Ivan Mahonin cece70

Функция не затирает старые кадры, а вставляет новые прямо в середину анимации, сдвигая при этом последние кадры.

Ivan Mahonin cece70
Ivan Mahonin cece70

См. также animationInsert, animationCloneEx.

Ivan Mahonin cece70
Ivan Mahonin cece70

Параметры:

Ivan Mahonin cece70
Ivan Mahonin cece70

index — определяет место (номер кадра, нумерация от нуля) в текущей анимации куда нужно вставить новые кадры;

Ivan Mahonin cece70
other — другая анимация кадры из которой нужно вставить в текущую;
Ivan Mahonin cece70
start — номер вставляемого первого кадра из другой анимации;
Ivan Mahonin cece70
count — количество кадров для вставки.

Ivan Mahonin cece70
Ivan Mahonin cece70

void animationRemove(Animation animation, int start, int count);

Ivan Mahonin cece70
Ivan Mahonin cece70

Удалить некоторое количество (count) кадров из анимации начиная с кадра номер start.

Ivan Mahonin cece70
См. также animationInsert, animationClear.

Ivan Mahonin cece70
Ivan Mahonin cece70

Параметры:

Ivan Mahonin cece70
Ivan Mahonin cece70

start — номер первого удаляемого кадра (нумерация с нуля);

Ivan Mahonin cece70
count — количество кадров для вставки.

Ivan Mahonin cece70
Ivan Mahonin cece70

void animationClear(Animation animation);

Ivan Mahonin cece70
Ivan Mahonin cece70

Удалить все кадры из анимации. См. также animationRemove, animationInsert, createAnimationEmpty.

Ivan Mahonin cece70
Ivan Mahonin cece70

double animationGetFps(Animation animation);

Ivan Mahonin cece70
Ivan Mahonin cece70

Возвращает скорость воспроизведения анимации в кадрах в секунду. См. также animationSetFps, animationPlay.

Ivan Mahonin cece70
Ivan Mahonin cece70

void animationSetFps(Animation animation, double fps);

Ivan Mahonin cece70
Ivan Mahonin cece70

Устанавливает скорость воспроизведения анимации в кадрах в секунду. См. также animationGetFps, animationPlay.

Ivan Mahonin cece70
Ivan Mahonin cece70

int animationIsPlaying(Animation animation);

Ivan Mahonin cece70
Ivan Mahonin cece70

Возвращает TRUE если воспроизведение в данный момент включено и FALSE если выключено. См. также animationPlay, animationPause.

Ivan Mahonin cece70
Ivan Mahonin cece70

void animationPlay(Animation animation);

Ivan Mahonin cece70
Ivan Mahonin d38577

Включает воспроизведение анимации. Внутренний счётчик времени будет автоматически обновляться библиотекой Helianthus между вызовами функции перерисовки кадра (windowSetDraw).

Ivan Mahonin cece70
Ivan Mahonin cece70

Если вы хотите управлять анимацией вручную, то не вызывайте эту функцию, а воспользуйтесь функциями animationAddTime, animationSetPos, animationNextFrame, animationSetFrame.

Ivan Mahonin cece70
Ivan Mahonin cece70

См. также animationPause, animationIsPlaying, animationSetFps, animationSetLoop.

Ivan Mahonin cece70
Ivan Mahonin cece70

void animationPause(Animation animation);

Ivan Mahonin cece70
Ivan Mahonin cece70

Остановить воспроизведение анимации. См. также animationPlay, animationIsPlaying.

Ivan Mahonin cece70
Ivan Mahonin cece70

void animationAddTime(Animation animation, double time);

Ivan Mahonin cece70
Ivan Mahonin cece70

Увеличить позицию анимации на время time (в секундах). См. также animationPlay, animationSetLoop, animationSetPos, animationNextFrame, animationSetFrame.

Ivan Mahonin cece70
Ivan Mahonin cece70

int animationGetLoop(Animation animation);

Ivan Mahonin cece70
Ivan Mahonin cece70

Возвращает TRUE если анимация зациклена и FALSE если нет. См. также animationSetLoop.

Ivan Mahonin cece70
Ivan Mahonin cece70

void animationSetLoop(Animation animation, int loop);

Ivan Mahonin cece70
Ivan Mahonin cece70

Функция включает (loop - TRUE) и отключает (loop - FALSE) циклическое воспроизведение анимации, когда анимация повторяется снова и снова, вместо того чтобы остановиться на последнем кадре. См. также animationGetLoop, animationPlay.

Ivan Mahonin cece70
Ivan Mahonin cece70

double animationGetPos(Animation animation);

Ivan Mahonin cece70
Ivan Mahonin cece70

Возвращает текущую позицию анимации в секундах. См. также animationSetPos.

Ivan Mahonin cece70
Ivan Mahonin cece70

void animationSetPos(Animation animation, double pos);

Ivan Mahonin cece70
Ivan Mahonin cece70

Функция задаёт текущую позицию анимации в секундах. См. также animationGetPos, animationAddTime, animationSetFrame, animationPlay.

Ivan Mahonin cece70
Ivan Mahonin cece70

int animationGetFrame(Animation animation);

Ivan Mahonin cece70
Ivan Mahonin cece70

Возвращает номер текущего кадра анимации, нумерация от нуля. См. также animationSetFrame.

Ivan Mahonin cece70
Ivan Mahonin cece70

void animationSetFrame(Animation animation, int frame);

Ivan Mahonin cece70
Ivan Mahonin cece70

Функция перематывает анимацию к кадру с заданным номером (нумерация от нуля). См. также animationGetFrame, animationGetFramesCount, animationNextFrame, animationSetPos, animationSetLoop, animationPlay.

Ivan Mahonin cece70
Ivan Mahonin cece70

void animationNextFrame(Animation animation);

Ivan Mahonin cece70
Ivan Mahonin cece70

Переключает анимацию на следующий кадр. См. также animationPlay, animationSetLoop, animationSetFrame, animationAddTime, animationSetPos.

Ivan Mahonin cece70
Ivan Mahonin cece70

int imageLoad(const char *path, int *outWidth, int *outHeight, unsigned char **outPixels);

Ivan Mahonin cece70
Ivan Mahonin cece70

Функция загружает изображение из файла PNG. Возвращает TRUE если загрузка прошла успешно и FALSE если загрузить файл не удалось.

Ivan Mahonin cece70
Ivan Mahonin cece70

В результате загрузки в переменные по адресам outWidth и outHeight будут помещены соответственно ширина и высота картинки. В переменную по адресу outPixels будет помещён указатель на пиксели картинки. Пиксели записываются в формате RGBA32 — для каждого пикселя последовательно идут 4 байта отвечающие за интенсивность каждой цветовой составляющей — красный, зелёный, синий, непрозрачность (alpha) — именно в таком порядке. Пиксели записаны по строкам сверху вниз, слева на право.

Ivan Mahonin cece70
Ivan Mahonin cece70

В работе с пикселями вам помогут функции imageGetPixel, imageSetPixel.

Ivan Mahonin cece70
Ivan Mahonin cece70

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

Ivan Mahonin cece70
Ivan Mahonin cece70

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

Ivan Mahonin cece70
Ivan Mahonin cece70

См. также imageSave, imageLoadFromMemory, imageFromViewport, imageToGLTexture.

Ivan Mahonin cece70
Ivan Mahonin cece70

Параметры:

Ivan Mahonin cece70
Ivan Mahonin cece70

path — путь к файлу изображения;

Ivan Mahonin cece70
outWidth — указатель на переменную куда будет записана ширина загруженного изображения в пикселях;
Ivan Mahonin cece70
outHeight — указатель на переменную куда будет записана высота загруженного изображения в пикселях;
Ivan Mahonin cece70
outPixels — указатель на переменную куда будет записан указатель на массив пикселей изображения.

Ivan Mahonin cece70
Ivan Mahonin cece70

int imageLoadFromMemory(const void *data, int size, int *outWidth, int *outHeight, unsigned char **outPixels);

Ivan Mahonin cece70
Ivan Mahonin cece70

Загрузить изображение из данных файла PNG ранее загруженных в оперативную память.

Ivan Mahonin cece70
Ivan Mahonin cece70

Эта функция может быть вам полезна если вы хотите хранить все ваши изображения прямо внутри исполняемого файла. Например, при помощи утилиты xxd (в Linux) или подобной ей для вашей операционной системы, вы можете сгенерировать файл на языке Си с массивом содержащим все байты файла изображения. Данная функция позволит вам распаковать изображения из этого массива и получить доступ к его пикселям.

Ivan Mahonin cece70
Ivan Mahonin cece70

Возвращает TRUE если загрузка прошла успешно и FALSE если распаковать изображение не удалось.

Ivan Mahonin cece70
Ivan Mahonin cece70

См. также imageLoad.

Ivan Mahonin cece70
Ivan Mahonin cece70

Параметры:

Ivan Mahonin cece70
Ivan Mahonin cece70

data — указатель на первый байт данных PNG;

Ivan Mahonin cece70
size — количество байт данных PNG;
Ivan Mahonin cece70
outWidth — указатель на переменную куда будет записана ширина загруженного изображения в пикселях;
Ivan Mahonin cece70
outHeight — указатель на переменную куда будет записана высота загруженного изображения в пикселях;
Ivan Mahonin cece70
outPixels — указатель на переменную куда будет записан указатель на массив пикселей изображения.

Ivan Mahonin cece70
Ivan Mahonin cece70

int imageSave(const char *path, int width, int height, const void *pixels);

Ivan Mahonin cece70
Ivan Mahonin cece70

Функция сохраняет изображение в файл PNG по заданному пути. Возвращает TRUE при успешном сохранении и FALSE если сохранить изображение не удалось.

Ivan Mahonin cece70
Ivan Mahonin cece70

См. также imageLoad, viewportSave.

Ivan Mahonin cece70
Ivan Mahonin cece70

Важно: Если файл по указанному пути уже существует, то он будет перезаписан. Вы может проверить существование файла функцией fileExists.

Ivan Mahonin cece70
Ivan Mahonin cece70

Параметры:

Ivan Mahonin cece70
Ivan Mahonin cece70

path — путь к файлу в который нужно записать изображение;

Ivan Mahonin cece70
width — ширина изображения в пикселях;
Ivan Mahonin cece70
height — высота изображения в пикселях;
Ivan Mahonin cece70
pixels — указатель на массив пикселей изображения, формат смотрите в описании к функции imageLoad.

Ivan Mahonin cece70
Ivan Mahonin cece70

unsigned int imageToGLTexture(int width, int height, const void *pixels, int wrap);

Ivan Mahonin cece70
Ivan Mahonin cece70

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

Ivan Mahonin cece70
Ivan Mahonin cece70

Во время загрузки создаётся копия данных изображения в видео-памяти и оригинальное изображение можно выгрузить из памяти.

Ivan Mahonin cece70
Ivan Mahonin cece70

См. также imageToGLTextureEx, imageToExistingGLTexture, imageLoad.

Ivan Mahonin cece70
Ivan Mahonin cece70

Параметры:

Ivan Mahonin cece70
Ivan Mahonin cece70

width — ширина изображения в пикселях;

Ivan Mahonin cece70
height — высота изображения в пикселях;
Ivan Mahonin cece70
pixels — указатель на массив пикселей изображения, формат смотрите в описании к функции imageLoad;
Ivan Mahonin cece70
wrap — если TRUE то узор текстуры будет повторяющимся по горизонтали и вертикали.

Ivan Mahonin cece70
Ivan Mahonin cece70

unsigned int imageToGLTextureEx(int width, int height, const void *pixels, int horWrap, int vertWrap, int smooth, int mipMap);

Ivan Mahonin cece70
Ivan Mahonin cece70

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

Ivan Mahonin cece70
Ivan Mahonin cece70

Во время загрузки создаётся копия данных изображения в видео-памяти и оригинальное изображение можно выгрузить из памяти.

Ivan Mahonin cece70
Ivan Mahonin cece70

Вы можете включить или выключить бесконечное повторение узора текстуры по горизонтали и/или вертикали (параметры horWrap и vertWrap соответственно). Также вы можете включить сглаживание пикселей изображения (smooth, билинейная или трилинейная фильтрация) и включить построение mip-уровней (mipMap).

Ivan Mahonin cece70
Ivan Mahonin cece70

См. также imageToGLTexture, imageToExistingGLTexture, imageLoad.

Ivan Mahonin cece70
Ivan Mahonin cece70

Параметры:

Ivan Mahonin cece70
Ivan Mahonin cece70

width — ширина изображения в пикселях;

Ivan Mahonin cece70
height — высота изображения в пикселях;
Ivan Mahonin cece70
pixels — указатель на массив пикселей изображения, формат смотрите в описании к функции imageLoad;
Ivan Mahonin cece70
horWrap — включить бесконечное повторение узора текстуры по горизонтали (TRUE или FALSE);
Ivan Mahonin cece70
vertWrap — включить бесконечное повторение узора текстуры по вертикали (TRUE или FALSE);
Ivan Mahonin cece70
smooth — включить сглаживание (TRUE или FALSE);
Ivan Mahonin cece70
mipMap — включить построение mip-уровней (TRUE или FALSE).

Ivan Mahonin cece70
Ivan Mahonin cece70

int imageToExistingGLTexture(unsigned int texid, int width, int height, const void *pixels);

Ivan Mahonin cece70
Ivan Mahonin cece70

Заменить пиксели существующей текстуры. Возвращает TRUE в случае успеха, иначе FALSE.

Ivan Mahonin cece70
Ivan Mahonin cece70

См. также imageToGLTexture, imageToGLTextureEx.

Ivan Mahonin cece70
Ivan Mahonin cece70

Параметры:

Ivan Mahonin cece70
Ivan Mahonin cece70

texid — идентификатор существующей текстуры OpenGL;

Ivan Mahonin cece70
width — ширина изображения в пикселях;
Ivan Mahonin cece70
height — высота изображения в пикселях;
Ivan Mahonin cece70
pixels — указатель на массив пикселей изображения, формат смотрите в описании к функции imageLoad.

Ivan Mahonin cece70
Ivan Mahonin cece70

int imageFromGLTexture(unsigned int texid, int *outWidth, int *outHeight, unsigned char **outPixels);

Ivan Mahonin cece70
Ivan Mahonin cece70

Получить пиксели из текстуры OpenGL. Пиксели копируются в новый массив, память для которого выделяется динамически. Поэтому вам, также как при работе с imageLoad, нужно после использования освободить выделенную под пиксели память при помощи стандартной функции free.

Ivan Mahonin cece70
Ivan Mahonin cece70

Функция возвращает TRUE в случае успеха, иначе FALSE.

Ivan Mahonin cece70
Ivan Mahonin cece70

См. также imageLoad.

Ivan Mahonin cece70
Ivan Mahonin cece70

Параметры:

Ivan Mahonin cece70
Ivan Mahonin cece70

texid — идентификатор текстуры OpenGL;

Ivan Mahonin cece70
outWidth — указатель на переменную куда будет записана ширина загруженного изображения в пикселях;
Ivan Mahonin cece70
outHeight — указатель на переменную куда будет записана высота загруженного изображения в пикселях;
Ivan Mahonin cece70
outPixels — указатель на переменную куда будет записан указатель на массив пикселей изображения.

Ivan Mahonin cece70
Ivan Mahonin cece70

int imageFromViewport(int *outWidth, int *outHeight, unsigned char **outPixels);

Ivan Mahonin cece70
Ivan Mahonin cece70

Получить пиксели изображения из текущей области вывода OpenGL. Пиксели копируются в новый массив, память для которого выделяется динамически. Поэтому вам, также как при работе с imageLoad, нужно после использования освободить выделенную под пиксели память при помощи стандартной функции free.

Ivan Mahonin cece70
Ivan Mahonin cece70

Функция возвращает TRUE в случае успеха, иначе FALSE.

Ivan Mahonin cece70
Ivan Mahonin cece70

См. также imageLoad.

Ivan Mahonin cece70
Ivan Mahonin cece70

Параметры:

Ivan Mahonin cece70
Ivan Mahonin cece70

outWidth — указатель на переменную куда будет записана ширина загруженного изображения в пикселях;

Ivan Mahonin cece70
outHeight — указатель на переменную куда будет записана высота загруженного изображения в пикселях;
Ivan Mahonin cece70
outPixels — указатель на переменную куда будет записан указатель на массив пикселей изображения.

Ivan Mahonin cece70
Ivan Mahonin cece70

int viewportSave(const char *path);

Ivan Mahonin cece70
Ivan Mahonin cece70

Сохранить изображение из текущей области рисования OpenGL в файл. Обычно используется чтобы сделать снимок экрана (сохраняется только внутренняя область окна программы).

Ivan Mahonin cece70
Ivan Mahonin cece70

Функция возвращает TRUE в случае успеха, иначе FALSE.

Ivan Mahonin cece70
Ivan Mahonin cece70

См. также imageSave, imageFromViewport.

Ivan Mahonin cece70
Ivan Mahonin cece70

Важно: Если файл по указанному пути уже существует, то он будет перезаписан. Вы может проверить существование файла функцией fileExists.

Ivan Mahonin cece70
Ivan Mahonin cece70

unsigned int pixelGet(const void *pixel);

Ivan Mahonin cece70
Ivan Mahonin cece70

Сконвертировать пиксель в формате RGBA32, который используется в функции imageLoad в код цвета Helianthus. См. также pixelSet, imageGetPixel.

Ivan Mahonin cece70
Ivan Mahonin cece70

void pixelSet(void *pixel, unsigned int colorCode);

Ivan Mahonin cece70
Ivan Mahonin cece70

Записать цвет в пиксель в формате RGBA32, который используется в функции imageLoad. См. также pixelGet, imageSetPixel.

Ivan Mahonin cece70
Ivan Mahonin cece70

unsigned int imageGetPixel(int width, int height, const void *pixels, int x, int y);

Ivan Mahonin cece70
Ivan Mahonin cece70

Получить цвет пикселя изображения. См. также imageSetPixel, pixelGet, imageLoad.

Ivan Mahonin cece70
Ivan Mahonin cece70

Параметры:

Ivan Mahonin cece70
Ivan Mahonin cece70

width — ширина изображения в пикселях;

Ivan Mahonin cece70
height — высота изображения в пикселях;
Ivan Mahonin cece70
pixels — указатель на массив пикселей изображения, формат смотрите в описании к функции imageLoad;
Ivan Mahonin cece70
x, y — координаты пикселя.

Ivan Mahonin cece70
Ivan Mahonin cece70

void imageSetPixel(int width, int height, void *pixels, int x, int y, unsigned int colorCode);

Ivan Mahonin cece70
Ivan Mahonin cece70

Установить цвет пикселя изображения. См. также imageGetPixel, pixelSet, imageLoad.

Ivan Mahonin cece70
Ivan Mahonin cece70

Параметры:

Ivan Mahonin cece70
Ivan Mahonin cece70

width — ширина изображения в пикселях;

Ivan Mahonin cece70
height — высота изображения в пикселях;
Ivan Mahonin cece70
pixels — указатель на массив пикселей изображения, формат смотрите в описании к функции imageLoad;
Ivan Mahonin cece70
x, y — координаты пикселя,
Ivan Mahonin cece70
colorCode — код цвета.

Ivan Mahonin cece70
Ivan Mahonin cece70
Ivan Mahonin cece70
</body>
Ivan Mahonin cece70
</html>