Intersect не правильно определяет координаты по поверхности.

Работа с 2D и 3D графикой, видео, звуком.

Модератор: Mikle

longwair
Продвинутый пользователь
Продвинутый пользователь
Аватара пользователя
 
Сообщения: 127
Зарегистрирован: 21.04.2010 (Ср) 12:37
Откуда: Крым.

Intersect не правильно определяет координаты по поверхности.

Сообщение longwair » 08.05.2018 (Вт) 11:42

Проблема такова. Есть поверхность, при помощи Intersect определяю координаты для 50 объектов. При первом вызове InitBoxPos при старте программы, всё рассчитывается нормально, и Box-ы расположены правильно по поверхности. Далее нахожу расположение одного из Box-ов по формуле нахождения точки в окружности. При нахождении вызываю повторно InitBoxPos, что бы "пересеять" найти новые координаты на поверхности для Box-ов. И вот тут и начинаются непонятки! Координаты находятся неправильно. Прилагаю проект, посмотрите где я ошибаюсь?
Все расчёты в модуле ModBox.
Управление wasd+мышь.
У вас нет доступа для просмотра вложений в этом сообщении.
Тут же #000000 по #ffffff написано
Уроки по 3DS Max для начинающих - http://3dlong.ucoz.ru/

Mikle
Изобретатель велосипедов
Изобретатель велосипедов
Аватара пользователя
 
Сообщения: 3827
Зарегистрирован: 25.03.2003 (Вт) 14:02
Откуда: Туапсе

Re: Intersect не правильно определяет координаты по поверхно

Сообщение Mikle » 08.05.2018 (Вт) 22:26

После 9 мая гляну, если не забуду. Пока сильно занят.

Sneaks
Обычный пользователь
Обычный пользователь
 
Сообщения: 52
Зарегистрирован: 29.07.2006 (Сб) 12:08

Re: Intersect не правильно определяет координаты по поверхно

Сообщение Sneaks » 16.05.2018 (Ср) 15:09

Извиняюсь за оффтоп, я так понял это на дх8, а как вы это запускаете? в нынешних реалях

Mikle
Изобретатель велосипедов
Изобретатель велосипедов
Аватара пользователя
 
Сообщения: 3827
Зарегистрирован: 25.03.2003 (Вт) 14:02
Откуда: Туапсе

Re: Intersect не правильно определяет координаты по поверхно

Сообщение Mikle » 16.05.2018 (Ср) 20:25

Надо же посмотреть тему...
Sneaks писал(а):Извиняюсь за оффтоп, я так понял это на дх8, а как вы это запускаете? в нынешних реалях

Берёшь dx8vb.dll и из-под админа регистрируешь в системе с помощью regsvr32.

longwair
Продвинутый пользователь
Продвинутый пользователь
Аватара пользователя
 
Сообщения: 127
Зарегистрирован: 21.04.2010 (Ср) 12:37
Откуда: Крым.

Re: Intersect не правильно определяет координаты по поверхно

Сообщение longwair » 18.05.2018 (Пт) 7:48

Mikle, не смотрел мой код? Где я косячу?
Тут же #000000 по #ffffff написано
Уроки по 3DS Max для начинающих - http://3dlong.ucoz.ru/

Mikle
Изобретатель велосипедов
Изобретатель велосипедов
Аватара пользователя
 
Сообщения: 3827
Зарегистрирован: 25.03.2003 (Вт) 14:02
Откуда: Туапсе

Re: Intersect не правильно определяет координаты по поверхно

Сообщение Mikle » 18.05.2018 (Пт) 8:20

Ты можешь объяснить, как должна по задумке себя вести твоя программа? У тебя кубики в какие-то моменты поднимаются вверх, это так задумано?

longwair
Продвинутый пользователь
Продвинутый пользователь
Аватара пользователя
 
Сообщения: 127
Зарегистрирован: 21.04.2010 (Ср) 12:37
Откуда: Крым.

Re: Intersect не правильно определяет координаты по поверхно

Сообщение longwair » 19.05.2018 (Сб) 1:15

Нет! Вот именно в этом и проблема. Кубики должны всегда при новом расчёте ложиться по поверхности. И косяк как мне кажется в InitBoxPos.

Код: Выделить всё
For n = 0 To 50
    BoxPos(n).x = Rnd * (200) - 100
    BoxPos(n).y = 0
    BoxPos(n).z = Rnd * (200) - 100
Сначала присваиваем рандомные координаты для позиций X,Z, для каждого кубика.

