Размеры в Panda3d
|
|
Brain | Дата: Среда, 27.10.2010, 16:57 | Сообщение # 1 |
Рядовой
Группа: Пользователи
Сообщений: 10
Награды: 0
Репутация: 0
Статус: Offline
| День добрый. Сейчас на очень ранней стадии знакомства с Пандой, и у меня возник вопрос. Не помню где читал, что созданные модели в Blender'е совпадают размерами с Пандовскими. Опытным путем, если можно так сказать, узнал, что в 3ds Max Grid Space, выставленный как 1,0 будет соответствовать размерам сетки Blendera по дефолту тоже. Возможно ошибся. Стандартная модель панды с раскинутыми руками из примеров занимает 7x16x12. Если считать, что ее рост 150 см, можно прикинуть, что на одну единицу длины будет приходиться 12,5 см. К чему я это. Если создавать модель человека, а также реальные объекты, какие размеры брать и насколько это принципиально? Если где-то уже было, прошу прощения и ткнуть меня носом =) Спасибо.
|
|
| |
ninth | Дата: Четверг, 28.10.2010, 11:02 | Сообщение # 2 |
Admin
Группа: Администраторы
Сообщений: 1582
Награды: 5
Репутация: 46
Статус: Offline
| В данном случае единица - это системная единица, принятая в OpenGL (в DX она такая же )). Конкретной привязки к каким-либо единицам измерения нету. Это ты сам будешь определять исходя из контекста игры - т.е. если ты делаешь какой-нить симсити, то можно к единице привязать метр или десять метров, для космической стратегии, это вероятно уже пойдут километры и больше, а для игры про блох можно отталкиваться от миллиметра )) Чаще всего берут соответствие 1 метр, хотя далеко не все утруждают себя соблюдением пропорций - обрати внимание, в "hello world" примере с пандой, для того чтобы она нормально вписывалась в окружение модель сильно масштабируют. Поэтому я всегда рекомендую делать скелет игры на единичных пустышках - потом на них можно навесить любую модель в любом требуемом масштабе, не дёргая при этом уже отлаженные соотношения для перемещений, скоростей и т.п. Единицы лучше выбирать так чтобы основные операции были с числами 1-100, т.к. при очень маленьких или очень больших значениях могут возникнуть проблемы связанные с точностью и скоростью вычислений или разрядностью чисел, впрочем запас у тебя приличный, но стоит это иметь ввиду.
|
|
| |
Brain | Дата: Суббота, 30.10.2010, 00:42 | Сообщение # 3 |
Рядовой
Группа: Пользователи
Сообщений: 10
Награды: 0
Репутация: 0
Статус: Offline
| Спасибо, понятно. И еще. Правильно ли я понял принцип размещения объектов? На картинке - оба (0,0,0).
|
|
| |
ninth | Дата: Суббота, 30.10.2010, 01:42 | Сообщение # 4 |
Admin
Группа: Администраторы
Сообщений: 1582
Награды: 5
Репутация: 46
Статус: Offline
| Ммм. Не совсем понял вопрос. Если вы имеете виду, что они расположены несимметрично относительно 0, то да - вполне может быть, т.к. каждый меш имеет свой центр относительно которого размещаются его вершины и в 0 помещается именно этот центр, а не геометрический. На приведённом скрине (если считать. что объекты находятся в 0) у "столба", все вершины имеют координату Z >=0, поэтому выглядит так, будто он опирается основанием. 0 объекта может вообще быть вынесен за пределы видимой сетки. Точно так же дочерние (child) объекты будут располагаться относительно этого 0 родительского объекта, а не его геометрического центра. Другими словами, каждый объект имеет собственную систему координат, чей ноль и является центром объекта. Все трансформации осуществляются относительно этого центра.
|
|
| |
BlackCat | Дата: Суббота, 30.10.2010, 13:48 | Сообщение # 5 |
Подполковник
Группа: Проверенные
Сообщений: 144
Награды: 0
Репутация: 1
Статус: Offline
| На картинке очевидно, что отсчёт идёт из одной точки для обоих объектов. И пивот у них у обоих находится в центре нижней поверхности. Нужно им просто пивот переставить в геометрический центр и всех делов. Только советую это делать в самом конце, уже после окончательного создания иодели.
http://alphahole.do.am - версия 0.015 вышла 22.02.10
|
|
| |
Brain | Дата: Суббота, 30.10.2010, 17:42 | Сообщение # 6 |
Рядовой
Группа: Пользователи
Сообщений: 10
Награды: 0
Репутация: 0
Статус: Offline
| BlackCat, специально для эксперимента в 3ds Max поставил Pivot'ы в разные места у обоих моделей. Все, кажется, разобрался. За точку опоры модели, сделанной в 3ds Max он берет начало Максовской Grid. Насчет Blender'а и Майки не знаю.
|
|
| |
ninth | Дата: Суббота, 30.10.2010, 20:12 | Сообщение # 7 |
Admin
Группа: Администраторы
Сообщений: 1582
Награды: 5
Репутация: 46
Статус: Offline
| И всё же, я не совсем понял в чём собсно вопрос?
|
|
| |
Brain | Дата: Суббота, 30.10.2010, 20:24 | Сообщение # 8 |
Рядовой
Группа: Пользователи
Сообщений: 10
Награды: 0
Репутация: 0
Статус: Offline
| Вопрос был, кхм, про точку опоры и позиционирование моделей. Т.е., размещая модель в 0,0,0 t1= loader.loadModel("models/mymodels/asdsa") t1.reparentTo(render) t1.setPos(0,0,0) мы получаем ее сдвинутой влево/вправо/вверх/вниз. Почему? upd: То, что дочерний элемент размещается относительно родителя - понятно.
Сообщение отредактировал Brain - Суббота, 30.10.2010, 20:27 |
|
| |
ninth | Дата: Суббота, 30.10.2010, 20:54 | Сообщение # 9 |
Admin
Группа: Администраторы
Сообщений: 1582
Награды: 5
Репутация: 46
Статус: Offline
| можешь образец такой модели кинуть? Кубик какой-нить?
|
|
| |
Brain | Дата: Суббота, 30.10.2010, 21:13 | Сообщение # 10 |
Рядовой
Группа: Пользователи
Сообщений: 10
Награды: 0
Репутация: 0
Статус: Offline
| ninth, да, конечно. Вот.
|
|
| |
ninth | Дата: Суббота, 30.10.2010, 22:07 | Сообщение # 11 |
Admin
Группа: Администраторы
Сообщений: 1582
Награды: 5
Репутация: 46
Статус: Offline
| Ну да - координаты вершин в первом файле, например по х 110-130, по z 0-60. Видимо, экспортёр пишет вершины относительно начала координат, а не относительно пивота. В принципе, это ожидаемое поведение, т.к. я, например, хотел бы видеть экспортированную модель в том положении, в котором она у меня была в сцене.
|
|
| |
Brain | Дата: Суббота, 30.10.2010, 22:17 | Сообщение # 12 |
Рядовой
Группа: Пользователи
Сообщений: 10
Награды: 0
Репутация: 0
Статус: Offline
| А целесообразно это применять в таком случае? Делается, например, квартал города в трехмерном редакторе. В .egg файлы экспортируется не все сразу, а по кускам (к примеру, дома отдельно, знаки и прочий стафф - отдельно), а потом все аттачится относительно render'а в 0,0,0. Хотя, видимо, для этого и сделано.
|
|
| |
ninth | Дата: Суббота, 30.10.2010, 23:49 | Сообщение # 13 |
Admin
Группа: Администраторы
Сообщений: 1582
Награды: 5
Репутация: 46
Статус: Offline
| Что-то вроде того. Если тебе нужны отдельные модели, то лучше их делать отдельными файлами соответственно ) Впрочем, можно и в рантайме переопределить центр модели, если приспичит.
|
|
| |
deemaa | Дата: Среда, 06.06.2012, 14:36 | Сообщение # 14 |
Сержант
Группа: Пользователи
Сообщений: 27
Награды: 0
Репутация: 0
Статус: Offline
| подниму тему как переопределить центр модели? и еще вопрос, есть ли такая возможность вывести в игре сетку разлинеенную (как 3д-редакторах), или если нет как проще всего самому такую сделать
|
|
| |
ninth | Дата: Среда, 06.06.2012, 20:12 | Сообщение # 15 |
Admin
Группа: Администраторы
Сообщений: 1582
Награды: 5
Репутация: 46
Статус: Offline
| 1. Прямого метода для переопределения центра я не видел. Я использовал следующий хак: размещал модель так чтобы будущий центр модели совпадал с нулевой точкой сцены (render) и применял к ней flattenLight(). Следует учесть, что поворот модели тоже сбрасывается.
2. Проще всего создать плоскость и наложить на неё разлинеенную текстурку. Ещё можно создать сетку из LineNodePath, но она будет жрать больше ресурсов.
|
|
| |