Наконец-то выдалось время заняться решением этой задачи.
С рендерингом в файл никаких проблем нет. Возникли вопросы, связанные с чтением координат центра объекта. Сейчас я процитирую 2 варианта записи/чтения данных, которые я раздобыл в хелпе макса, и которые вызвали несколько вопросов.
Вариант №1
Запись в файл:
stream = fopen "c:\\bintest2.bin" "wb"
num = getnumVerts $box01
for i = 1 to num do
(
pos = getVert $Box01 i
writeString stream (pos.x as string)
writeString stream (pos.y as string)
writeString stream (pos.z as string)
)
fclose stream
***
Чтение из файла:
stream = fopen "c:\\3dwork\\prim_Data.txt" "rb"
num = getnumVerts $Box01
pos = [0, 0, 0]
for i = 1 to num do
(
pos.x = readFloat stream
pos.y = readFloat stream
pos.z = readFloat stream --(*) ошибка
setVert $Box01 i pos
)
fclose stream
update $Box01
-------
запись работает нормально, а в чтении "ругается":
(*)
<BinStream:c:\3dwork\prim_Data.txt>
8
[0,0,0]
-- Error occurred in i loop; filename: C:\3dwork\reading_file.ms; position: 204
-- Frame:
-- i: 1
-- Unable to convert: undefined to type: Float
true
OK
___________
Проблема, собственно, вот в чем: прежде чем произвести какие-то манипуляции, нужно конвертировать объект в Mesh. Скрипт записывает в файл координаты каждой вершины, а мне нужно только центр объекта, типа pos = [x,y,z] (и в файле менять эти x, y, z). Но данный способ записывает в файл координаты, как бинарный код, а обычный блокнот такое не считывает, да и управлять объектом становится неимоверно тяжело
***
Вариант №2
Привожу второй вариант из хелпа, который записывает координаты в блокнот, но также требует преждевременной конвертации в Mesh.
Запись в файл:
tm = snapshotAsMesh $Object01 -- Записываем в файл первый примитив
out_name = ((GetDir #export)+"/testmesh.txt") -- Назначаем директорию и название файла
out_file = createfile out_name -- создаем файл
num_verts = tm.numverts
num_faces = tm.numfaces
format "%,%\n" num_verts num_faces to
ut_file --%,% - число вершин и граней; \n - перенос
for v = 1 to num_verts do -- цикл для просчета вершин
(
vert = getVert tm v
format "%," vert to
ut_file
)
format "\n" to
ut_file
for f = 1 to num_faces do -- цикл для просчета граней
(
face = getFace tm f
format "%," face to
ut_file
)
close out_file -- закрываем созданный файл
delete tm
edit out_name
***
Чтение из файла:
vert_array = #()
face_array = #()
in_name = ((GetDir #export)+"/testmesh.txt")
in_file = openFile in_name
if in_file != undefined then
(
num_verts = readValue in_file
num_faces = readValue in_file
vert_array.count = num_verts
face_array.count = num_faces
for v = 1 to num_verts do
(
vert = readValue in_file
vert_array[v] = vert
)
for f = 1 to num_faces do
(
face = readValue in_file
face_array[f] = face
)
close in_file
new_mesh = mesh vertices:vert_array faces:face_array
)
______________
опять же не понятно, как управлять конкретно центром объекта и такими объектами, как источники света и камеры
есть еще несколько вопросов, но сначала нужно решить основной вопрос (управление центром объектов из текстового файла)