Модераторы: Rickert
  

Поиск:

Ответ в темуСоздание новой темы Создание опроса
> Использование ComputeBoundingBox. Проблемы, Не изменяются значения векторов 
V
    Опции темы
hazard
Дата 29.10.2009, 22:11 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 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
PM MAIL   Вверх
mr.DUDA
Дата 31.10.2009, 12:57 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


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 раз.


--------------------
user posted image
PM MAIL WWW   Вверх
hazard
Дата 1.11.2009, 20:44 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 9
Регистрация: 9.7.2008

Репутация: нет
Всего: нет



Я додумался создать свои 4 точки вокруг машины и двигать их матрицами, но буду пробовать Ваш способ. Спасибо! smile

Это сообщение отредактировал(а) hazard - 1.11.2009, 21:02
PM MAIL   Вверх
hazard
Дата 1.11.2009, 21:21 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 9
Регистрация: 9.7.2008

Репутация: нет
Всего: нет



Если кому будет интересно - перемещение минимального и максимального вектора, ограничивающих меш:

Vector4[] newMinMaxArray = Vector3.Transform(arrayMinMax, Microsoft.DirectX.Matrix.RotationY(rotAngle) * Microsoft.DirectX.Matrix.Translation(x, y, z));

где, arrayMinMax - массив состоящий из минимального и максимального вектора, newMinMaxArray - массив изменённых векторов
PM MAIL   Вверх
  
Ответ в темуСоздание новой темы Создание опроса
Правила форума "Программирование игр, графики и искуственного интеллекта"
Rickert

НА ЗЛОБУ ДНЯ: Дорогие посетители, прошу обратить внимание что новые темы касающиеся новых вопросов создаются кнопкой "Новая тема" а не "Ответить"! Любые оффтопиковые вопросы, заданные в текущих тематических темах будут удалены а их авторы, при рецедиве, забанены.

  • Литературу, связанную с программированием графики, обсуждаем здесь
  • Действия модераторов можно обсудить здесь
  • С просьбами о написании курсовой, реферата и т.п. обращаться сюда
  • Вопросы связанные с программированием графики и мультимедии на языках С++ и Delphi
  • Вопросы по реализации алгоритмов рассматриваются здесь

Если Вам понравилась атмосфера форума, заходите к нам чаще! С уважением, Rickert.

 
1 Пользователей читают эту тему (1 Гостей и 0 Скрытых Пользователей)
0 Пользователей:
« Предыдущая тема | Программирование игр, графики и искусственного интеллекта | Следующая тема »


 




[ Время генерации скрипта: 0.1015 ]   [ Использовано запросов: 20 ]   [ GZIP включён ]


Реклама на сайте     Информационное спонсорство

 
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности     Powered by Invision Power Board(R) 1.3 © 2003  IPS, Inc.