[ Обновленные темы · Новые сообщения · Участники · Поиск · RSS ]
  • Страница 1 из 2
  • 1
  • 2
  • »
Height Map в 3DImport
AlexBond
Админы
Сообщений: 1042
Реп: 106 / Инв: 8
Делая карту Сфинкс,

Я столкнулся с тем, что такую часть как ландшафт и островки нериально конвертнуть из 3DS в poxel чтобы она выглядела хорошо...

Поэтому помучавшись немного я решил что проще сделать дополнение к импорту в виде HMAP т.е. апокселяция модели будет не слоевой, а высотной, в теории это просто сделать, только вот на практике надо ковыряться....


 
Герыч
Админы
Сообщений: 1240
Реп: 60 / Инв: 5
это надо как отдельную опцию(в окошке конвертации на выбор 2 режима-слоевой и высотный)
а вообще height map тупо задаёт смещение высоты? то есть если на выстоной карте покселя горка, то если перевернуть поксель другой стороной, то там дырка?


________________________
__|____|____|____|____|__
|____|____|____|____|____|
__|___бицца головой___|__
|____|____|сюда|____|____|
__|____|____|____|____|__
|____|____|____|____|____|
 
AlexBond
Админы
Сообщений: 1042
Реп: 106 / Инв: 8
Да я так и планирую, а что дырка это не страшно, зато можно будет делать плавные поверхности типа такани, волнообразной. горы, и т.п.
Я даже думаю с помощью высотной карты можно лицо человеческое переносить, а то приходилось вырезать нос и брови с глазами, чтобы хоть что-то было понятно....

Еще проблема в том что надо как-то определить где же верх у объекта... а это задача непростая...


 
Герыч
Админы
Сообщений: 1240
Реп: 60 / Инв: 5
по координате z) просто предварительно или в своём редакторе его повернуть или в 3dmax'е

________________________
__|____|____|____|____|__
|____|____|____|____|____|
__|___бицца головой___|__
|____|____|сюда|____|____|
__|____|____|____|____|__
|____|____|____|____|____|
 
AlexBond
Админы
Сообщений: 1042
Реп: 106 / Инв: 8
ну ты не забывай что в Worms координата высоты это Y , а не Z.
Хм, тогда предлагаешь не проводить корреляцию углов? Просто взять максимумы и минимумы и создать поксель высот?

Еще проблема с зернистостью, надо как-то масштаб устанавливать...


 
SW_Krash
Проверенные
Сообщений: 818
Реп: 28 / Инв: 7
вуху... нифигасики =))) ведь если это всё сделать то очень кул будет??? а как будут накладываться текстуры???

Всё что ни делается, делается в Китае(SW_Krash, 2009)
Мир делиться на два типа людей: Бездарные трудоголики и Талантливые лентяи. (firsacho 2008)
Я отрицаю вашу реальность и заменяю её своей!(Адам Севидж, 200x)
OFFTOP SWEAT OFFTOP(фольклор)

 
AlexBond
Админы
Сообщений: 1042
Реп: 106 / Инв: 8
Не знаю про какие ты там текстуры говоришь, лично я сделал вот что

Работает вроде неплохо, только так и не знаю как =) Все переменные для формул поставлял вручную, потому что теория никак не хотела с относительностью дружить =)


 
Герыч
Админы
Сообщений: 1240
Реп: 60 / Инв: 5
я бы вообще сделал бы следующим образом:

в окне импорта вращаешь модель так, чтобы определить верх и низ(или выбираешь дефолтное положение модели), ну и потом вводишь "зернистость", и потом просто сканируешь по всем 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) )


________________________
__|____|____|____|____|__
|____|____|____|____|____|
__|___бицца головой___|__
|____|____|сюда|____|____|
__|____|____|____|____|__
|____|____|____|____|____|
 
AlexBond
Админы
Сообщений: 1042
Реп: 106 / Инв: 8
ничего не понимаю не люблю теорию и формулы, у меня и так все работает, зернистость поставил от функции 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
Реп: 60 / Инв: 5
ну ладно) не любишь ты давать права юзерам) по-моему чем больше под контролем у юзера, тем лучше

________________________
__|____|____|____|____|__
|____|____|____|____|____|
__|___бицца головой___|__
|____|____|сюда|____|____|
__|____|____|____|____|__
|____|____|____|____|____|
 
