Render.ru

Построение фигуры по координатам

C'mon

Пользователь сайта
Рейтинг
2
#1
Добрый день!
Хочу обратиться к вам с просьбой о помощи.
Излагаю свою проблему:
В наличии имеется файл с расширением *.asc (ASCII) с набором координат определённой фигуры. В нем просто содержится три столбца чисел (координаты по X, Y, Z). При необходимости все эти координаты можно скопировать и в обычный текстовый файл. Так вот возникла идея с помощью этих координат построить эту фигуру в Maya. Не знаю, как лучше это сделать, может в Maya есть какие-нибудь встроенные функции для этого или нужно писать свой скрипт? В программировании, к сожалению, я не очень силен, поэтому хочется понять, как лучше поступить, и если придётся писать свой скрипт, как лучше это сделать?!
Если возникнут какие-нибудь вопросы, с удовольствием на них отвечу.
Заранее огромное всем спасибо за помощь.
 

fm4

Активный участник
Рейтинг
15
#2
Уважаемый C'mon,

Почитайте в интернете о формате obj. В самом простом случае вам понадобиться всего лишь добавить в начало каждой строки букву v и проставить запятые.
 

fm4

Активный участник
Рейтинг
15
#3
С запятыми это я по торопился. :)
Вот здесь есть примеры. http://en.wikipedia.org/wiki/Obj
 

C'mon

Пользователь сайта
Рейтинг
2
#4
Спасибо!
То есть если преобразовать файл *.asc в файл *.obj (добавить "v" в начало каждой строки) его можно будет автоматом грузить в Maya, я Вас правильно понял?
 

fm4

Активный участник
Рейтинг
15
#5
Я думаю да. Наверное надо добавить тэг "o" на отдельной строке для того чтобы у импортированного объекты было имя.
В результате получится объект без граней - такое облако точек.

Если не получится, попробуйте заменить тэг "v" на тэг "p".
 

fm4

Активный участник
Рейтинг
15
#6
А он у вас случайно не так выглядит? http://ozviz.wasp.uwa.edu.au/~pbourke/dataformats/asc/
 

C'mon

Пользователь сайта
Рейтинг
2
#7
Нет, у меня просто набор координат через пробел.
Такого вида:
1.2 0.3 1.4
0.1 1.6 0.5
2.3 3.7 -1.4
 

fm4

Активный участник
Рейтинг
15
#8
Интересно что это такое.
Ну хорошо, это координаты точек. А как они собираются описывать грани? Координаты не повторяются?
 

alex_alv

Активный участник
Рейтинг
11
#9
В этом скрипте в первой строчке замеите имя файла на нужное.

string $FileName="c:\\testv.txt";

int $Handle;
string $nextLine;
string $command;
$Handle=`fopen $FileName "r"`;
if($Handle==0)error("Can not open file.\n");
$command="polyCreateFacet";
while ( !`feof $Handle` )
{
$nextLine = `fgetline $Handle`;
if(size( $nextLine ) > 0 )
{
$command=$command+" -p "+$nextLine;
}
}
fclose($Handle);
eval($command);
 

alex_alv

Активный участник
Рейтинг
11
#10
Кстати, можно просто скопировать эти координаты в скрипт-едитор, и перед первой строчкой написать polyCreateFacet -p, а перед каждой следующей - просто -p.
В конце последней поставить ; и выполнить получившуюся команду (собственно, это и делается в приведенном выше скрипте).
 

Vladimir Frolov

Активный участник
Рейтинг
16
#11
Изначально надо определить откуда эти данные были выбиты???
Это сканер поработал или может быть это старые перфокарты ?
Вариантов очень много надо сузить круг.
???
Большинство форматов данных описаны в гостах или ещё гделиботак что надо рыть там откуда были взяты данные! а потом уже описывать скрипты или АПИ юзать
 

C'mon

Пользователь сайта
Рейтинг
2
#12
To Vladimir Frolov:
Данные эти получены с помощью 3D-сканера, но, к сожалению, рыть особо негде, потому что никакой документации по этому сканеру нет.
Скрипт, предложенный alex_alv думаю мне поможет на первом этапе. А дальше будет видно. alex_alv, спасибо Вам большое!
 

