[ Новые сообщения · Участники · Правила форума · Поиск · RSS ]
Страница 1 из 212»
Форум Panda3D - по русски » Panda3D » Общие вопросы » Размеры в Panda3d
Размеры в 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
Группа: Администраторы
Сообщений: 1554
Награды: 5
Репутация: 46
Статус: Offline
В данном случае единица - это системная единица, принятая в OpenGL (в DX она такая же )). Конкретной привязки к каким-либо единицам измерения нету. Это ты сам будешь определять исходя из контекста игры - т.е. если ты делаешь какой-нить симсити, то можно к единице привязать метр или десять метров, для космической стратегии, это вероятно уже пойдут километры и больше, а для игры про блох можно отталкиваться от миллиметра )) Чаще всего берут соответствие 1 метр, хотя далеко не все утруждают себя соблюдением пропорций - обрати внимание, в "hello world" примере с пандой, для того чтобы она нормально вписывалась в окружение модель сильно масштабируют. Поэтому я всегда рекомендую делать скелет игры на единичных пустышках - потом на них можно навесить любую модель в любом требуемом масштабе, не дёргая при этом уже отлаженные соотношения для перемещений, скоростей и т.п.
Единицы лучше выбирать так чтобы основные операции были с числами 1-100, т.к. при очень маленьких или очень больших значениях могут возникнуть проблемы связанные с точностью и скоростью вычислений или разрядностью чисел, впрочем запас у тебя приличный, но стоит это иметь ввиду.
 
BrainДата: Суббота, 30.10.2010, 00:42 | Сообщение # 3
Рядовой
Группа: Пользователи
Сообщений: 10
Награды: 0
Репутация: 0
Статус: Offline
Спасибо, понятно.
И еще. Правильно ли я понял принцип размещения объектов?
На картинке - оба (0,0,0).
Прикрепления: 7016156.png(8Kb)
 
ninthДата: Суббота, 30.10.2010, 01:42 | Сообщение # 4
Admin
Группа: Администраторы
Сообщений: 1554
Награды: 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'а и Майки не знаю.

Прикрепления: 0148675.png(27Kb)
 
ninthДата: Суббота, 30.10.2010, 20:12 | Сообщение # 7
Admin
Группа: Администраторы
Сообщений: 1554
Награды: 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
Группа: Администраторы
Сообщений: 1554
Награды: 5
Репутация: 46
Статус: Offline
можешь образец такой модели кинуть? Кубик какой-нить?
 
BrainДата: Суббота, 30.10.2010, 21:13 | Сообщение # 10
Рядовой
Группа: Пользователи
Сообщений: 10
Награды: 0
Репутация: 0
Статус: Offline
ninth, да, конечно.
Вот.
Прикрепления: t1.egg(3Kb) · t2.egg(43Kb) · t3.egg(43Kb)
 
ninthДата: Суббота, 30.10.2010, 22:07 | Сообщение # 11
Admin
Группа: Администраторы
Сообщений: 1554
Награды: 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
Группа: Администраторы
Сообщений: 1554
Награды: 5
Репутация: 46
Статус: Offline
Что-то вроде того. Если тебе нужны отдельные модели, то лучше их делать отдельными файлами соответственно ) Впрочем, можно и в рантайме переопределить центр модели, если приспичит.
 
deemaaДата: Среда, 06.06.2012, 14:36 | Сообщение # 14
Сержант
Группа: Пользователи
Сообщений: 27
Награды: 0
Репутация: 0
Статус: Offline
подниму тему
как переопределить центр модели?
и еще вопрос, есть ли такая возможность вывести в игре сетку разлинеенную (как 3д-редакторах), или если нет как проще всего самому такую сделать
 
ninthДата: Среда, 06.06.2012, 20:12 | Сообщение # 15
Admin
Группа: Администраторы
Сообщений: 1554
Награды: 5
Репутация: 46
Статус: Offline
1. Прямого метода для переопределения центра я не видел. Я использовал следующий хак: размещал модель так чтобы будущий центр модели совпадал с нулевой точкой сцены (render) и применял к ней flattenLight(). Следует учесть, что поворот модели тоже сбрасывается.

2. Проще всего создать плоскость и наложить на неё разлинеенную текстурку. Ещё можно создать сетку из LineNodePath, но она будет жрать больше ресурсов.
 
Форум Panda3D - по русски » Panda3D » Общие вопросы » Размеры в Panda3d
Страница 1 из 212»
Поиск: