Height Map в 3DImport
|
|
Сообщений: 1042
|
Опубликовано: 13.03.2009, 18:18:14
Делая карту Сфинкс, Я столкнулся с тем, что такую часть как ландшафт и островки нериально конвертнуть из 3DS в poxel чтобы она выглядела хорошо... Поэтому помучавшись немного я решил что проще сделать дополнение к импорту в виде HMAP т.е. апокселяция модели будет не слоевой, а высотной, в теории это просто сделать, только вот на практике надо ковыряться....
|
|
|
|
Сообщений: 1240
|
Опубликовано: 13.03.2009, 20:30:42
это надо как отдельную опцию(в окошке конвертации на выбор 2 режима-слоевой и высотный) а вообще height map тупо задаёт смещение высоты? то есть если на выстоной карте покселя горка, то если перевернуть поксель другой стороной, то там дырка?
________________________ __|____|____|____|____|__ |____|____|____|____|____| __|___бицца головой___|__ |____|____|сюда|____|____| __|____|____|____|____|__ |____|____|____|____|____|
|
|
|
|
Сообщений: 1042
|
Опубликовано: 14.03.2009, 03:30:51
Да я так и планирую, а что дырка это не страшно, зато можно будет делать плавные поверхности типа такани, волнообразной. горы, и т.п. Я даже думаю с помощью высотной карты можно лицо человеческое переносить, а то приходилось вырезать нос и брови с глазами, чтобы хоть что-то было понятно.... Еще проблема в том что надо как-то определить где же верх у объекта... а это задача непростая...
|
|
|
|
Сообщений: 1240
|
Опубликовано: 14.03.2009, 10:51:13
по координате z) просто предварительно или в своём редакторе его повернуть или в 3dmax'е
________________________ __|____|____|____|____|__ |____|____|____|____|____| __|___бицца головой___|__ |____|____|сюда|____|____| __|____|____|____|____|__ |____|____|____|____|____|
|
|
|
|
Сообщений: 1042
|
Опубликовано: 14.03.2009, 11:49:04
ну ты не забывай что в Worms координата высоты это Y , а не Z. Хм, тогда предлагаешь не проводить корреляцию углов? Просто взять максимумы и минимумы и создать поксель высот? Еще проблема с зернистостью, надо как-то масштаб устанавливать...
|
|
|
|
Сообщений: 818
|
Опубликовано: 14.03.2009, 14:00:55
вуху... нифигасики =))) ведь если это всё сделать то очень кул будет??? а как будут накладываться текстуры???
Всё что ни делается, делается в Китае(SW_Krash, 2009) Мир делиться на два типа людей: Бездарные трудоголики и Талантливые лентяи. (firsacho 2008) Я отрицаю вашу реальность и заменяю её своей!(Адам Севидж, 200x) OFFTOP SWEAT OFFTOP(фольклор)
|
|
|
|
Сообщений: 1042
|
Опубликовано: 14.03.2009, 19:41:26
Не знаю про какие ты там текстуры говоришь, лично я сделал вот что Работает вроде неплохо, только так и не знаю как =) Все переменные для формул поставлял вручную, потому что теория никак не хотела с относительностью дружить =)
|
|
|
|
Сообщений: 1240
|
Опубликовано: 14.03.2009, 21:14:30
я бы вообще сделал бы следующим образом: в окне импорта вращаешь модель так, чтобы определить верх и низ(или выбираешь дефолтное положение модели), ну и потом вводишь "зернистость", и потом просто сканируешь по всем x и z и вычисляешь среднее значение высоты в окрестности этой точки(ну с приорететом этой точки, то есть для точки (x,z) вычисляешь к примеру число yсреднее=(4*y(x,z)+3*y(x-1,z)+3*y(x+1,z)+3*y(x,z-1)+3*y(x,z+1)+2*y(x-1,z-1)+2*y(x+1,z-1)+2*y(x-1,z+1)+2*y(x+1,z+1))/(4+3+3+3+3+2+2+2+2) )
________________________ __|____|____|____|____|__ |____|____|____|____|____| __|___бицца головой___|__ |____|____|сюда|____|____| __|____|____|____|____|__ |____|____|____|____|____|
|
|
|
|
Сообщений: 1042
|
Опубликовано: 15.03.2009, 18:53:34
ничего не понимаю не люблю теорию и формулы, у меня и так все работает, зернистость поставил от функции Round беру размер фигуры, округляю, и домножаю на size чтобы было точно. В итоге от юзера ни надо вообще никаких данных получать, По x и z получается из размера объекта, по Y я поставил 2 его и хватает для островов. Code function GetSizeH(var ArrayPoints: AVer;var PoxSize:TPoxSize): Tvector; var Size:Tvector; j,i:integer; begin j:=Length(ArrayPoints)-1; Size.X:=0; Size.Y:=0; Size.Z:=0; for i:=0 to j do begin IfAMinBMax(Size.X,abs(ArrayPoints[i][0])); IfAMinBMax(Size.Y,abs(ArrayPoints[i][1])); IfAMinBMax(Size.Z,abs(ArrayPoints[i][2])); end; PoxSize.XSize:=round(Size.X); if PoxSize.XSize>25 then PoxSize.XSize:=25; Result.X:=Size.X*2/PoxSize.XSize;
Result.Y:=Size.Y*2/PoxSize.YSize; PoxSize.ZSize:=round(Size.Z); if PoxSize.ZSize>25 then PoxSize.ZSize:=25; Result.Z:=Size.Z*2/PoxSize.ZSize; end; Точку я вычесляю как пересечение прямой, т.е. высоты точкуи XnZn с треугольником через фунцию LineFace(p1, p2, pa, pb, pc, p) Которая дает истину если было пересечение прямой(p1,p2) с треугольником(pa, pb, pc) и возвращает в p координату пересечения. А предпросмотр, это слишком шикарная опция, я ее делать не буду! Задачу я выполнил, и это главное.
|
|
|
|
Сообщений: 1240
|
Опубликовано: 15.03.2009, 20:51:51
ну ладно) не любишь ты давать права юзерам) по-моему чем больше под контролем у юзера, тем лучше
________________________ __|____|____|____|____|__ |____|____|____|____|____| __|___бицца головой___|__ |____|____|сюда|____|____| __|____|____|____|____|__ |____|____|____|____|____|
|
|
|
|
Сообщений: 1042
|
Опубликовано: 24.03.2009, 19:18:12
Кстати кому нужна эта функция, то редактор с ней лежит тут http://worms3d-portal.com/download.php?id=497
|
|
|
|
Сообщений: 3812
|
Опубликовано: 24.03.2009, 20:57:42
я чет так и не понял, че за функция\
Смысл жизни в том, чтобы жизнь имела смысл... (firsacho 2005) Рай придуман, чтобы не страшно было умирать. Ад придуман, чтобы не страшно было жить. (firsacho 2007) Мир делиться на два типа людей: Бездарные трудоголики и Талантливые лентяи. (firsacho 2008)
mod.worms.pro - мод Worms Renewation для Worms4
|
|
|
|
Сообщений: 1042
|
Опубликовано: 28.03.2009, 18:54:10
У меня тут возникла идея, улучшить эту функцию. Т.е. сделать ее не одноуровневый, а многоуровневой. Короче идея такая. Шаг 1. Берется объект, к примеру каньен. Он делется сеткой на воксели, воксель который находится вне поверхности - принемает нулевую текстуру, в итоге получается высеченый остров, Шаг 2. Каждый не нулевой воксель корректируется высотной картой полученной из сканирование 3d модели в зависимости от позиции. В итоге мы получаем высокосхожий каньон но уже в виде покселя. Вот кое какие зарисовки Модель из 3DSMAX при помощи HeightMap 3DImport Модель с убранными вокселями, но без Hmap коррекции. ![](http://img14.imageshack.us/img14/1178/htestvoxels.png)
|
|
|
|
Сообщений: 1042
|
Опубликовано: 02.04.2009, 18:30:48
Герыч нужна твоя помощь... Я никак не могу найти лучший способ для проверки вхождения вокселя в 3D модель. Ковырял исходники проги poly2vox.c но никак не разобрался, как он это там делает... Вообще задача такая, имеется Куб, нужно проверить вхождения модели в этот куб, и в зависимости от этого поставить текстуру, нулевую или нет. У меня пока только идея проверки пересечения высот куба с треугольниками модели, но тогда слишком большая погрешность. Если проверять точки, на вхождение, будет еще большая погрешность... Алгоритм в poly2vox неплох, но я его не понимаю <_<
|
|
|
|
Сообщений: 1240
|
Опубликовано: 02.04.2009, 21:19:24
поподробней и попонятней опиши, что надо! Дано, получить, в какой форме дано, в какой форме получить)
________________________ __|____|____|____|____|__ |____|____|____|____|____| __|___бицца головой___|__ |____|____|сюда|____|____| __|____|____|____|____|__ |____|____|____|____|____|
|
|
|
|
Сообщений: 1042
|
Опубликовано: 02.04.2009, 21:36:10
Даю запрос =) Дано: Code Type TFace = array[0..3] of Word; Tver = array[0..2] of GLfloat;
PointsArr[i..MaxIndex] of TVect; Массив всех точек 3D модели FaceArr[i..MaxFace] of TFace; Массив всех треугольников Необходимо: используя эти данные написать функцию, которая будет проверять на вхождение в заданный куб типа: Code TBox = record Xmin, Ymin, Zmin: GLfloat; Xmax, Ymax, Zmax: GLfloat; Простым языком, нужно аппроксимировать 3d модель кубами. Вот наглядный пример, полученный из проги poly2vox ![](http://img144.imageshack.us/img144/2622/buffalopq1.png)
|
|
|
|
Сообщений: 1240
|
Опубликовано: 02.04.2009, 22:54:34
ты условие принадлежности треугольника кубу не можешь сделать? ил что?
________________________ __|____|____|____|____|__ |____|____|____|____|____| __|___бицца головой___|__ |____|____|сюда|____|____| __|____|____|____|____|__ |____|____|____|____|____|
|
|
|
|
Сообщений: 1042
|
Опубликовано: 02.04.2009, 23:35:50
Что тут непонятно? Нужно выстругать кубиками 3D модель!!! Надо организовать что-то в виде плотности заполнения, чтобы нижний ряд, показанный на рисунке, имел малые значения и не учитывался.
|
|
|
|
Сообщений: 1240
|
Опубликовано: 03.04.2009, 09:31:14
Единственные идеи, которые мне приходят - искать площадь общей части кубика и треугольника и по ней оценивать, при этом для треугольников, входящих внутрь целиком делать максимальный вклад)
________________________ __|____|____|____|____|__ |____|____|____|____|____| __|___бицца головой___|__ |____|____|сюда|____|____| __|____|____|____|____|__ |____|____|____|____|____|
|
|
|
|
Сообщений: 7
|
Опубликовано: 02.04.2010, 12:44:09
*флуд, удалено*
Сообщение отредактировал MarkWarT - ЧТ, 08.04.2010, 17:33:44
|
|
|
|