Перейти к содержимому


Свернуть чат Чат Открыть чат во всплывающем окне

GranMinigun : (2 дней назад) ...Твою мать. Ионные движки тоже мелкие, хотя все остальные - нормального размера.
GranMinigun : (2 дней назад) ...А может, механоидов и во все сто надо. Что я там только что писал?..
GranMinigun : (2 дней назад) А вот механоиды, относясь к товарам, оказываются мелковаты - надо множить в десять раз. Вообще, пока картина такая вырисовывается: декоративные элементы (в том числе здания, растительность, камни, забор) - увеличивать в десять раз; интерактивные геймплейные элементы (глайдеры, оружие, контейнеры и иже с ними) - в сто; элементы, отображающиеся только в интерфейсе (товары, оборудование) - не трогать. Я ещё посмотрю, что к чему, потом набросаю список по префиксам.
lz : (2 дней назад) Так что не спеши, надо подумать.
GranMinigun : (2 дней назад) Товары (TOV_) тоже здоровенные.
GranMinigun : (2 дней назад) Ага, нифига. Именно оборудование (префикс EQP_) вообще не надо трогать - оно и без того в тридцать раз больше глайдера...
GranMinigun : (2 дней назад) Ага. Оружие тоже в сто раз. Чую, всё оборудование нужно в сто раз.
GranMinigun : (2 дней назад) У меня, например, та же растительность и те же камни увеличены именно в десять раз - размеры в итоге нормальные.
GranMinigun : (2 дней назад) Я сейчас ещё оружие проверю. Может, ещё куда гляну. Но по прошлому опыту могу сказать, что с большинством моделей проблем больше быть не должно.
lz : (2 дней назад) Да, глайдеры мелковаты, поэтому я 30 ставил как среднее, надо разбираться с этим.
GranMinigun : (2 дней назад) Ага, потому что они в самом деле почему-то уменьшены изначально. В общем, смотри: размеры моделей при конвертации увеличиваем в десять раз, кроме моделей с приставкой GL_ - их увеличиваем в сто раз (можно и без правила в конвертере, а просто вручную проставить при импорте). Тогда должно получиться нормально. Если будут ещё проблемные модели - посмотрю.
GranMinigun : (2 дней назад) А вот это уже интересно... "Новые" модели глайдеров в самом деле всё ещё меньше нужного. dafuq
GranMinigun : (2 дней назад) Блин. Хотел во время симуляции сделать кадр вперёд - случайно добавил ещё одного клиента. Уронил редактор.))
GranMinigun : (2 дней назад) Ну, я, в общем-то, и не настаиваю. Просто вспомнил.
lz : (2 дней назад) Да пока и так сойдёт.
GranMinigun : (2 дней назад) Ну, она, походу, только для зданий и есть. Остальные, видимо, используют шарики да капсулы. Хотя в случае с деревьями немного странно, мне кажется.
GranMinigun : (2 дней назад) Это сложная коллизия, сам же видишь. По каждому треугольнику. Генерация для упрощённой.
lz : (2 дней назад) Я там явно для коллизий ничего не делал.
lz : (2 дней назад) Тем более у большинства объектов в механоидах нет этого шейпа. Видел только у зданий.
GranMinigun : (2 дней назад) Ты всё равно FBX генерируешь. Наверняка в документации к движку где-то указано, как пометить модель в качестве коллизии.
lz : (2 дней назад) Не знаю, вот он норм коллизию показывает - https://imgur.com/a/6yujS
GranMinigun : (2 дней назад) В UE есть встроенный механизм генерации коллизии. Простую геометрию ещё более-менее обрабатывает (простую - как коробку), но с чем посложнее уже начинает лажать. Лучше вручную делать. В нашем случае даже делать не надо. Ну. Это пока, естественно.)
lz : (2 дней назад) Какая генерация?
GranMinigun : (2 дней назад) Если ты про генерацию - и не надейся. Если про импорт - один раз сделал и забыл. Кстати, 4.18.2 вышел.
lz : (2 дней назад) Норм про шейп. Но я надеюсь анреал сам справится с коллизиями.
lz : (2 дней назад) Не знаю, пока великовато.
GranMinigun : (2 дней назад) К слову, SHAPE из исходников можно (нужно) импортировать как коллизию. Я могу ещё по поводу материалов накатать стену текста, если в этом есть смысл.
GranMinigun : (2 дней назад) Умножай на 10 от исходных значений. Тогда должно идеально подходить.
Гость : (2 дней назад) С импортом карт я ошибку ещё нашёл, потом перезалью. Может быть тогда 0.3 будет подходить.
Гость : (2 дней назад) https://github.com/a...del/model.h#L25
Гость : (2 дней назад) Там у меня умножение на 30, поэтому ты делишь 0.3333, но 0.3333 всё равно пока выглядит больше, чем надо.
GranMinigun : (2 дней назад) И заодно опиши вкратце, почему размеры моделей поменялись. Что используется FBX вместо OBJ - уже вижу, но ты явно где-то либо с множителями игрался, либо просто с цифрами.
GranMinigun : (2 дней назад) В общем, самостоятельно импортировал основную базу - результат тот же: нужно масштабирование в 0.3333. В Скалах она слишком большой выходит из-за того, что там весь ландшафт скукожен, а не только ось Z. X/Y кто трогал? Они должны равняться 100.
GranMinigun : (2 дней назад) А. Гы. Ясно.
lz : (2 дней назад) Где? Не знаю, я на всякий случай обновил бутстрапперы.
GranMinigun : (2 дней назад) В чём там хоть косяк был, если не секрет? Или это я чудак? %)
GranMinigun : (2 дней назад) Обана. Вылечилось. Очень сильные колдунства, однако!
lz : (2 дней назад) Ну значит обновилось)
GranMinigun : (2 дней назад) Апдейтер - вообще ничего, бутстрап - срёт строками вида "[2017-12-12 15:07:55.126609] [0x000012e8] [info] File "C:\Dev\Polygon-4/Tools/mmo_extractor.py" has local modifications, skipping". И радостно заявляет об успехе.
lz : (2 дней назад) Что пишут?
GranMinigun : (2 дней назад) Да даже если забираю архив, затем апдейтер, затем бутстрап.
lz : (2 дней назад) Ок, а тогда апдейтером сначала обновить сами бутстрапперы, а потом бутстрап тулз?
GranMinigun : (2 дней назад) Я уже писал, что бутстрап у меня не хочет ничего выкачивать, даже при смене директории.
lz : (2 дней назад) Там немного не так сейчас собирается. Скачай просто готовое и всё через бутстарп тулз.
GranMinigun : (2 дней назад) Так. Я откровенно не понял, как собирать тулзы. Цмак жалуется на отсутствие флекса и бизона - ладно, забрал бинари под венду, только куда их класть-то? Да и под пингвином тоже жалуется, уже на "BISON_TARGET", перезагружаться за логом лень.

