forum.boolean.name

forum.boolean.name (http://forum.boolean.name/index.php)
-   3D-программирование (http://forum.boolean.name/forumdisplay.php?f=12)
-   -   Отсечение меша плоскостью (http://forum.boolean.name/showthread.php?t=8112)

rr333 03.04.2009 17:42

Отсечение меша плоскостью
 
Вот, сделал функцию, чтобы отсекать часть меша горизонтальной плоскостью. Но она работает не совсем правильно. Я копирую нужные треугольники, и преобразую те,что пересекают плоскость. И если загрузить rocket.3ds, то blitz пишет что вершины находятся не в радиусе камеры. Что я делаю не правильно?

HolyDel 03.04.2009 17:52

Ответ: Отсечение меша плоскостью
 
ты бы показал как ты делаешь. лучше чтобы был минимальный bb и медиа.

rr333 03.04.2009 18:45

Ответ: Отсечение меша плоскостью
 
Тут браузер у меня глючит. Вообщем качайте тут -
http://blitz.pp.ru/forum/showthread....&threadid=4432 .

HolyDel 03.04.2009 18:52

Ответ: Отсечение меша плоскостью
 
фигасе!
"Vertex Index Out of Range" это оказывается "вершины находятся не в радиусе камеры"
на самом деле это значит что ты обращаешься к несуществующим вершинам.

не
For ct=0 To CountTriangles(gs)
а
For ct=0 To CountTriangles(gs) -1

кстати, твоя функция работает весьма и весьма криво. я бы даже сказал что она совсем не работает. и еще, нафиг ты ее вызываешь в главном цикле?

я бы на твоем месте просто бы плющил верхушку.

rr333 03.04.2009 19:39

Ответ: Отсечение меша плоскостью
 
Да, я согласен, что сильно кривая функция,но я бы её оптимизировал. 'плющил верхушку'- в смысле fit mesh или двигать вершины mesha. Но если вверху модель широкая, и к низу сильно сужается. Тогда способ создания будет виден. И еще включи wireframe и жми кнопку вверх (это как бы двигать плоскость вверх и становится видно как строится mesh). И значит если поменять эту строку то все работает.
P.s. я в blitz работал мало и сделать такую функцию способ научится работать с геометрией и также смогу использовать это в игре.

tormoz 03.04.2009 19:44

Ответ: Отсечение меша плоскостью
 
в блитце индексы вертексов треугольников сурфейсов начинаются с единицы !!!

For ct=1 To CountTriangles(gs)

HolyDel 03.04.2009 20:07

Ответ: Отсечение меша плоскостью
 
tormoz, я вот тут подумал а есть ли разница?
например TriangleVertex принимает параметр в 0..(ct-1).

т.е в твоем случае прийдеся писать так:
for ct = 1 to counttriangles(gs)
TriangleVertex(gs,ct-1,....

а в моем
for ct = 0 to counttriangles(gs)-1
TriangleVertex(gs,ct,....

короче тот же код, только в профиль.

tormoz 04.04.2009 00:44

Ответ: Отсечение меша плоскостью
 
да нет в принципе разницы
кроме того, что треугольника с индексом 0 не существует :)

rr333 04.04.2009 16:11

Ответ: Отсечение меша плоскостью
 
Обновил функцию, и теперь она работает, но не правильно. Не правильно строятся треугольники, пересеченые с плоскостью. И если сделать активными 2 строчки создания треугольника elseif c=2, то появляются треугольники идущие в бесконечность (прикольно, но мне нужно другое). Попробуйте в mesh загружать 3 модели в архиве или создать вместо него конус, куб, сферу, и посмотрите как стоятся треугольники. Управление смотрите в коде. Качать во 2 посте.
http://blitz.pp.ru/forum/showthread....7663#post57663

rr333 04.04.2009 17:27

Ответ: Отсечение меша плоскостью
 
Вот, смотрел телек и догнал, что не так. Надо все переменные kv у меня не целыми сделать, ну т.е. перед kv решетку поставить надо. Тогда треугольники ложатся правильно. Но остальные проблемы остались.

Артем Валерьевич 04.04.2009 23:05

Ответ: Отсечение меша плоскостью
 
Помню, был такой пример на офф сайте блица

rr333 05.04.2009 13:00

Ответ: Отсечение меша плоскостью
 
Всё! Исправил все ошибки. Теперь качайте там же, в последнем посте.

Артем Валерьевич 05.04.2009 18:02

Ответ: Отсечение меша плоскостью
 
хороша фича, для появления персов можно применить,

tormoz 05.04.2009 18:52

Ответ: Отсечение меша плоскостью
 
или резать перцов на куски ! (кровожадно)
расчлененка рулит
пошел писать концепт для аркады "Пила"
домохозяйки оценят

rr333 05.04.2009 20:36

Ответ: Отсечение меша плоскостью
 
Как ты догадался? Именно для этого я и делал это! :) Но функция не закончена. Надо еще сделать плоскость, прикрывающую внутреннюю часть меша. И если разделяющая плоскость разделит меш
не на 2, а на 3 части. Надо, чтобы каждый был отдельным объектом.

tormoz 05.04.2009 22:06

Ответ: Отсечение меша плоскостью
 
не надо плоскость
засунь туда эммитер с кровищей и все дела :)))

