Render.ru

Управление сценой из внешнего файла

Tesla

Активный участник
Рейтинг
13
#1
Здравствуйте, я увлекаюсь, в основном моделированием, но до скриптов руки не доходили. И вот дошло до того, что мне дали задание по Maxscript... в принципе, звучит элементарно (наверное, и на деле также). Я просмотрел большинство тем, не нашел ничего схожего.
Суть задания:
Во внешнем файле (не в среде Макса) нужно вбивать координаты двух параллелепипедов. Затем нужно расставить источники света, отрендерить изображение и сохранить его в формате Jpg.
В принципе, все. Но я не могу понять, что из себя должен представлять внешний файл... то ли это координаты вбиваются в блокнот, то ли нужно создать отдельную программку со своим интерфейсом, и как это все связать с Максом. Уж как там источники света расставить я разберусь, а вот что до внешнего файла и рендера хотелось бы услышать пару советов.
Если что-то нужно пояснить, спрашивайте.
Спасибо.
 

Tesla

Активный участник
Рейтинг
13
#2
Поправочка: координаты источников света тоже должны быть прописаны в файле. Насчет рендера не знаю... если придется делать отдельную программку, то, скорей всего, нужно сделать кнопку для визуализации и сохранения в файл jpg. Но тут вам лучше знать, я думаю.
 

Tesla

Активный участник
Рейтинг
13
#3
Так, теперь я уточнил некоторые вещи. В качестве внешнего файла является обычный блокнот. Т.е. вбиваем туда числа, а затем нужно произвести чтение из файла координат параллелепипеда.
 

Savin Denis

Модератор форума
Команда форума
Рейтинг
138
#4
1) Если координаты будут вбивать вручную то бери Excel-вскeю таблицу (Блокнот плох тем что нет вобще никакого форматирования, лишний символ и все поехало )
3) Определись со списком объектов и их параметрами
4) Создай шаблон для Excel Чтоб для каждого параметра была своя ячейка
5) Сохраняй в .csv формате
6) Когда будет определен формат можно писать для него парсер
Что читать:
External File Access - Topics Index
FileStream Values
String Values
Reading_ASCII Files
How To ... Read Geometry Data From Text File - Part One
How To ... Access Windows System Data
Standard Open and Save File Dialogs

7) Создание и модификация объектов: По началу помогает включение MacroRecordera
Также смотрим параметры объектов в хелпе
Что читать:
Node Transform Properties
Node Common Properties, Operators, and Methods
Drawing a Box with MAXScript
Modifying the Box
Applying Standard Transformations

8) Render:
Как отрендерить в файл:
Код:
render camera:$Camera01 outputSize:[320,240] outputFile:("c:\\test.jpg")
Что читать:
Rendering - Topics Index
Controlling the Renderer

9) Повесить на кнопку: нужно обернуть как macroscript
Что читать:
Defining MacroScripts
Developing MacroScripts - Topics Index
 

Tesla

Активный участник
Рейтинг
13
#6
Наконец-то выдалось время заняться решением этой задачи.
С рендерингом в файл никаких проблем нет. Возникли вопросы, связанные с чтением координат центра объекта. Сейчас я процитирую 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:eek:ut_file --%,% - число вершин и граней; \n - перенос
for v = 1 to num_verts do -- цикл для просчета вершин
(
vert = getVert tm v
format "%," vert to:eek:ut_file
)
format "\n" to:eek:ut_file
for f = 1 to num_faces do -- цикл для просчета граней
(
face = getFace tm f
format "%," face to:eek: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
)

______________

опять же не понятно, как управлять конкретно центром объекта и такими объектами, как источники света и камеры

есть еще несколько вопросов, но сначала нужно решить основной вопрос (управление центром объектов из текстового файла)
 

Savin Denis

Модератор форума
Команда форума
Рейтинг
138
#7
Прежде внимательней смотри то что я по рекомендовал, похоже что ты посмотрел не все.
Там есть и управление положением объекта. И не нужно строить (сохранять) параметрический объект по точкам, еще раз напоминаю о макрорекордере те параметры что в нем не видны смотрим в хелпе.
 
Сверху