Здравствуйте, я увлекаюсь, в основном моделированием, но до скриптов руки не доходили. И вот дошло до того, что мне дали задание по Maxscript... в принципе, звучит элементарно (наверное, и на деле также). Я просмотрел большинство тем, не нашел ничего схожего.
Суть задания:
Во внешнем файле (не в среде Макса) нужно вбивать координаты двух параллелепипедов. Затем нужно расставить источники света, отрендерить изображение и сохранить его в формате Jpg.
В принципе, все. Но я не могу понять, что из себя должен представлять внешний файл... то ли это координаты вбиваются в блокнот, то ли нужно создать отдельную программку со своим интерфейсом, и как это все связать с Максом. Уж как там источники света расставить я разберусь, а вот что до внешнего файла и рендера хотелось бы услышать пару советов.
Если что-то нужно пояснить, спрашивайте.
Спасибо.
Поправочка: координаты источников света тоже должны быть прописаны в файле. Насчет рендера не знаю... если придется делать отдельную программку, то, скорей всего, нужно сделать кнопку для визуализации и сохранения в файл jpg. Но тут вам лучше знать, я думаю.
Так, теперь я уточнил некоторые вещи. В качестве внешнего файла является обычный блокнот. Т.е. вбиваем туда числа, а затем нужно произвести чтение из файла координат параллелепипеда.
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:
Как отрендерить в файл:
Что читать:
Rendering - Topics Index
Controlling the Renderer
9) Повесить на кнопку: нужно обернуть как macroscript
Что читать:
Defining MacroScripts
Developing MacroScripts - Topics Index
Наконец-то выдалось время заняться решением этой задачи.
С рендерингом в файл никаких проблем нет. Возникли вопросы, связанные с чтением координат центра объекта. Сейчас я процитирую 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
)
______________
опять же не понятно, как управлять конкретно центром объекта и такими объектами, как источники света и камеры
есть еще несколько вопросов, но сначала нужно решить основной вопрос (управление центром объектов из текстового файла)
Прежде внимательней смотри то что я по рекомендовал, похоже что ты посмотрел не все.
Там есть и управление положением объекта. И не нужно строить (сохранять) параметрический объект по точкам, еще раз напоминаю о макрорекордере те параметры что в нем не видны смотрим в хелпе.
Доступ к резюме доступен только по пакетному доступу HR менеджерам зарегистрированных компаний. Узнать о вариантах корпоративных пакетов можно по ссылке.
Tesla
Суть задания:
Во внешнем файле (не в среде Макса) нужно вбивать координаты двух параллелепипедов. Затем нужно расставить источники света, отрендерить изображение и сохранить его в формате Jpg.
В принципе, все. Но я не могу понять, что из себя должен представлять внешний файл... то ли это координаты вбиваются в блокнот, то ли нужно создать отдельную программку со своим интерфейсом, и как это все связать с Максом. Уж как там источники света расставить я разберусь, а вот что до внешнего файла и рендера хотелось бы услышать пару советов.
Если что-то нужно пояснить, спрашивайте.
Спасибо.
Tesla
Tesla
Savin Denis
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
Tesla
С рендерингом в файл никаких проблем нет. Возникли вопросы, связанные с чтением координат центра объекта. Сейчас я процитирую 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
)
______________
опять же не понятно, как управлять конкретно центром объекта и такими объектами, как источники света и камеры
есть еще несколько вопросов, но сначала нужно решить основной вопрос (управление центром объектов из текстового файла)
Savin Denis
Там есть и управление положением объекта. И не нужно строить (сохранять) параметрический объект по точкам, еще раз напоминаю о макрорекордере те параметры что в нем не видны смотрим в хелпе.