Автор | Сообщение |
van88268 бывалый Группа: Участники Сообщений: 36 |
Добавлено: 30-05-2018 11:53 |
как использовать OdeAddTriMesh для freeform или actor ? я так понял это надо указать меш тоесть его вытянуть из freeform но в xtreme3d нет таких функц |
|
Gecko Big Boss Группа: Администраторы Сообщений: 719 |
Добавлено: 30-05-2018 14:48 |
В OdeAddTriMesh передается индекс меша, это делается так: OdeStaticCreate(freeform); for (i = 0; i < FreeformMeshObjectsCount(freeform); i = i+1) OdeAddTriMesh(freeform, i); В SDK есть пример (physics.gmk). Для Actor такой возможности нет, потому что в ODE нет поддержки анимированных мешей. Я вообще не уверен, что она бывает в игровых физ. движках (если не считать soft body physics, но это уже другое). Максимум, что можно сделать для актеров - это ragdoll (тоже есть пример, ragdoll.gmk). |
|
van88268 бывалый Группа: Участники Сообщений: 36 |
Добавлено: 30-05-2018 15:49 |
OdeTerrainCreate с терейном есть пример или как юзать ? спс большое за ответы ) |
|
Gecko Big Boss Группа: Администраторы Сообщений: 719 |
Добавлено: 30-05-2018 16:08 |
Просто вызываешь OdeTerrainCreate(terrain). Это отдельный тип тел, так что OdeStaticCreate вызывать не надо. Примера нет, но могу добавить в следующей версии, если нужно. | |
van88268 бывалый Группа: Участники Сообщений: 36 |
Добавлено: 30-05-2018 16:16 |
hds = BmpHDSCreate('data/terrain/heightmap.bmp'); BmpHDSSetInfiniteWarp(hds, 0); terrain = TerrainCreate(global.scene); TerrainSetHeightData(terrain, hds); TerrainSetTileSize(terrain, 32); TerrainSetTilesPerTexture(terrain, 8); TerrainSetQualityDistance(terrain, 100); ObjectSetScale(terrain, 1, 1, 0.1); terrainY = 4; ObjectSetPosition(terrain, -128, terrainY, 128); ObjectRotate(terrain, 90, 0, 0); OdeTerrainCreate(terrain); написал такое и 0 емоции ( |
|
Gecko Big Boss Группа: Администраторы Сообщений: 719 |
Добавлено: 31-05-2018 11:38 |
Странно, у меня работает: Вот мой код создания terrain: hds = BmpHDSCreate('data/terrain/heightmap.bmp'); BmpHDSSetInfiniteWarp(hds, false); terrain=TerrainCreate(global.scene); TerrainSetHeightData(terrain, hds); TerrainSetTileSize(terrain, 32); TerrainSetTilesPerTexture(terrain, 8); TerrainSetQualityDistance(terrain, 100); TerrainSetQualitystylе(terrain, hrsFullGeometry); TerrainSetMaxCLodTriangles(terrain, 10000); TerrainSetCLodPrecision(terrain, 50); TerrainSetOcclusionFrameSkip(terrain, 0); TerrainSetOcclusionTesselate(terrain, totTesselateIfVisible); ObjectSetPosition(terrain, -50, 0, 50); ObjectSetScale(terrain, 1, 1, 0.05); ObjectRotate(terrain,90,0,0); MaterialCreate('mTerrain','data/terrain/autumn.jpg'); MaterialSetOptions('mTerrain', false, true); MaterialCreate('detmap','data/terrain/detmap.jpg'); MaterialSetTextureScale('detmap', 100, 100); MaterialSetSecondTexture('mTerrain','detmap'); ObjectSetMaterial(terrain,'mTerrain'); terrBody = OdeTerrainCreate(terrain); Могу пример выложить, если надо. Единственное, что заметил - ODE не работает с бесконечным ландшафтом (BmpHDSSetInfiniteWarp(hds, true)) - движок просто вылетает. |
|
van88268 бывалый Группа: Участники Сообщений: 36 |
Добавлено: 31-05-2018 15:23 |
1)спс за пример , думаю крафт будет по лучше и вот то что получилось : 2)напиши о минусах ode ))) 3)совместим ли raycast от xtreme3d с ode и другими физ движками ? |
|
Gecko Big Boss Группа: Администраторы Сообщений: 719 |
Добавлено: 31-05-2018 16:42 |
Минусы: - Меши не сталкиваются с плоскостями, цилиндрами, ландшафтом и другими мешами. Похоже, это ограничение движка проверки столкновений старой версии ODE, и сделать с этим ничего нельзя - разве что обновить ODE, но это непростая задача, придется многое перелопатить в GLScene. - По моим впечатлениям, сложно сделать нормальный контроллер персонажа. Обычно он делается при помощи прямого управления скоростью тела - я реализовал такое в примере physics.gmk из SDK, но результат неидеален. Например, игрок с трудом поднимается по лестнице и иногда немного застревает в стенах. Хотя, в принципе, для простых игр такого контроллера достаточно. |
|
Gecko Big Boss Группа: Администраторы Сообщений: 719 |
Добавлено: 31-05-2018 17:05 |
А рейкаст вообще с ODE никак не связан, он работает с объектами Xtreme3D. То есть, мы можем как угодно перемещать и поворачивать объекты, хоть физикой, хоть вручную - рейкаст использует трансформацию из Xtreme3D, и ему все равно, откуда она берется. | |
van88268 бывалый Группа: Участники Сообщений: 36 |
Добавлено: 31-05-2018 19:24 |
Для контроллера лучше использовать капсулу и задать ей трение скольжение и лучше посмотреть пример кода как сделано на unity3d либо других движках )) но вообще я согласен Ode себя странно ведет, надеюсь крафт все исправит |
|
Gecko Big Boss Группа: Администраторы Сообщений: 719 |
Добавлено: 31-05-2018 21:10 |
Ну да, можно капсулу или эллипсоид, главное - вручную задавать ей скорость. Обычно физ. движки на такое нормально реагируют, скольжение само собой происходит благодаря работе солвера. Например, я на своем движке dmech сделал практически идеальный контроллер, без застреваний и проваливаний, с нормальным движением по лестницам и наклонным поверхностям (для него даже движущиеся/вращающиеся платформы можно сделать при желании). В ODE почему-то та же логика срабатывает иначе. Посмотрим, как получится в Крафте. | |
Gecko Big Boss Группа: Администраторы Сообщений: 719 |
Добавлено: 01-06-2018 19:49 |
Попробовал написать контроллер персонажа на Kraft (в архиве скомпилированная демка на Python + исходник): http://gecko0307.siteme.org/xtreme3d/files/examples/x3d-dev-kraft-demo.7z Получилось гораздо лучше, чем с ODE. Удалось сделать прыжок и движение по наклонному полу, но не по лестницам. В dmech я использую для этого объект-сенсор под ногами персонажа, который сообщает о столкновениях, но не реагирует на них - так можно понять, касается ли игрок лестницы или наклонного пола, когда на рейкаст полагаться нельзя. Но в Kraft, к сожалению, таких сенсоров нет. Придется их как-то реализовать сторонними средствами, либо использовать вместо честных лестниц рампы. Впрочем, могут быть и другие способы. С сенсорами просто самый простой и эффективный. |
|
van88268 бывалый Группа: Участники Сообщений: 36 |
Добавлено: 02-06-2018 01:04 |
За тестил и да круто , с лестницами есть ещё варианты : Написать код для контроллера step off set как в unity3d , либо дополнительный Коллайдер использовать повернутый как на скринш.. |
|
Gecko Big Boss Группа: Администраторы Сообщений: 719 |
Добавлено: 02-06-2018 11:49 |
Придумал, как справиться с лестницами без сенсоров - просто делаю дополнительный рейкаст на шаг впереди в направлении движения и усредняю высоту пола в этой точке с высотой пола под персом. И дальше уже усредненная высота используется для сравнения с радиусом коллайдера + небольшого смещения. Мне кажется, в Unity step offset так же реализован. По крайней мере, получился похожий параметр смещения, который контролирует, насколько крутой склон персонаж может преодолеть. Обновил демку, ссылка та же. |
Offtop.ru © 2003 |