CAST II Game Engine Community

Please login or register.

Login with username, password and session length
Advanced search  

Author Topic: HeightMapLandscape и столкновения  (Read 1064 times)

0 Members and 1 Guest are viewing this topic.

Luarvic

  • Newbie
  • *
  • Posts: 33
Re: HeightMapLandscape и столкновения
« Reply #7 on: January 21, 2010, 03:14:46 PM »

Ну раз надо, буду изучать
благодарю за ответы, все получилось
Logged

admin

  • Administrator
  • Full Member
  • *****
  • Posts: 192
    • CAST II Engine
Re: HeightMapLandscape и столкновения
« Reply #6 on: January 20, 2010, 02:51:13 AM »

Transform модели это действительно матрица 4х4, задающая преобразование из системы модели в мировую.
Помножив на данную матрицу точку(или вектор), координаты которой выражены в модельной системе, мы получим координаты этой точки в мировой системе.
Умножение производится функциями вида Transform<X>Vector<Y> из модуля base3d, где <X> и <Y> вырьируется, в зависимости от количества компонент в перемножаемых матрице и векторе.
В данном случае у нас матрица 4х4, вектор трех-компонентный, как и результат, значит перемножение выглядит так:
NewPoint := Transform4Vector33s(Model.Transform, Point)

Наверное, стоит добавить функции Model.ToWorld и Model.ToModel, но умение оперировать преобразованиями систем координат все равно требуется для создание 3D игр. К тому же это довольно просто.
Logged

Luarvic

  • Newbie
  • *
  • Posts: 33
Re: HeightMapLandscape и столкновения
« Reply #5 on: January 19, 2010, 01:38:42 PM »

"помножить на Transform модели"
 :'( непонятно :'(
Transform тип TMatrix4s
как и что множить ???
Logged

admin

  • Administrator
  • Full Member
  • *****
  • Posts: 192
    • CAST II Engine
Re: HeightMapLandscape и столкновения
« Reply #4 on: January 19, 2010, 09:00:16 AM »

GetBoundingBox() возвращает запись из двух точек P1 и P2. P1 - минимальные координаты по каждой оси. P2 - максимальные.
Т.к. ось Y направлена вверх, то берем Y из P1 и комбинируя с остальными координатами P1 и P2 получаем нижние точки бокса:
(P1.X, P1.Y, P1.Z), (P2.X, P1.Y, P1.Z), (P2.X, P1.Y, P2.Z), (P1.X, P1.Y, P2.Z)
Это в системе координат модели. Чтобы перевести в мировые, надо помножить на Transform модели.
Logged

Luarvic

  • Newbie
  • *
  • Posts: 33
Re: HeightMapLandscape и столкновения
« Reply #3 on: January 18, 2010, 03:18:24 PM »

Нее, слишком многа непоняток, GetHeight понял, а как точки получить не совсем понятно: BoundingBox нашел, там 2 вектора, я так понял 1 задает положение бокса относительно центра меша, второй размеры... Но опять же руки опускаются, слишком мало инфы, надо мануал развивать
Logged

admin

  • Administrator
  • Full Member
  • *****
  • Posts: 192
    • CAST II Engine
Re: HeightMapLandscape и столкновения
« Reply #2 on: January 16, 2010, 12:21:55 PM »

Карте высот объемы для коллизий не требуются. Она и так легко коллизится.
Конкретно у HeightMapLandscape есть свойство Map, представляющее карту высот, используемую ландшафтом. А у карты высот уже можно узнать высоту в конкретной точке:
Map.GetHeight(X, Z)
X,Z (Y направлена вверх) должны быть в системе координат ландшафта, которая впрочем, чаще всего совпадает с мировой системой. Т.е. можно просто взять координаты камеры и передать в эту функцию.
Таким образом, например, предотвращается проваливание камеры внутрь ландшафта в демке Land.
Для меша можно проверять 4 нижние точки ограничивающего бокса. Или создать объемы для большей точности.
Logged

Luarvic

  • Newbie
  • *
  • Posts: 33
HeightMapLandscape и столкновения
« Reply #1 on: January 16, 2010, 10:47:55 AM »

Собсно как лучше решить эту задачу: есть ландашфт и есть tmesh. Нужно чтоб меш передвигался по или над ланшафтом, не проваливаясь, не влезая в горы частями. Есть ли штатные средства для этого? Было бы здорово автоматически сгенерировать Volume-ы для ландашфта.
Вот подумал что можно для каждой точки на ландшафте налепить по volume-у, вот только за скорость работы не уверен, особенно если мешей будет много
« Last Edit: January 16, 2010, 11:37:54 AM by Luarvic »
Logged
 

+ Quick Reply

With Quick-Reply you can write a post when viewing a topic without loading a new page. You can still use bulletin board code and smileys as you would in a normal post.

Warning: this topic has not been posted in for at least 120 days.
Unless you're sure you want to reply, please consider starting a new topic.

Name: Email:
Verification:
Type the letters shown in the picture
Listen to the letters / Request another image
Type the letters shown in the picture:

Please enter the number 234 in the field: