![]() |
Модераторы: Rickert |
![]() ![]() ![]() |
|
hazard |
|
|||
Новичок Профиль Группа: Участник Сообщений: 9 Регистрация: 9.7.2008 Репутация: нет Всего: нет |
Написал простенькое приложение - управление трёхмерной моделью машинки на C# c использованием DirectX. Процесс отображения перемещения машины в пространстве работает замечательно - машина реально перемещается, но метод ComputeBoundingBox класса Geometry возвращает одни и те же координаты максимального и минимального вектора меша машинки - координаты первоначального помещения меша на карту. Что я делаю не так?
Метод отрисовки машинки: public Draw(Device device, float x, float y, float z, float rotAngle) { device.SetTransform(TransformType.World, Microsoft.DirectX.Matrix.RotationY(rotAngle) * Microsoft.DirectX.Matrix.Translation(x, y, z)); for (int i = 0; i < carMaterials.Length; i++) { device.Material = carMaterials[i]; device.SetTexture(0, carTextures[i]); carMesh.DrawSubset(i); } } Код определения ограничивающих векторов: VertexBuffer vb = carMesh.VertexBuffer; GraphicsStream stm = vb.Lock(0, 0, LockFlags.None); Geometry.ComputeBoundingBox(stm, carMesh.NumberVertices, carMesh.VertexFormat, out v1, out v2); vb.Unlock(); vb.Dispose(); v1 и v2 каждый раз одинаковые Это сообщение отредактировал(а) hazard - 29.10.2009, 22:17 |
|||
|
||||
mr.DUDA |
|
|||
![]() 3D-маньяк ![]() ![]() ![]() ![]() Профиль Группа: Экс. модератор Сообщений: 8244 Регистрация: 27.7.2003 Где: город-герой Минск Репутация: 7 Всего: 232 |
Дык Geometry.ComputeBoundingBox проходит по вертексам и возвращает min/max позиций из вертексов. Буфер не модифицируется, min и max остаются неизменными; машинка двигается мировой трансформацией (строка с TransformType.World в примере). Всё что нужно сделать чтобы бокс соответствовал ожидаемому, это применить ту же трансформацию к min и max векторам, умножив векторы на матрицу (Matrix.RotationY(rotAngle) * Matrix.Translation(x, y, z)). Geometry. ComputeBoundingBox достаточно вызвать 1 раз.
-------------------- ![]() |
|||
|
||||
hazard |
|
|||
Новичок Профиль Группа: Участник Сообщений: 9 Регистрация: 9.7.2008 Репутация: нет Всего: нет |
Я додумался создать свои 4 точки вокруг машины и двигать их матрицами, но буду пробовать Ваш способ. Спасибо!
![]() Это сообщение отредактировал(а) hazard - 1.11.2009, 21:02 |
|||
|
||||
hazard |
|
|||
Новичок Профиль Группа: Участник Сообщений: 9 Регистрация: 9.7.2008 Репутация: нет Всего: нет |
Если кому будет интересно - перемещение минимального и максимального вектора, ограничивающих меш:
Vector4[] newMinMaxArray = Vector3.Transform(arrayMinMax, Microsoft.DirectX.Matrix.RotationY(rotAngle) * Microsoft.DirectX.Matrix.Translation(x, y, z)); где, arrayMinMax - массив состоящий из минимального и максимального вектора, newMinMaxArray - массив изменённых векторов |
|||
|
||||
![]() ![]() ![]() |
Правила форума "Программирование игр, графики и искуственного интеллекта" | |
|
НА ЗЛОБУ ДНЯ: Дорогие посетители, прошу обратить внимание что новые темы касающиеся новых вопросов создаются кнопкой "Новая тема" а не "Ответить"! Любые оффтопиковые вопросы, заданные в текущих тематических темах будут удалены а их авторы, при рецедиве, забанены.
Если Вам понравилась атмосфера форума, заходите к нам чаще! С уважением, Rickert. |
1 Пользователей читают эту тему (1 Гостей и 0 Скрытых Пользователей) | |
0 Пользователей: | |
« Предыдущая тема | Программирование игр, графики и искусственного интеллекта | Следующая тема » |
|
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности Powered by Invision Power Board(R) 1.3 © 2003 IPS, Inc. |