Yandersen

Регистрация: 06 Июл 2014
OFFLINE Активность: неделю назад
*****

Мои темы

[asm.hpp] - библиотека базовых функций

18 Июль 2017 - 19:21

Простейшие функции, написанные по большей части прямо на ассемблере:

 

asm.hpp

 

Справочник:

unsigned int asmBestBufferSize( unsigned int DataSize )

Вычисляет рекомендуемый размер буффера для хранения данных указанного размера.

В случае DataSize=0 возвращает 0;

для 1/2/3/4 байт возвращает 4;

для 4 < DataSize <= 2^31 вычисляет результат путём округления вверх до ближайшей степени двойки (8 для 5/6/7/8, 16 для 9/10/.../16 и т.д.);

если DataSize > 2^31, возвращает 2^32-1 (максимум).

void asmCopyMemory( void* Destination, const void* Source, unsigned int ByteCount )

Улучшенный эквивалент стандартной memmove - копирует кусок памяти размером "ByteCount" из "Source" в "Destination". Не ругается на нулевые адреса в аргументах (ничего тогда не делает). Частичное наложение копируемых кусков допустимо.

void* asmCompareBuffers( const void* Buffer1, const void* Buffer2, unsigned int ByteCount )

Сравнивает два массива ("Buffer1" и "Buffer2") размером "ByteCount" побайтно и возвращает либо 0 (если массивы эквивалентны) либо адрес байта в первом массиве, который не эквивалентен соответствующему байту во втором массиве. Если адрес как минимум одного из массивов NULL, возвращённое значение равно нулю. Чтобы найти индекс различающихся байтов, отнимите от результата адрес первого массива.

unsigned int asmCountChars( const char *String )

Считает количество 8-битных символов в нуль-терминированной строке (эквивалент стандартной strlen). Если на входе NULL, возвращает 0.

char* asmFindChar( const char* String, char CharToFind )

Сканирует нуль-терминированную строку "String" пока не найдёт указанный байт "CharToFind". Если найдёт, вернёт его адрес, а не найдёт - тогда NULL. Нулевой указатель давать можно.

char* asmFindLastChar( const char* String, char CharToFind,
                       unsigned int *CalculatedStringLength = NULL,
                       unsigned int *TotalCharsFound = NULL )

Сканирует всю нуль-терминированную строку "String" в поисках последнего встреченного байта "CharToFind". Если найдёт, вернёт его адрес, а не найдёт - тогда NULL. Нулевой указатель давать можно. Поскольку функция так или иначе сканирует всю строку, то можно в дополнение узнать её длину (дав указатель на контейнер для переменной "CalculatedStringLength") и сколько всего искомых байтов встречено по пути ("TotalCharsFound").

void asmFillMemory( void* Ptr, char c, unsigned int ByteCount )

Заполняет "ByteCount" байт памяти начиная с адреса "Ptr" указанным байтом "с" (эквивалент стандартной memset).