rr333 06.04.2009 06:33

Ответ: Отсечение меша плоскостью
 
Вот у меня возник вопрос: как получить индекс треугольника, который только что создал? Или треугольники идут в том порядке, в котором я их создал?

H@NON 06.04.2009 14:07

Ответ: Отсечение меша плоскостью
 
tri = AddTriangle (surf,v0,v2,v1)
tri - возвращает индекс

Артем Валерьевич 07.04.2009 21:01

Ответ: Отсечение меша плоскостью
 
http://nirvana.sk/storm/herni_denik/...f_darkness.jpg
Я опять про расчлененку, Блейд оф даркнесс например

rr333 08.04.2009 05:55

Ответ: Отсечение меша плоскостью
 
А разве там можно рубить в любом месте? Обычно получается только голову, руку, ногу.

rr333 09.04.2009 19:43

Ответ: Отсечение меша плоскостью
 
Кстати, чтобы накрыть объект плоскостью надо скопировать newmesh в функции , перевернуть треугольники и назначить цвет (это сделать надо до текстурирования). Есть еще один способ, но он подойдет только для выпуклых моделей. И я забыл обновить нормали перед renderworld. А как определить на сколько частей поделило? Может как-то можно это сделать прямо в physX?

rr333 11.04.2009 12:13

Ответ: Отсечение меша плоскостью
 
Помогите реализовать код!!!
Хочу, сделать чтобы при отсечении меша на более чем 2 части, они все становились отдельными мешами. До цикла создаю двухмерный массив, где хранятся все связи треугольников(поэтому долго идет черный экран при высокополигональной модели - mesh2.3ds), и создаю двухмерный массив grup, в котором будут группы треугольников разных частей и обычный массив для обработки. Потом в функции заполняю список треугольников нового меша( есть индекс- треугольник существует, 0-треугольника нет).
Итак, я хочу сделать вот что:
Если есть треугольник, то создаем новую группу в массив grup, добавляю его в группу. Потом
все треугольники, с которыми связан данный треугольник добавляю в массив для обработки. Дальше выполняю то же самое для каждого треугольника, из массива добавляя в ту же группу. Естесственно надо проверять существует ли треугольник, и удалять обработанные данные из обрабатываемого массива. Когда в обрабатываемом массиве не будет ничего, создаем новую группу и обрабатываем необработанные треугольники. И так далее, пока не кончатся треугольники.
З.Ы. Надеюсь я все правильно и понятно объяснил. И качать там же в конце.
http://blitz.pp.ru/forum/showthread....&threadid=4432


Часовой пояс GMT +4, время: 04:38.

vBulletin® Version 3.6.5.
Copyright ©2000 - 2025, Jelsoft Enterprises Ltd.
Перевод: zCarot