XNA 4.0. Динамическое изменение размеров модели * .fbx

Это будет долгим:

Я борюсь с изменением размеров модели * .fbx в XNA 4.0. Предположим, я создал простой примитивный куб. Он имеет ограничивающую рамку, координаты которой легко извлечь. Вот несколько примеров размеров, которые видны на картинке:

BoudningBox

У меня есть еще одна модель в формате * .fbx. Вот еще одно изображение образца модели:

какая-то модель

Изображение их обоих для лучшего масштаба (я изменил цвета для лучшей видимости):

введите описание изображения здесь

Чего я хочу добиться, так это поместить этот крестик внутри blue bindingBox, чтобы он выглядел так:

введите описание изображения здесь

Обратите внимание, я не вращал крестик! Я изменил его размеры по каждой из трех осей (разумеется, масштаб изменения по каждой оси был разным).

Как видите, мне нужно было изменить размер «креста», чтобы он мог поместиться в коробке для переплета. У меня вопрос: могу ли я свободно работать с размерами модели * .fbx в XNA? Я провел небольшое исследование в Интернете и не нашел никаких подсказок, как изменить внешний вид модели fbx после ее загрузки или, по крайней мере, если это возможно.

ИЗМЕНИТЬ

Я заметил, что могу изменять масштаб моделей в xna, как в этом примере: введите описание изображения здесь

и чем просто перетащить одну из этих осей (в данном конкретном случае красную, которая обозначает ось x), я могу изменить масштаб модели по одной оси.

введите описание изображения здесь

Теперь, когда я знаю, что хочу обновить свой вопрос: могу ли я получить контроль над своим менеджером контента в коде?


person bartosz.baczek    schedule 10.07.2015    source источник


Ответы (1)


Ответ может быть проще, чем попасть внутрь контент-менеджера. Первый способ, которым я бы попытался добиться этого, - это начать с кросс-модели, вершины которой запечены, чтобы сделать ее шириной 1 единицу, высотой 1 единиц и глубиной 1 единицы. Затем к нему может быть применена матрица масштабирования в коде, который масштабировал бы его до того, сколько единиц находится в поле для каждой оси.

Чтобы сделать ваш оригинальный крест на вашем рисунке 2 по моей идее, вы должны применить матрицу масштабирования, подобную этой.

Matrix crossWorld = Matrix.CreateScale(6f, 4f, 9f); //now your 1x1x1 cross will render as a 6x4x9 cross (your figure 2) if you apply this to your `Effect.World` matrix

//then, to fit it into your box:
crossWorld = Matrix.CreateScale(10f, 8f, 6f);//now your 1x1x1 cross will render as a 10x8x6 cross and fit perfectly into your box (your figure 1)
person Steve H    schedule 15.07.2015