void asmFillMemory( void* Buffer, const void* Item, unsigned int ItemSize, unsigned int ItemCount )

Заполняет массив "Buffer" указанным элементом "Item" в количестве "ItemCount" штук, каждый размером "ItemSize" байт. Если один из указателей NULL или общий размер массива больше 2^32-1 байт, копирования не произойдёт.

unsigned long long asmGetTimeStamp()

Возвращает 64-битный счётчик тактов процессора (обнуляется при перезагрузке системы).

char* asmSLIToStrBin( signed long int Value, char* Buffer )
char* asmULIToStrBin( unsigned long int Value, char* Buffer )
char* asmSLLIToStrBin( signed long long int Value, char* Buffer )
char* asmULLIToStrBin( unsigned long long int Value, char* Buffer )

Конвертирует 32-битное (64-битное) значение ("Value") в бинарный формат (0b101). Для конвертации нужен буффер "Buffer" размером в 35 (67) байт. Возвращённый указатель - это адрес внутри буффера, где число начинается (не всегда прямо с первого байта).

char* asmSLIToStrOct( signed long int Value, char* Buffer )
char* asmULIToStrOct( unsigned long int Value, char* Buffer )
char* asmSLLIToStrOct( signed long long int Value, char* Buffer )
char* asmULLIToStrOct( unsigned long long int Value, char* Buffer )

Конвертирует 32-битное (64-битное) значение ("Value") в восьмеричный формат (0101). Для конвертации нужен буффер "Buffer" размером в 13 (24) байт. Возвращённый указатель - это адрес внутри буффера, где число начинается (не всегда прямо с первого байта).

char* asmSLIToStrHex( signed long int Value, char* Buffer )
char* asmULIToStrHex( unsigned long int Value, char* Buffer )
char* asmSLLIToStrHex( signed long long int Value, char* Buffer )
char* asmULLIToStrHex( unsigned long long int Value, char* Buffer )

Конвертирует 32-битное (64-битное) значение ("Value") в шестнадцатеричный формат (0x101). Для конвертации нужен буффер "Buffer" размером в 11 (19) байт. Возвращённый указатель - это адрес внутри буффера, где число начинается (не всегда прямо с первого байта).

char* asmULIToStrDec( unsigned long int Value, char* Buffer )
char* asmSLIToStrDec( signed long int Value, char* Buffer )
char* asmULLIToStrDec( unsigned long long int Value, char* Buffer )
char* asmSLLIToStrDec( signed long log int Value, char* Buffer )

Конвертирует 32-битное (64-битное) значение ("Value") в десятичный формат (320, -783). Для конвертации нужен буффер "Buffer" размером в 11 или 12 (21 или 22) байт. Возвращённый указатель - это адрес внутри буффера, где число начинается (не всегда прямо с первого байта).

char* asmFToStrDec( float Value, char* Buffer )
char* asmDToStrDec( double Value, char* Buffer )

Конвертирует float (double) значение ("Value") в формат с плавающей запятой (2., -1.23456e-12, 6.e3). Для конвертации нужен буффер "Buffer" размером в 17 (25) байт. Возвращённый указатель - это адрес внутри буффера, где число начинается (не всегда прямо с первого байта). Количество значащих цифр для типа float - 9 (до 8 после запятой), для double - 17 (до 16 после запятой).

int asmDToStrDec( double Value, char* Buffer, int Digits )

Переводит значение ("Value") в формат

[целочисленное_значение] * 10[экспонента]

с указанным количеством цифр ("Digits") в целочисленном значении и сохраняет эту часть в буффер ("Buffer") в виде нуль-терминированной строки цифр (для отрицательных значений первым будет знак минус), а экспоненту функция возвращает. Размер буффера должен быть на два байта больше чем запрошенное количество цифр ("Digits").

unsigned long long int asmStrBinToInt( char* String )
unsigned long long int asmStrOctToInt( char* String )
unsigned long long int asmStrHexToInt( char* String )

Декодирует значение, записанное в бинарном/восьмеричном/шестнадцатеричном формате как 64-битное целочисленное беззнаковое.

signed long long int asmStrDecToInt( char* String )

Декодирует значение, записанное в десятеричном формате как 64-битное целочисленное. Допускает использование +/- знаков.

double asmStrDecToDouble( char* String )

Декодирует значение, записанное в десятеричном формате с плавающей запятой и экспонентой.


О субфоруме Code Lab

18 Июль 2017 - 14:59

Форум для публикации наработок на С++, имеющих потенциал оказаться полезными другим пользователям.

 

Рекомендуемый формат публикации - отдельный топик под каждый ресурс (отдельный файл с кодом или группа логически связанных файлов, как то хеадер с DLL-кой или LIB-ом). В первом посте должна быть ссылка на сторонний ресурс для скачивания (не грузите всё сюда, плиз).

 

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

 

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

 

Не забывайте о тегах для создаваемого топика.