AlexBond
Админы
Сообщений: 1042
Реп: 106 / Инв: 8
Кстати кому нужна эта функция, то редактор с ней лежит тут http://worms3d-portal.com/download.php?id=497

 
firsacho
Админы
Сообщений: 3813
Реп: 84 / Инв: 15
я чет так и не понял, че за функция\



Смысл жизни в том, чтобы жизнь имела смысл... (firsacho 2005)
Рай придуман, чтобы не страшно было умирать. Ад придуман, чтобы не страшно было жить. (firsacho 2007)
Мир делиться на два типа людей: Бездарные трудоголики и Талантливые лентяи. (firsacho 2008)

mod.worms.pro - мод Worms Renewation для Worms4
 
AlexBond
Админы
Сообщений: 1042
Реп: 106 / Инв: 8
У меня тут возникла идея, улучшить эту функцию. Т.е. сделать ее не одноуровневый, а многоуровневой.
Короче идея такая.
Шаг 1. Берется объект, к примеру каньен. Он делется сеткой на воксели, воксель который находится вне поверхности - принемает нулевую текстуру, в итоге получается высеченый остров,
Шаг 2. Каждый не нулевой воксель корректируется высотной картой полученной из сканирование 3d модели в зависимости от позиции.

В итоге мы получаем высокосхожий каньон но уже в виде покселя.

Вот кое какие зарисовки
Модель из 3DSMAX при помощи HeightMap 3DImport

Модель с убранными вокселями, но без Hmap коррекции.


 
AlexBond
Админы
Сообщений: 1042
Реп: 106 / Инв: 8
Герыч нужна твоя помощь... Я никак не могу найти лучший способ для проверки вхождения вокселя в 3D модель.
Ковырял исходники проги poly2vox.c но никак не разобрался, как он это там делает...

Вообще задача такая, имеется Куб, нужно проверить вхождения модели в этот куб, и в зависимости от этого поставить текстуру, нулевую или нет.

У меня пока только идея проверки пересечения высот куба с треугольниками модели, но тогда слишком большая погрешность.

Если проверять точки, на вхождение, будет еще большая погрешность...

Алгоритм в poly2vox неплох, но я его не понимаю <_<

Прикрепления: poly2vox.c (90.5 Kb)


 
Герыч
Админы
Сообщений: 1240
Реп: 60 / Инв: 5
поподробней и попонятней опиши, что надо! Дано, получить, в какой форме дано, в какой форме получить)

________________________
__|____|____|____|____|__
|____|____|____|____|____|
__|___бицца головой___|__
|____|____|сюда|____|____|
__|____|____|____|____|__
|____|____|____|____|____|
 
AlexBond
Админы
Сообщений: 1042
Реп: 106 / Инв: 8
Даю запрос =)

Дано:

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


 
Герыч
Админы
Сообщений: 1240
Реп: 60 / Инв: 5
ты условие принадлежности треугольника кубу не можешь сделать? ил что?

________________________
__|____|____|____|____|__
|____|____|____|____|____|
__|___бицца головой___|__
|____|____|сюда|____|____|
__|____|____|____|____|__
|____|____|____|____|____|
 
AlexBond
Админы
Сообщений: 1042
Реп: 106 / Инв: 8
Что тут непонятно? Нужно выстругать кубиками 3D модель!!!

Надо организовать что-то в виде плотности заполнения, чтобы нижний ряд, показанный на рисунке, имел малые значения и не учитывался.

Прикрепления: 6865224.jpg (87.9 Kb)


 
Герыч
Админы
Сообщений: 1240
Реп: 60 / Инв: 5
Единственные идеи, которые мне приходят - искать площадь общей части кубика и треугольника и по ней оценивать, при этом для треугольников, входящих внутрь целиком делать максимальный вклад)

________________________
__|____|____|____|____|__
|____|____|____|____|____|
__|___бицца головой___|__
|____|____|сюда|____|____|
__|____|____|____|____|__
|____|____|____|____|____|
 
BOLK13
Заблокированные
Сообщений: 7
Реп: 0
*флуд, удалено*

Сообщение отредактировал MarkWarT - ЧТ, 08.04.2010, 17:33:44
 
  • Страница 1 из 2
  • 1
  • 2
  • »
Поиск: