Render.ru

Очень серьезный вопрос. Как из MaxScript в файл скинуть бинарный 0.

Stealthy

Активный участник
Рейтинг
12
#1
Если кто нормально шарит в МаксСкрипте - плиз хелп!
Есть необходимость выкинуть в файл бинарный 0. Но Макс отказывается это делать, т.к. весь вывод написан через строковые функции вывода в Си, и, следовательно, 0 он воспринимает как конец строки. Ну и, соответственно, не выводит. А надо. Все остальное вывести можно (правда через одно место).
Так вот, обращаюсь к экспертам - кто-нить когда-нить такое делал? и оно вообще возможно?
 

master3d

Активный участник
Рейтинг
5
#2
Давай по порядку ! Обрисуй боле точно задачу. Вроде как в скрипет можно делать вывод в файл, причем в любом формате , в том числе и в бинарном.
 

Stealthy

Активный участник
Рейтинг
12
#3
Скрипт я писал под свой графический движок где-то год назад. Т.е. - мне надо было, чтобы он выкидывал сцену в файл в моем формате. Я подумал, что для такой плевой задачи SDK слишком громоздок, хотя там даж есть спец. модули для export. Но мне надо было быстренько, за пару дней набросать, вот и набросал... (тогда у меня стоял еще 5й макс). При этом использовал какую-то жуткую конструкцию с execute из SDK, иначе он непечатаемые символы вообще как-то криво выводил. Через print и format - тем более ничего не получилось.
Так вот - с помощью этой функции все шло так, как надо (единственное - пришлось через одно место выводить все числа и структуры, чтобы их потом можно было блоками читать из движка в стандартном float или int), однако я вдруг заметил, что выводит она иногда не до конца, т.е. просто обрывает вывод блока данных и все тут! Проведя тщательное исследование, я понял, что весь подобный вывод в максе написан через функцию fputs или подобную. Она выводит не блоком, а строкой, а символ конца строки для этой функции (как в си и принято) - 0. Вот тут-то я и приплыл. Помню, пришлось все равно выводить все в символьном виде и писать свой перекодировщик в нужный формат отдельно. Счас надо будет попробовать в восьмом максе поиздеваться над выводом, авось получится... Я просто подумал, что уже кто-то сталкивался и знает, т.к. в описании MaxScript я решения не нашел.
Вся суть проблемы - именно в экспорте бинарного ноля из скрипта. Если мне кто-нить покажет хотя бы кусок скрипта, в результате которого в файле оказывается бинарный 0 - буду очень благодарен.
А почему только недавно вопрос поднял - переделывал движок и подумал, что неплохо было бы заново по-хорошему переписать скрипт.
 

Savin Denis

Модератор форума
Команда форума
Рейтинг
138
#4
Почитай главу - BinStream for Binary Reading and Writing
если нужно добавлять 0 в текстовый поток боюсь прийдется преоткрывать поток как бинарный
 

Stealthy

Активный участник
Рейтинг
12
#5
ок. Блин, как же это я проглядел про существование бинарных потоков-то, а? Все просто как две копейки. Сэнькс!

2 master3d:
вот видишь, сам иногда оказываешься в положении нашкодившего школьника ;) Может, мне просто тогда не так сильно приспичило, что я целую главу упустил? ...
 

master3d

Активный участник
Рейтинг
5
#6
Ну вот :) ....

Я единственно не понимаю .. а почему просто нельзя читать из файла макса , а не экспортить сцену кудато... Есть сохраненый файл , в том же СДК есть его структура .... .. бери и читай из него , зачем велосипед то изобретать??? Может у тебя конечно какие то спецыфичные там параметры нужны :)
 

Stealthy

Активный участник
Рейтинг
12
#7
2 master3d:
Во-первых, там дофига лишнего (а то бы я из него прям в движок и читал бы %)).
А во-вторых, перед сохранением надо было делать кучу преобразований (например, тот же UVW-маппинг приводить в божеский вид, да и с модификаторами некоторыми и картами просто беда), так что я решил воспользоваться интерфейсом макса для экспорта (там много полезных функций, которые автоматически преобразуют все, что тебе надо в нужный вид, вплоть до автоматической интерполяции и т.д.).
Именно поэтому я и не стал юзать максовский файлы.
 
Сверху