Код: Выделить всё
k = vec3(BoxPos(n).x, BoxPos(n).y, BoxPos(n).z): k1 = vec3(0, 1, 0)

  d3dDevice.GetTransform D3DTS_WORLD, M
  D3DXMatrixInverse M, 0, M
  D3DXVec3TransformCoord tk, k, M
  D3DXVec3TransformNormal tk1, k1, M

Тут пускаю луч что проверяет. От нулевой координаты каждого кубика и в +бесконечность. Хотя написал это и подумал а не лучше ли луч пускать наоборот над плоскостью и в минус. Попробовал, кубики вообще ложаться все в нулевую координату по Y. Может быть косяк тут!

Код: Выделить всё
    d3dx.Intersect Platform.Model, tk, tk1, kh, 0, 0, 0, kd, 0
    BoxPos(n).y = kd 'Записываем координаты для BoxPos.y
Next n

Ну и завершается всё проверкой плоскости и присвоения BoxPos(n).y значения kd-дистанции от 0 до пересечения с поверхностью.

И вот смотрю на это всё не первый день, меняю значения, пытаюсь хоть как то понять где косяк. И самый главный вопрос, Первый то раз всё строиться правильно, последующие расчёты косячные, как так то?
Тут же #000000 по #ffffff написано
Уроки по 3DS Max для начинающих - http://3dlong.ucoz.ru/

longwair
Продвинутый пользователь
Продвинутый пользователь
Аватара пользователя
 
Сообщения: 127
Зарегистрирован: 21.04.2010 (Ср) 12:37
Откуда: Крым.

Re: Intersect не правильно определяет координаты по поверхно

Сообщение longwair » 26.05.2018 (Сб) 8:08

Mikle, посмотри пожалуйста где я ошибаюсь. Одна надежда на тебя судя по всему.
Тут же #000000 по #ffffff написано
Уроки по 3DS Max для начинающих - http://3dlong.ucoz.ru/

Mikle
Изобретатель велосипедов
Изобретатель велосипедов
Аватара пользователя
 
Сообщения: 3827
Зарегистрирован: 25.03.2003 (Вт) 14:02
Откуда: Туапсе

Re: Intersect не правильно определяет координаты по поверхно

Сообщение Mikle » 27.05.2018 (Вс) 9:41

Куча лишнего, непонятно для чего вписанного, вот исправленный ModBox:
Код: Выделить всё
Option Explicit

Public BoxPos(200) As D3DVECTOR

Public Sub ResetBox()
  Dim Radius As Single
  Dim n As Long
  Dim f As Boolean

  Radius = 5

  For n = 0 To 50
    If (CamPos.x - BoxPos(n).x) ^ 2 + (CamPos.z - BoxPos(n).z) ^ 2 < Radius ^ 2 Then f = True
  Next n
  If f Then InitBoxPos
End Sub

Public Sub InitBoxPos()
  Dim n As Long
  Dim kd As Single
  Dim kh As Long
 
  Randomize Timer
  For n = 0 To 50
    BoxPos(n).x = Rnd * (200) - 100
    BoxPos(n).y = 0
    BoxPos(n).z = Rnd * (200) - 100
    d3dx.Intersect Platform.Model, BoxPos(n), vec3(0, 1, 0), kh, 0, 0, 0, kd, 0
    BoxPos(n).y = kd
  Next n
End Sub

longwair
Продвинутый пользователь
Продвинутый пользователь
Аватара пользователя
 
Сообщения: 127
Зарегистрирован: 21.04.2010 (Ср) 12:37
Откуда: Крым.

Re: Intersect не правильно определяет координаты по поверхно

Сообщение longwair » 28.05.2018 (Пн) 13:38

Mikle, спасибо огромное!Я идиот! Убейте меня, кто-нибудь! Когда то ты мне помог с Intersect, но там надо было что то определять по указателю мышки, вот по моему оттуда я с тех пор и "копипастю" код, особо не пытаясь понять как это работает. Но вот ты опять скинул код, и теперь для меня всё стало понятно. Иногда всё таки надо думать и читать хотя бы, пытаться разобраться. Перебрал весь свой код, по удалял всё ненужное, всё работает и это супер. Спасибо ещё раз, дай бог тебе здоровья и долгих лет жизни. Потому как вопросов у меня ещё будет много, и смотрю что кроме тебя и помочь то никто не может. Жили бы рядом проставился бы, поляну накрыл))))
Тут же #000000 по #ffffff написано
Уроки по 3DS Max для начинающих - http://3dlong.ucoz.ru/


Вернуться в Мультимедиа

Кто сейчас на конференции

Сейчас этот форум просматривают: нет зарегистрированных пользователей и гости: 1

    TopList