Изменяет сетку объекта на основе предоставленного memblock. Мемблок не обязательно должен иметь такое же количество атрибутов или вершин, как исходная сетка, но он улучшит производительность, если это произойдет. Первые 4 байта memblock представляют количество вершин в сетке. Вторые 4 байта представляют количество индексов в сетке, это может быть 0, и в этом случае каждые три вершины представляют собой многоугольник, и никакие вершины не могут быть общими. Если число индексов больше 0, то каждые три индекса представляют собой многоугольник, и вершины могут быть разделены между многоугольниками. Индексы начинаются с 0, поэтому индекс 0 ссылается на первую вершину в списке. Третьи 4 байта представляют количество атрибутов на вершину, например, позиция, нормали и УФ-данные-все это потенциальные атрибуты, поэтому вершина, содержащая все три, будет иметь 3 атрибута. Вершина должна иметь атрибут позиции, все остальное необязательно. Четвертые 4 байта представляют размер одной вершины в байтах, это можно вычислить по атрибутивным данным, но дано для удобства. Пятые 4 байта смещены для начала вершинных данных, так что вы можете легко добраться до них. Шестые 4 байта смещены для начала индексных данных, будут равны 0, если индексов нет. После этих 6 значений, начиная со смещения 24, идут данные атрибута вершины. Данные атрибута вершины описывают, как выкладываются данные вершины, например, если они имеют нормали, УФ-данные и т. Д. Для каждого атрибута существует 1 байт типа данных, 1 байт количества компонентов, 1 байт флага нормализации, 1 байт длины строки и X байт строковых данных для имени атрибута. Тип данных будет равен 0 для поплавков (используется почти для всего, например, позиции, нормалей и т. Д.) или 1 для беззнаковых байтов (используется для цветов вершин). Количество компонентов-это количество значений на атрибут, например, позиция имеет 3 компонента, x,y,z, UV - данные имеют 2 компонента, а цвета вершин-4 компонента. Обратите внимание, что любой тип данных unsigned byte должен иметь 4 компонента, даже если некоторые из них не используются. Флаг normalize используется только для типов данных unsigned byte и преобразует значения в диапазоне 0-255 в 0.0-1.0 для использования в шейдере. Обычно флаг нормализации будет равен 1 для атрибутов цвета и 0 для всего остального. Байт длины строки всегда должен быть кратен 4 по соображениям выравнивания, сама строка может иметь немного меньше символов, но всегда округляется до ближайшего кратного 4 для значения длины строки. например, строка длины 5 должна иметь значение длины строки 8. Обратите внимание, что строка из 4 символов имеет нулевой терминатор на конце, что делает ее длиной 5, поэтому, даже если она уже имеет кратное 4 символам значение длины, она должна использовать значение длины 8 из-за нулевого терминатора. Строка имени атрибута будет использоваться шейдером для распознавания данных вершин, имена атрибутов, распознаваемые AGK, - position, normal, tangent, binormal, color, uv, uv1, boneweights и boneindices, однако вы можете добавлять атрибуты с любым именем, которое вам нравится, пока вы пишете соответствующий шейдер с теми же именами. Если вы не используете свой собственный шейдер и вместо этого полагаетесь на AGK для рисования объекта, то вы должны придерживаться приведенных выше имен атрибутов. За атрибутивными данными следуют необработанные вершинные данные, которые обычно начинаются с атрибута позиция. Это будет 4-байтовый float для позиции X, 4-байтовый float для позиции Y и 4-байтовый float для позиции Z. Это продолжается для каждого атрибута, указанного в атрибутивных данных. Обратите внимание, что цветовые данные всегда будут иметь в общей сложности 4 байта, по 1 байту без знака для каждого цветового канала. Вы можете получить доступ к отдельным вершинам, используя размер вершины, указанный выше, и индекс вершины, например so offset=vertexDataOffset+(vertexIndex*vertexSize). Наконец, это данные индекса, если таковые имеются. Каждый индекс представляет собой 4-байтовое целое число, которое ссылается на вершину в данных вершин. Каждые три индекса представляют собой многоугольник. Если вы планируете регулярно вносить изменения в сетку, вы должны сохранить memblock после использования SetObjectMeshFromMemblock вместо того, чтобы регенерировать его из объекта каждый раз, когда вы хотите внести изменения. Затем снова вызовите SetObjectMeshFromMemblock, когда вы хотите перенести свои новые изменения на объект.
void agk::SetObjectMeshFromMemblock( UINT objID, UINT meshIndex, UINT memID )
objID - Идентификатор объекта для изменения
meshIndex - Индекс сетки для изменения
memID - Индекс memblock, используемый для изменения сетки
Обеспечивает быстрый способ изменения УФ-значений вершины внутри мемблока сетки. Он использует атрибутивные данные из начала мемблока для определения смещения вершин и изменения значений UV. Вершины начинаются с индекса 0.
void agk::SetMeshMemblockVertexUV( UINT memID, UINT vertexIndex, float u, float v )
memID - Идентификатор изменяемого мемблока
vertexIndex - Индекс вершины для изменения
u - Новое значение U для этой вершины
v - Новое значение V для этой вершины
Обеспечивает быстрый способ изменения положения вершины внутри мемблока сетки. Он использует атрибутивные данные из начала мемблока для определения смещения вершины и изменения значений позиции. Вершины начинаются с индекса 0.
void agk::SetMeshMemblockVertexPosition( UINT memID, UINT vertexIndex, float x, float y, float z )
memID - Идентификатор изменяемого мемблока
vertexIndex - Индекс вершины для изменения
x - Новая позиция X для этой вершины
y - Новая позиция Y для этой вершины
z - Новая позиция Z для этой вершины
Обеспечивает быстрый способ изменения нормали вершины внутри мемблока сетки. Он использует атрибутивные данные из начала мемблока для определения смещения вершин и изменения нормальных значений. Вершины начинаются с индекса 0.
void agk::SetMeshMemblockVertexNormal( UINT memID, UINT vertexIndex, float x, float y, float z )
memID - Идентификатор изменяемого мемблока
vertexIndex - Индекс вершины для изменения
x - X компонент новой нормали для этой вершины
y - Компонент Y новой нормали для этой вершины
z - Z компонент новой нормали для этой вершины
Записывает строку в memblock в виде необработанных байтов. Первый найденный нулевой терминатор завершит строку, и один нулевой терминатор будет записан в данные memblock. Чтобы снова прочитать строку из memblock, вам нужно будет знать ее длину, поэтому рекомендуется также записать значение длины строки перед строковыми данными, чтобы помочь прочитать строку обратно позже. Смещение плюс длина строки, плюс 1 для нулевого терминатора, должно быть меньше размера memblock.
void agk::SetMemblockString( UINT memID, UINT offset, const char* value )
memID - Идентификатор изменяемого мемблока.
offset - Смещение от начала мемблока для записи, между 0 и размером.
value - Строка для записи.
Записывает короткое (2 байта) значение с заданным смещением. Смещение должно быть меньше размера мемблока. Первое значение имеет смещение 0. Для достижения наилучшей производительности смещение должно быть кратно 2, поскольку запись коротких значений, не выровненных по 2-байтовым границам, влечет за собой снижение производительности оборудования. Короткие значения хранятся в формате little endian, поэтому запись короткого числа 23 со смещением 0, а затем чтение его обратно в байтах вернет байт со смещением 0 как 23, а байт со смещением 1 как 0. Данное значение будет усечено до диапазона -32768 и 32767.
void agk::SetMemblockShort( UINT memID, UINT offset, int value )
memID - Идентификатор изменяемого мемблока.
offset - Смещение от начала мемблока для записи, между 0 и размером.
value - Значение для записи.
Записывает значение int (4 байта) с заданным смещением. Смещение должно быть меньше размера мемблока. Первое значение имеет смещение 0. Для достижения наилучшей производительности смещение должно быть кратно 4, поскольку запись целочисленных значений, не выровненных по 4-байтовым границам, влечет за собой снижение производительности оборудования. Значения Int хранятся в формате little endian, поэтому запись int 23 со смещением 0, а затем чтение его обратно в байтах вернет байт со смещением 0 как 23, байт со смещением 1 как 0, байт со смещением 2 как 0 и байт со смещением 3 как 0.
void agk::SetMemblockInt( UINT memID, UINT offset, int value )
memID - Идентификатор изменяемого мемблока.
offset - Смещение от начала мемблока для записи, между 0 и размером.
value - Значение для записи.
Запишите значение float (4 байта) с заданным смещением. Смещение должно быть меньше размера мемблока. Первое значение имеет смещение 0. Для достижения наилучшей производительности смещение должно быть кратно 4, поскольку запись значений с плавающей запятой, не выровненных по 4-байтовым границам, влечет за собой снижение производительности оборудования. Значения Float хранятся в формате IEEE 754, поэтому запись float и последующее чтение его обратно в байтах вернут различные компоненты формата float.
void agk::SetMemblockFloat( UINT memID, UINT offset, float value )
memID - Идентификатор изменяемого мемблока.
offset - Смещение от начала мемблока для записи, между 0 и размером.
value - Значение для записи.
Обеспечивает быстрый способ изменения значений цвета вершины внутри мемблока сетки. Он использует атрибутивные данные из начала memblock для определения смещения вершин и изменения значений цвета. Вершины начинаются с индекса 0. Значения цвета должны быть в диапазоне от 0 до 255.
void agk::SetMeshMemblockVertexColor( UINT memID, UINT vertexIndex, int red, int green, int blue, int alpha )
memID - Идентификатор изменяемого мемблока
vertexIndex - Индекс вершины для изменения
red - Новое красное значение для этой вершины
green - Новое зеленое значение для этой вершины
blue - Новое синее значение для этой вершины
alpha - Новое альфа - значение для этой вершины
Записывает однобайтовое значение с заданным смещением. Смещение должно быть меньше размера мемблока. Первое значение имеет смещение 0. Данное значение будет усечено до диапазона -128 и 127.
void agk::SetMemblockByteSigned( UINT memID, UINT offset, int value )
memID - Идентификатор изменяемого мемблока.
offset - Смещение от начала мемблока для записи, между 0 и размером.
value - Значение для записи.
Записывает однобайтовое значение с заданным смещением. Смещение должно быть меньше размера мемблока. Первое значение имеет смещение 0. Данное значение будет усечено до диапазона 0 и 255.
void agk::SetMemblockByte( UINT memID, UINT offset, int value )
memID - Идентификатор изменяемого мемблока.
offset - Смещение от начала мемблока для записи, между 0 и размером.
value - Значение для записи.
Обеспечивает быстрый способ получить Z-позицию указанной вершины из memblock. Он использует атрибутивные данные из начала memblock для определения смещения вершины и расположения значений позиции.
float agk::GetMeshMemblockVertexZ( UINT memID, UINT vertexIndex )
memID - Идентификатор мемблока для проверки
vertexIndex - Индекс вершины для проверки
Обеспечивает быстрый способ получения Y-позиции указанной вершины из memblock. Он использует атрибутивные данные из начала memblock для определения смещения вершины и расположения значений позиции.
float agk::GetMeshMemblockVertexY( UINT memID, UINT vertexIndex )
memID - Идентификатор мемблока для проверки
vertexIndex - Индекс вершины для проверки
Обеспечивает быстрый способ получения X-позиции указанной вершины из memblock. Он использует атрибутивные данные из начала memblock для определения смещения вершины и расположения значений позиции.
float agk::GetMeshMemblockVertexX( UINT memID, UINT vertexIndex )
memID - Идентификатор мемблока для проверки
vertexIndex - Индекс вершины для проверки
Обеспечивает быстрый способ получения значения V указанной вершины из memblock. Он использует атрибутивные данные из начала memblock для определения смещения вершин и расположения значений UV.
float agk::GetMeshMemblockVertexV( UINT memID, UINT vertexIndex )
memID - Идентификатор мемблока для проверки
vertexIndex - Индекс вершины для проверки
Обеспечивает быстрый способ получения значения U указанной вершины из memblock. Он использует атрибутивные данные из начала memblock для определения смещения вершин и расположения значений UV.
float agk::GetMeshMemblockVertexU( UINT memID, UINT vertexIndex )
memID - Идентификатор мемблока для проверки
vertexIndex - Индекс вершины для проверки
Предоставляет быстрый способ получить красное значение указанной вершины из memblock. Он использует атрибутивные данные из начала memblock для определения смещения вершин и расположения значений цвета.
int agk::GetMeshMemblockVertexRed( UINT memID, UINT vertexIndex )
memID - Идентификатор мемблока для проверки
vertexIndex - Индекс вершины для проверки
Обеспечивает быстрый способ получить Z-компоненту нормали указанной вершины из memblock. Он использует атрибутивные данные из начала мемблока для определения смещения вершин и расположения нормальных значений.
float agk::GetMeshMemblockVertexNormalZ( UINT memID, UINT vertexIndex )
memID - Идентификатор мемблока для проверки
vertexIndex - Индекс вершины для проверки
Обеспечивает быстрый способ получения Y-компонента нормали указанной вершины из memblock. Он использует атрибутивные данные из начала мемблока для определения смещения вершин и расположения нормальных значений.
float agk::GetMeshMemblockVertexNormalY( UINT memID, UINT vertexIndex )
memID - Идентификатор мемблока для проверки
vertexIndex - Индекс вершины для проверки
Обеспечивает быстрый способ получения X-компонента нормали указанной вершины из memblock. Он использует атрибутивные данные из начала мемблока для определения смещения вершин и расположения нормальных значений.
float agk::GetMeshMemblockVertexNormalX( UINT memID, UINT vertexIndex )
memID - Идентификатор мемблока для проверки
vertexIndex - Индекс вершины для проверки
Предоставляет быстрый способ получить зеленое значение указанной вершины из memblock. Он использует атрибутивные данные из начала memblock для определения смещения вершин и расположения значений цвета.
int agk::GetMeshMemblockVertexGreen( UINT memID, UINT vertexIndex )
memID - Идентификатор мемблока для проверки
vertexIndex - Индекс вершины для проверки
Обеспечивает быстрый способ получения альфа - значения указанной вершины из memblock. Он использует атрибутивные данные из начала memblock для определения смещения вершин и расположения значений цвета.
int agk::GetMeshMemblockVertexAlpha( UINT memID, UINT vertexIndex )
memID - Идентификатор мемблока для проверки
vertexIndex - Индекс вершины для проверки
Обеспечивает быстрый способ получения синего значения указанной вершины из memblock. Он использует атрибутивные данные из начала memblock для определения смещения вершин и расположения значений цвета.
int agk::GetMeshMemblockVertexBlue( UINT memID, UINT vertexIndex )
memID - Идентификатор мемблока для проверки
vertexIndex - Индекс вершины для проверки
Возвращает размер данного memblock в байтах.
int agk::GetMemblockSize( UINT memID )
memID - Идентификатор мемблока для проверки.
Возвращает короткое (2 байта) значение при заданном смещении. Смещение должно быть меньше размера мемблока. Первое значение имеет смещение 0. Для достижения наилучшей производительности смещение должно быть кратно 2, поскольку чтение коротких значений, не выровненных по 2-байтовым границам, влечет за собой снижение производительности оборудования. Короткие значения хранятся в формате little endian, поэтому запись короткого числа 23 со смещением 0, а затем чтение его обратно в байтах вернет байт со смещением 0 как 23, а байт со смещением 1 как 0. Возвращаемое значение будет коротким со знаком между -32768 и 32767.
int agk::GetMemblockShort( UINT memID, UINT offset )
memID - Идентификатор мемблока для проверки.
offset - Смещение от начала мемблока возвращаемого значения между 0 и размером.
Хэширует memblock с помощью SHA1 и возвращает полученный хэш
char* agk::GetMemblockSHA1( uint32_t memID )
memID - Идентификатор мемблока для хэширования
Возвращает значение int (4 байта) при заданном смещении. Смещение должно быть меньше размера мемблока. Первое значение имеет смещение 0. Для достижения наилучшей производительности смещение должно быть кратно 4, поскольку чтение целочисленных значений, не выровненных по 4-байтовым границам, влечет за собой снижение производительности оборудования. Значения Int хранятся в формате little endian, поэтому запись int 23 со смещением 0, а затем чтение его обратно в байтах вернет байт со смещением 0 как 23, байт со смещением 1 как 0, байт со смещением 2 как 0 и байт со смещением 3 как 0. Возвращаемое значение будет целым числом со знаком от -2,147,483,648 до 2,147,483,647.
int agk::GetMemblockInt( UINT memID, UINT offset )
memID - Идентификатор мемблока для проверки.
offset - Смещение от начала мемблока возвращаемого значения между 0 и размером.
Возвращает 1, если существует memblock с заданным идентификатором, и 0, если нет.
int agk::GetMemblockExists( UINT memID )
memID - Идентификатор мемблока для проверки.
Возвращает значение байта с заданным смещением. Смещение должно быть меньше размера мемблока. Первое значение имеет смещение 0. Возвращаемое значение будет байтом со знаком от -128 до 127.
int agk::GetMemblockByteSigned( UINT memID, UINT offset )
memID - Идентификатор мемблока для проверки.
offset - Смещение от начала мемблока возвращаемого значения между 0 и размером.
Возвращает значение байта с заданным смещением. Смещение должно быть меньше размера мемблока. Первое значение имеет смещение 0. Возвращаемое значение будет байтом без знака между 0 и 255.
int agk::GetMemblockByte( UINT memID, UINT offset )
memID - Идентификатор мемблока для проверки.
offset - Смещение от начала мемблока возвращаемого значения между 0 и размером.
Возвращает заданное количество байтов с заданным смещением и интерпретирует их как строку. Смещение плюс длина должны быть меньше размера memblock. Первое значение имеет смещение 0. Строка будет завершаться null, даже если в memblock не будет найден нулевой терминатор. Если нулевой терминатор возникает до достижения длины, то все байты все равно будут считаны, но только символы до первого нулевого терминатора будут доступны в AGK. Если вы используете уровень 2, вы должны удалить указатель, возвращаемый этой функцией.
char* agk::GetMemblockString( UINT memID, UINT offset, UINT length )
memID - Идентификатор мемблока для проверки.
offset - Смещение от начала мемблока возвращаемого значения между 0 и размером.
length - Количество байтов для чтения
Хэширует memblock с помощью SHA256 и возвращает полученный хэш
char* agk::GetMemblockSHA256( uint32_t memID )
memID - Идентификатор мемблока для хэширования
Возвращает значение float (4 байта) при заданном смещении. Смещение должно быть меньше размера мемблока. Первое значение имеет смещение 0. Для достижения наилучшей производительности смещение должно быть кратно 4, поскольку чтение значений float, не выровненных по 4-байтовым границам, влечет за собой снижение производительности оборудования. Значения Float хранятся в формате IEEE 754, поэтому запись float и последующее чтение его обратно в байтах вернут различные компоненты формата float.
float agk::GetMemblockFloat( UINT memID, UINT offset )
memID - Идентификатор мемблока для проверки.
offset - Смещение от начала мемблока возвращаемого значения между 0 и размером.
Удаляет memblock с заданным идентификатором. Если memblock не существует или уже был удален, то эта команда ничего не делает.
void agk::DeleteMemblock( UINT memID )
memID - Идентификатор удаляемого мемблока.
Создает звук из мемблока. Memblock должен существовать, это создает новый звук и возвращает идентификатор. Это не повлияет ни на какие уже воспроизводимые звуковые экземпляры, только на будущие. Memblock должен содержать допустимый OGG-файл, например загруженный CreateMemblockFromFile(memID, sound.ogg)
uint32_t agk::CreateSoundFromOGGMemblock( uint32_t memID )
void agk::CreateSoundFromOGGMemblock( uint32_t soundID, uint32_t memID )
memID - Идентификатор считываемого memblock, memblock не зависит от этой команды.
soundID - Идентификатор звука для создания или изменения.
Создает звук из мемблока. Memblock должен существовать, это создает новый звук и возвращает идентификатор. Это не повлияет ни на какие уже воспроизводимые звуковые экземпляры, только на будущие. Первые 2 байта memlbock хранят количество каналов (1 или 2 поддерживаемых), следующие 2 байта хранят биты на выборку (8 или 16 поддерживаемых), следующие 4 байта хранят выборки в секунду, например 44100. Следующие 4 байта-это количество кадров в звуковых данных, размер звуковых данных в байтах можно вычислить из этого с помощью формулы numFrames*(BitsPerSample/8)*channels. В 2-канальном звуке кадр содержит 2 сэмпла, по одному для каждого канала. В моно-звуке кадр содержит 1 образец. Остальная часть memblock-это необработанные звуковые данные, например, в 8-битном стереозвуке с 3 кадрами необработанные данные будут выглядеть так. смещение байта 0 = Кадр 1, смещение байта данных левого канала 1 = Кадр 1, смещение байта данных правого канала 2 = Кадр 2, смещение байта данных левого канала 3 = Кадр 2, смещение байта данных правого канала 4 = Кадр 3, смещение байта данных левого канала 5 = Кадр 3, данные правого канала Возвращают идентификатор нового звука.
UINT agk::CreateSoundFromMemblock( UINT memID )
void agk::CreateSoundFromMemblock( UINT soundID, UINT memID )
memID - Идентификатор считываемого memblock, memblock не зависит от этой команды.
soundID - Идентификатор звука для создания или изменения.
Создает объект с одной сеткой, построенной из данного memblock. Любые последующие изменения в memblock не повлияют на сетку, вы должны вызвать SetObjectMeshFromMemblock, чтобы изменить существующую сетку. Первые 4 байта memblock представляют количество вершин в сетке. Вторые 4 байта представляют количество индексов в сетке, это может быть 0, и в этом случае каждые три вершины представляют собой многоугольник, и никакие вершины не могут быть общими. Если число индексов больше 0, то каждые три индекса представляют собой многоугольник, и вершины могут быть разделены между многоугольниками. Индексы начинаются с 0, поэтому индекс 0 ссылается на первую вершину в списке. Третьи 4 байта представляют количество атрибутов на вершину, например, позиция, нормали и УФ-данные-все это потенциальные атрибуты, поэтому вершина, содержащая все три, будет иметь 3 атрибута. Вершина должна иметь атрибут позиции, все остальное необязательно. Четвертые 4 байта представляют размер одной вершины в байтах, это можно вычислить по атрибутивным данным, но дано для удобства. Пятые 4 байта смещены для начала вершинных данных, так что вы можете легко добраться до них. Шестые 4 байта смещены для начала индексных данных, будут равны 0, если индексов нет. После этих 6 значений, начиная со смещения 24, идут данные атрибута вершины. Данные атрибута вершины описывают, как выкладываются данные вершины, например, если они имеют нормали, УФ-данные и т. Д. Для каждого атрибута существует 1 байт типа данных, 1 байт количества компонентов, 1 байт флага нормализации, 1 байт длины строки и X байт строковых данных для имени атрибута. Тип данных будет равен 0 для поплавков (используется почти для всего, например, позиции, нормалей и т. Д.) или 1 для беззнаковых байтов (используется для цветов вершин). Количество компонентов-это количество значений на атрибут, например, позиция имеет 3 компонента, x,y,z, UV - данные имеют 2 компонента, а цвета вершин-4 компонента. Обратите внимание, что любой тип данных unsigned byte должен иметь 4 компонента, даже если некоторые из них не используются. Флаг normalize используется только для типов данных unsigned byte и преобразует значения в диапазоне 0-255 в 0.0-1.0 для использования в шейдере. Обычно флаг нормализации будет равен 1 для атрибутов цвета и 0 для всего остального. Байт длины строки всегда должен быть кратен 4 по соображениям выравнивания, сама строка может иметь немного меньше символов, но всегда округляется до ближайшего кратного 4 для значения длины строки. например, строка длины 5 должна иметь значение длины строки 8. Обратите внимание, что строка из 4 символов имеет нулевой терминатор на конце, что делает ее длиной 5, поэтому, даже если она уже имеет кратное 4 символам значение длины, она должна использовать значение длины 8 из-за нулевого терминатора. Строка имени атрибута будет использоваться шейдером для распознавания данных вершин, имена атрибутов, распознаваемые AGK, - position, normal, tangent, binormal, color, uv, uv1, boneweights и boneindices, однако вы можете добавлять атрибуты с любым именем, которое вам нравится, пока вы пишете соответствующий шейдер с теми же именами. Если вы не используете свой собственный шейдер и вместо этого полагаетесь на AGK для рисования объекта, то вы должны придерживаться приведенных выше имен атрибутов. За атрибутивными данными следуют необработанные вершинные данные, которые обычно начинаются с атрибута позиция. Это будет 4-байтовый float для позиции X, 4-байтовый float для позиции Y и 4-байтовый float для позиции Z. Это продолжается для каждого атрибута, указанного в атрибутивных данных. Обратите внимание, что цветовые данные всегда будут иметь в общей сложности 4 байта, по 1 байту без знака для каждого цветового канала. Вы можете получить доступ к отдельным вершинам, используя размер вершины, указанный выше, и индекс вершины, например so offset=vertexDataOffset+(vertexIndex*vertexSize). Наконец, это данные индекса, если таковые имеются. Каждый индекс представляет собой 4-байтовое целое число, которое ссылается на вершину в данных вершин. Каждые три индекса представляют собой многоугольник.
UINT agk::CreateObjectFromMeshMemblock( UINT memID )
void agk::CreateObjectFromMeshMemblock( UINT objID, UINT memID )
memID - Индекс memblock, используемый для создания сетки объекта
objID - Идентификатор создаваемого объекта
Создает memblock из сетки объектов. Объект может содержать одну или несколько сеток, индексы сетки находятся в диапазоне от 1 до GetObjectNumMeshes включительно. Сетка копируется в memblock, поэтому любые изменения в memblock не влияют сразу на сетку, вы должны использовать одну из других команд, таких как SetObjectMeshFromMemblock, чтобы скопировать memblock обратно в сетку. Первые 4 байта memblock представляют количество вершин в сетке. Вторые 4 байта представляют количество индексов в сетке, это может быть 0, и в этом случае каждые три вершины представляют собой многоугольник, и никакие вершины не могут быть общими. Если число индексов больше 0, то каждые три индекса представляют собой многоугольник, и вершины могут быть разделены между многоугольниками. Индексы начинаются с 0, поэтому индекс 0 ссылается на первую вершину в списке. Третьи 4 байта представляют количество атрибутов на вершину, например, позиция, нормали и УФ-данные-все это потенциальные атрибуты, поэтому вершина, содержащая все три, будет иметь 3 атрибута. Вершина должна иметь атрибут позиции, все остальное необязательно. Четвертые 4 байта представляют размер одной вершины в байтах, это можно вычислить по атрибутивным данным, но дано для удобства. Пятые 4 байта смещены для начала вершинных данных, так что вы можете легко добраться до них. Шестые 4 байта смещены для начала индексных данных, будут равны 0, если индексов нет. После этих 6 значений, начиная со смещения 24, идут данные атрибута вершины. Данные атрибута вершины описывают, как выкладываются данные вершины, например, если они имеют нормали, УФ-данные и т. Д. Для каждого атрибута существует 1 байт типа данных, 1 байт количества компонентов, 1 байт флага нормализации, 1 байт длины строки и X байт строковых данных для имени атрибута. Тип данных будет равен 0 для поплавков (используется почти для всего, например, позиции, нормалей и т. Д.) или 1 для беззнаковых байтов (используется для цветов вершин). Количество компонентов-это количество значений на атрибут, например, позиция имеет 3 компонента, x,y,z, UV - данные имеют 2 компонента, а цвета вершин-4 компонента. Обратите внимание, что любой тип данных unsigned byte должен иметь 4 компонента, даже если некоторые из них не используются. Флаг normalize используется только для типов данных unsigned byte и преобразует значения в диапазоне 0-255 в 0.0-1.0 для использования в шейдере. Обычно флаг нормализации будет равен 1 для атрибутов цвета и 0 для всего остального. Байт длины строки всегда будет кратен 4, чтобы упростить проблемы выравнивания, сама строка может иметь немного меньше символов и быть дополнена нулевыми терминаторами, но прочитайте все указанные байты, и вы получите правильную строку длины. Строка имени атрибута будет использоваться шейдером для распознавания данных вершин, имена атрибутов, распознаваемые AGK, - position, normal, tangent, binormal, color, uv, uv1, boneweights и boneindices, однако вы можете добавлять атрибуты с любым именем, которое вам нравится, пока вы пишете соответствующий шейдер с теми же именами. Если вы не используете свой собственный шейдер и вместо этого полагаетесь на AGK для рисования объекта, то вы должны придерживаться приведенных выше имен атрибутов. За атрибутивными данными следуют необработанные вершинные данные, которые обычно начинаются с атрибута позиция. Это будет 4-байтовый float для позиции X, 4-байтовый float для позиции Y и 4-байтовый float для позиции Z. Это продолжается для каждого атрибута, указанного в атрибутивных данных. Обратите внимание, что цветовые данные всегда будут иметь в общей сложности 4 байта, по 1 байту без знака для каждого цветового канала. Вы можете получить доступ к отдельным вершинам, используя размер вершины, указанный выше, и индекс вершины, например so offset=vertexDataOffset+(vertexIndex*vertexSize). Наконец, это данные индекса, если таковые имеются. Каждый индекс представляет собой 4-байтовое целое число, которое ссылается на вершину в данных вершин. Каждые три индекса представляют собой многоугольник. Если вы планируете регулярно вносить изменения в сетку, вы должны сохранить memblock после использования SetObjectMeshFromMemblock вместо того, чтобы регенерировать его из объекта каждый раз, когда вы хотите внести изменения. Затем снова вызовите SetObjectMeshFromMemblock, когда вы хотите перенести свои новые изменения на объект.
UINT agk::CreateMemblockFromObjectMesh( UINT objID, UINT meshIndex )
void agk::CreateMemblockFromObjectMesh( UINT memID, UINT objID, UINT meshIndex )
objID - Идентификатор объекта, содержащего сетку для чтения
meshIndex - Индекс сетки для копирования в memblock
memID - Идентификатор нового memblock
Создает memblock из загруженного изображения, субизображения atlas не поддерживаются. Изображение должно существовать и не подвержено влиянию этой команды. Первые 4 байта memlbock хранят ширину изображения, следующие 4 байта хранят высоту изображения, следующие 4 байта хранят битовую глубину, в настоящее время это всегда будет 32. После этого необработанные данные изображения начинаются в формате RGBA, причем каждый компонент хранится в одном байте, поэтому каждый пиксель занимает 4 байта. Размер данных изображения может быть вычислен по шириневысоте4 байта (на данный момент битовая глубина может быть принята равной 32 битам = 4 байтам). Обратите внимание, что из-за малого формата endian чтение данных изображения с байтами вернет смещения 0=R, 1=G, 2=B, 3=A, но чтение их всех как одного целого числа приведет к значению с A как наиболее значимым байтом, за которым следует B, затем G, затем R как наименее значимый байт. Пиксельные данные начинаются в верхнем левом углу изображения и продолжаются слева направо, а затем сверху вниз, в результате чего изображение сохраняется в виде последовательности строк, заканчивающихся в правом нижнем углу. Возвращает идентификатор, который можно использовать для ссылки на этот memblock в других командах.
UINT agk::CreateMemblockFromImage( UINT imageID )
void agk::CreateMemblockFromImage( UINT memID, UINT imageID )
imageID - Идентификатор изображения для чтения.
memID - Идентификатор создаваемого мемблока.
Создает memblock из файла без какой-либо обработки данных файла, memblock будет байт за байтом копией файла. Возвращает идентификатор, который может быть использован для ссылки на этот memblock позже. Вы можете использовать относительные пути в имени файла для чтения из вложенных папок или использовать SetFolder для первого просмотра. Вы можете использовать абсолютные пути, добавив косую черту в начало имени файла, в этом случае папка, установленная с помощью SetFolder, игнорируется. Например /media/file.txt будет читать его из папки media, даже если SetFolder был использован для перехода к /media/somefolder
UINT agk::CreateMemblockFromFile( const char* filename )
void agk::CreateMemblockFromFile( UINT memID, const char* filename )
filename - Имя файла для чтения, если он не существует, это не удастся.
memID - Идентификатор создаваемого мемблока.
Создает раздел памяти заданного размера для доступа на чтение или запись. Содержимое памяти не определено, пока вы не запишете в нее. Memblock не должен уже существовать с выбранным вами memID.
void agk::CreateMemblock( UINT memID, UINT size )
UINT agk::CreateMemblock( UINT size )
memID - Идентификатор мемблока, который вы хотите использовать.
size - Размер мемблока в байтах. максимум 100 000 000.
Создает изображение из memblock. Мемблок должен существовать, если образ существует, он будет перезаписан, если нет, то будет создан. Memblock должен содержать допустимый PNG-файл, например загруженный CreateMemblockFromFile(memID, image.png)
void agk::CreateImageFromPNGMemblock( uint32_t imageID, uint32_t memID )
uint32_t agk::CreateImageFromPNGMemblock( uint32_t memID )
imageID - Идентификатор создаваемого изображения.
memID - Идентификатор считываемого memblock, memblock не зависит от этой команды.
Создает музыкальную сущность из мемблока. Мемблок должен существовать. Это создаст новый идентификатор музыки и вернет его memblock должен содержать допустимый файл OGG, например загруженный с CreateMemblockFromFile(memID, music.ogg)
uint32_t agk::CreateMusicFromOGGMemblock( uint32_t memID )
void agk::CreateMusicFromOGGMemblock( uint32_t musicID, uint32_t memID )
memID - Идентификатор считываемого memblock, memblock не зависит от этой команды.
musicID - Идентификатор создаваемой музыки.
Создает memblock из загруженного звукового файла. Звуковой файл должен быть загружен с помощью LoadSound и не подвержен влиянию этой команды. Первые 2 байта memlbock хранят количество каналов (1 или 2 поддерживаемых), следующие 2 байта хранят биты на выборку (8 или 16 поддерживаемых), следующие 4 байта хранят выборки в секунду, например 44100. Следующие 4 байта-это количество кадров в звуковых данных, размер звуковых данных в байтах можно вычислить из этого с помощью формулы numFrames*(BitsPerSample/8)*channels. В 2-канальном звуке кадр содержит 2 сэмпла, по одному для каждого канала. В моно-звуке кадр содержит 1 образец. Остальная часть memblock-это необработанные звуковые данные, например, в 8-битном стереозвуке с 3 кадрами необработанные данные будут выглядеть так. смещение байта 0 = Кадр 1, смещение байта данных левого канала 1 = Кадр 1, Смещение байта данных правого канала 2 = Кадр 2, Смещение байта данных левого канала 3 = Кадр 2, смещение байта данных правого канала 4 = Кадр 3, смещение байта данных левого канала 5 = Кадр 3, данные правого канала Продолжительность звука может быть рассчитана по следующей формуле: numFrames/samplesPerSecond. Эта команда не работает с идентификаторами звуковых экземпляров, а только с идентификаторами звуковых файлов. Возвращает идентификатор, который может быть использован для ссылки на этот memblock в других командах.
UINT agk::CreateMemblockFromSound( UINT soundID )
void agk::CreateMemblockFromSound( UINT memID, UINT soundID )
soundID - Идентификатор звука для чтения.
memID - Идентификатор создаваемого мемблока.
Создает файл из memblock без какой-либо обработки данных memblock, файл будет байт за байтом копией данных memblock. Вы можете использовать относительные пути в имени файла для записи в подпапки или использовать SetFolder для просмотра там в первую очередь. Вы можете использовать абсолютные пути, добавив косую черту в начало имени файла, в этом случае папка, установленная с помощью SetFolder, игнорируется. Например /media/file.txt поместит его в папку media, даже если SetFolder был использован для перехода к /media/somefolder
void agk::CreateFileFromMemblock( const char* filename, UINT memID )
filename - Имя создаваемого файла, если он уже существует, будет перезаписано.
memID - Идентификатор считываемого memblock, memblock не зависит от этой команды.
Создает изображение из memblock. Мемблок должен существовать, если образ существует, он будет перезаписан, если нет, то будет создан. Первые 4 байта memlbock хранят ширину изображения, следующие 4 байта хранят высоту изображения, следующие 4 байта хранят битовую глубину, в настоящее время это должно быть 32. После этого необработанные данные изображения начинаются в формате RGBA, причем каждый компонент хранится в одном байте, поэтому каждый пиксель занимает 4 байта. Размер данных изображения может быть вычислен по шириневысоте4 байта (на данный момент битовая глубина может быть принята равной 32 битам = 4 байтам). Обратите внимание, что из-за малого формата endian запись данных изображения байтами приведет к смещениям 0=R, 1=G, 2=B, 3=A, но запись их всех в виде одного целого числа будет интерпретироваться как значение с A как наиболее значимым байтом, за которым следует B, затем G, затем R как наименее значимый байт. Пиксельные данные начинаются в верхнем левом углу изображения и продолжаются слева направо, а затем сверху вниз, в результате чего изображение сохраняется в виде последовательности строк, заканчивающихся в правом нижнем углу. Эта команда использует большую пропускную способность графического процессора, поэтому не рекомендуется вызывать эту команду каждый кадр на больших изображениях.
void agk::CreateImageFromMemblock( UINT imageID, UINT memID )
UINT agk::CreateImageFromMemblock( UINT memID )
imageID - Идентификатор создаваемого или изменяемого изображения.
memID - Идентификатор считываемого memblock, memblock не зависит от этой команды.
Копирует часть одного мемблока в другой. Оба memblocks должны существовать и могут быть разных размеров.
void agk::CopyMemblock( UINT memSrcID, UINT memDstID, UINT srcOffset, UINT dstOffset, UINT size )
memSrcID - Идентификатор memblock для копирования.
memDstID - Идентификатор memblock для копирования.
srcOffset - Смещение в исходном memblock для начала копирования.
dstOffset - Смещение целевого мемблока для копирования.
size - Количество байтов для копирования.
Добавляет новую сетку к объекту, построенному из данного memblock. Первые 4 байта memblock представляют количество вершин в сетке. Вторые 4 байта представляют количество индексов в сетке, это может быть 0, и в этом случае каждые три вершины представляют собой многоугольник, и никакие вершины не могут быть общими. Если число индексов больше 0, то каждые три индекса представляют собой многоугольник, и вершины могут быть разделены между многоугольниками. Индексы начинаются с 0, поэтому индекс 0 ссылается на первую вершину в списке. Третьи 4 байта представляют количество атрибутов на вершину, например, позиция, нормали и УФ-данные-все это потенциальные атрибуты, поэтому вершина, содержащая все три, будет иметь 3 атрибута. Вершина должна иметь атрибут позиции, все остальное необязательно. Четвертые 4 байта представляют размер одной вершины в байтах, это можно вычислить по атрибутивным данным, но дано для удобства. Пятые 4 байта смещены для начала вершинных данных, так что вы можете легко добраться до них. Шестые 4 байта смещены для начала индексных данных, будут равны 0, если индексов нет. После этих 6 значений, начиная со смещения 24, идут данные атрибута вершины. Данные атрибута вершины описывают, как выкладываются данные вершины, например, если они имеют нормали, УФ-данные и т. Д. Для каждого атрибута существует 1 байт типа данных, 1 байт количества компонентов, 1 байт флага нормализации, 1 байт длины строки и X байт строковых данных для имени атрибута. Тип данных будет равен 0 для поплавков (используется почти для всего, например, позиции, нормалей и т. Д.) или 1 для беззнаковых байтов (используется для цветов вершин). Количество компонентов-это количество значений на атрибут, например, позиция имеет 3 компонента, x,y,z, UV - данные имеют 2 компонента, а цвета вершин-4 компонента. Обратите внимание, что любой тип данных unsigned byte должен иметь 4 компонента, даже если некоторые из них не используются. Флаг normalize используется только для типов данных unsigned byte и преобразует значения в диапазоне 0-255 в 0.0-1.0 для использования в шейдере. Обычно флаг нормализации будет равен 1 для атрибутов цвета и 0 для всего остального. Байт длины строки всегда должен быть кратен 4 по соображениям выравнивания, сама строка может иметь немного меньше символов, но всегда округляется до ближайшего кратного 4 для значения длины строки. например, строка длины 5 должна иметь значение длины строки 8. Обратите внимание, что строка из 4 символов имеет нулевой терминатор на конце, что делает ее длиной 5, поэтому, даже если она уже имеет кратное 4 символам значение длины, она должна использовать значение длины 8 из-за нулевого терминатора. Строка имени атрибута будет использоваться шейдером для распознавания данных вершин, имена атрибутов, распознаваемые AGK, - position, normal, tangent, binormal, color, uv, uv1, boneweights и boneindices, однако вы можете добавлять атрибуты с любым именем, которое вам нравится, пока вы пишете соответствующий шейдер с теми же именами. Если вы не используете свой собственный шейдер и вместо этого полагаетесь на AGK для рисования объекта, то вы должны придерживаться приведенных выше имен атрибутов. За атрибутивными данными следуют необработанные вершинные данные, которые обычно начинаются с атрибута позиция. Это будет 4-байтовый float для позиции X, 4-байтовый float для позиции Y и 4-байтовый float для позиции Z. Это продолжается для каждого атрибута, указанного в атрибутивных данных. Обратите внимание, что цветовые данные всегда будут иметь в общей сложности 4 байта, по 1 байту без знака для каждого цветового канала. Вы можете получить доступ к отдельным вершинам, используя размер вершины, указанный выше, и индекс вершины, например so offset=vertexDataOffset+(vertexIndex*vertexSize). Наконец, это данные индекса, если таковые имеются. Каждый индекс представляет собой 4-байтовое целое число, которое ссылается на вершину в данных вершин. Каждые три индекса представляют собой многоугольник.
void agk::AddObjectMeshFromMemblock( UINT objID, UINT memID )
objID - Идентификатор объекта для изменения
memID - Индекс memblock, который будет использоваться для создания новой сетки