Vladimir Frolov

Активный участник
Рейтинг
16
#13
Что за аппарат ты используеш?
Вендор должен давать информацию по выходному потому. Так что зря ты так
 

alex_alv

Активный участник
Рейтинг
11
#14
Если это - 3D-сканер, то мой способ не подойдет, так как он создает полигон из одного фэйсика, у которого ребра поочередно обходят указанные в файле точки в порядке, в котором они идут в файле. Т. е., скрипт строит фигуру по заданным координатам, что и было изначальной задачей.

Очевидно, для того, чтобы импортить данные от 3D-сканера, требуется из облака точек построить 3D-модель, а не фигуру. Для посторения модели, требуется сложный алгоритм, который проанализирует заданное облако точек и придумает, сколько и каких фэйсиков нужно создать, и какие точки будут являться вешинами данной модели, и как они будут соединяться ребрами.
Это - уже гораздо более сложный алгоритм. Более того, данная задача не имеет однозначного и самого правильного решения. Решени может быть много. Соответственно, придуманный алгоритм не будет являться идеальным по определению.
Кроме того, алгоритм может быть еще усложнен тем, что он может построить низкополигональную модель и сделать bump карту (или карту дисплейсмента).

Задача довольно сложная. Для ее упрощения, ее нужно решать для конкретной модели. Т. е. нужно поставить задачу, что например, есть отсканированная конкретная голова. И писать алгоритм (который может быть реализован как на MEL, так и с помощью других средств) под конкретную эту голову. Это лучше, чем заниматься универсальным вариантом данного алгоритма. А еще лучше - попробовать поискать универсальное решение, которое сделано кем-то другим. Естественно, оно будет работать хуже, так как оно является универсальным, а под конкретную ситуацию можно создать более хороший вариант решения. Но скорее всего, этот универсальный вариант вполне удовлетворит Вас.
 

Vladimir Frolov

Активный участник
Рейтинг
16
#15
Очень много слов универсальный....
Просто приходилось работать с кодом от не одного типа сканера. Естественно решать задачу построения поверхности по облаку точек это не есть тривиальная задача и тем более формат точек оторый снимается с обьекта. Точки можно снимать рукой можно снимать полосой можно снимать лазером вобщем надо знать что за аппарат был а дальше уже смотреть по нему......
 

C'mon

Пользователь сайта
Рейтинг
2
#16
Владимир, а какая конкретно информация по сканеру нужна, чтобы понять, как правильно строить модель по облаку точек, полученному из этого сканера?
 

Vladimir Frolov

Активный участник
Рейтинг
16
#17
Нет можно обойтись и без этой инфрмации какого она рода просто всё будет зависить от скорости. Принятия решения.
Есть просто системы которые сторят поверхности 7 порядка по полученным данным и всё зависит от отдела который занимается этими делами. Просто если рядом нет математика серьёзного этот вопрост просто так не решить.
К примеру просто сними облако точек с обьекта который крутиться под равномерным углом на горизонтальной поверхности и облако точек которое построенно с руки которая снимает ряд точек после центрирования....
Я думаю есть разница
 

C'mon

Пользователь сайта
Рейтинг
2
#18
А не подскажите, где лучше поискать какие-нибудь алгоритмы для решения моей задачки?! А то у меня поиски пока особого результата не дают...
 

alex_alv

Активный участник
Рейтинг
11
#19
По-моему, на позопрошлом CG-event была демонстрация 3D-сканера. Там же раздавали диски от этой компании.
У них точно была программа, которая решала данную задачу. Возможно, она даже есть на этом диске.
Возможно, даже эти диски можно будет приобрести на следующем CG-event.
Будет время - посмотрю (у меня этот диск где-то валяется)...
 

C'mon

Пользователь сайта
Рейтинг
2
#20
Посмотрите, пожалуйста, если будет время.
Заранее благодарю!
 
Сверху