Нет! Вот именно в этом и проблема. Кубики должны всегда при новом расчёте ложиться по поверхности. И косяк как мне кажется в 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 до пересечения с поверхностью.
И вот смотрю на это всё не первый день, меняю значения, пытаюсь хоть как то понять где косяк. И самый главный вопрос, Первый то раз всё строиться правильно, последующие расчёты косячные, как так то?