2 вопроса

  Вход на форум   логин       пароль   Забыли пароль? Регистрация
On-line:  

Раздел: 
Форум движка Xtreme3D / Xtreme3D: вопросы и ответы / 2 вопроса

Страницы: 1  новая тема

Автор Сообщение

частый гость
Группа: Участники
Сообщений: 21
Добавлено: 30-01-2011 23:01
1) Можно ли в DCE реализовать эффект тряпичной куклы? Если Да то как? Или лучше связать как нибудь DCE с оде?
2) Вопрос по тому же раутрас. Насчет жизней разобрался. Спасибо. Вопрос в другом. Вы там создаете маленькие кубики в месте попадания. А что если у меня есть текстура дырки и попытаться воспользоваться шейдером мультиматериала, то как по вашему это реализовать. Подкиньте что нибудь. Спасибо.

Ответственный за CHM
Группа: Модераторы
Сообщений: 346
Добавлено: 31-01-2011 00:34
1. Ты имеешь в виду Ragdoll? С DCE невозможно, а ODE слишком глюченный, что бы можно было реализовать его.
2. Зачем мультиматериал? Достаточно создавать кубики (а лучше плоскости) и накладывать текстуру с альфа каналом на них (ObjectSetMaterial).

частый гость
Группа: Участники
Сообщений: 21
Добавлено: 31-01-2011 07:15
Насчет второго. Ну допустим создаю я маленькую плоскость. Как мне ей объяснить на полу она появилась, или на стене. Или еще на каком нибудь предмете.
Я в том смысле что как сделать так чтобы плоскость знала как распологаться. Например на полу лицом вверх, на потолке вниз, на стене как то и тд.

Ответственный за CHM
Группа: Модераторы
Сообщений: 346
Добавлено: 01-02-2011 15:16
Не пробовал находить угол наклона нормали, то есть фактически не знаю как это делать, но есть пример Футуристические гонки там корабль принимает позицию относительно угла наклона трассы, думаю это поможет, надо бы и самому когда-нибудь разобраться...

Big Boss
Группа: Администраторы
Сообщений: 719
Добавлено: 01-02-2011 17:35
Этот пример к рэйкастингу никакого отношения не имеет, там угол корабля вычисляется другим способом.
Если надо найти нормаль поверхности попадания пули - только ObjectGetCollisionNormal. Но эта функция имеет ряд ограничений: хорошо работает только для примитивов и, к тому же, не учитывает поворот объекта (с этим теоретически можно справиться, но я не пробовал).

Big Boss
Группа: Администраторы
Сообщений: 719
Добавлено: 01-02-2011 17:39
Насчет ragdoll - на сайте есть ODE SDK с реализацией простого ragdoll.

частый гость
Группа: Участники
Сообщений: 21
Добавлено: 01-02-2011 17:47
Просмотрел пример. Там вроде функция нормалей нет и как я понял за поворот отвечает вот этот кусочек кода:
//Get control points height
cpf[sid]=ObjectGetGroundHeight(car_point_front[sid],track);
cpf1[sid]=ObjectGetGroundHeight(car_point_front1[sid],track);
cpf2[sid]=ObjectGetGroundHeight(car_point_front2[sid],track);
cpb[sid]=ObjectGetGroundHeight(car_point_back[sid],track);
ObjectSetPositionY(car_point_front[sid],cpf[sid]+0.5);
ObjectSetPositionY(car_point_front1[sid],cpf1[sid]+0.5);
ObjectSetPositionY(car_point_front2[sid],cpf2[sid]+0.5);
ObjectSetPositionY(car_point_back[sid],cpb[sid]+0.5);

//Align ship to control points
pitch[sid]=-arcsin( (cpf[sid]-cpb[sid])/10 )*30;
roll[sid]=arcsin( (cpf1[sid]-cpf2[sid])/6 )*90;
topitch[sid]=(pitch[sid]-ObjectGetPitch(ship_body[sid]))/40;
toroll[sid]=(roll[sid]-ObjectGetRoll(ship_body[sid]))/25;
ObjectRotate(ship_body[sid],topitch[sid],0,toroll[sid]);

Короче я не врубил в чем фишка этого кода Помогите кто может!!! Нужно чтобы плоскость знала как нужно становиться. На примере твоего примера. Допустим Уровень монолитный. Выстрел - отображение плоскости с декалькой - нахождение позиции - !ПОВОРОТ!
Так, мы знаем где появляется плоскость. Значит знаем ближайшую точку на объекте к этой плоскости. Почему бы не повернуть эту самую плоскость к этой точке задом, а к нам передом? ТУТ ОБРЫВАЕТСЯ ТО ЧТО Я ПИСАЛ ИБО МЕНЯ ОСИНИЛА МЫСЛЬ НАПИСАТЬ ТАК:
ObjectSetDirection(bullethit, ObjectGetCollisionNormal(0), ObjectGetCollisionNormal(1),ObjectGetCollisionNormal(2));
И ЗАРАБОТАЛО!!!!!!!!! ТОЛЬКО ЕСТЬ ОДНО НО!!!!
НО:
Я делаю тесты на карте из примера Hacker'a так вот. на полу и на двух стенах плоскость отображается корректно и правильно, на остальных 3-х не появляется совсем, т.е. появляется, только попой к нам и из-за этого мы ее не видим. Как же можно его исправить? Что думаешь Hac?

Big Boss
Группа: Администраторы
Сообщений: 719
Добавлено: 01-02-2011 21:04
на полу и на двух стенах плоскость отображается корректно и правильно, на остальных 3-х не появляется совсем


Как я уже сказал, ObjectGetCollisionNormal не учитывает поворот, поэтому с трансформированными объектами могут быть глюки.

частый гость
Группа: Участники
Сообщений: 21
Добавлено: 01-02-2011 21:42
Gecko, Помоги решить данную проблему, я тебе в аську стучал. Смотри, мы же знаем точку где должна появиться плоскость. Никак нельзя это использовать? А что если сделать 2 плоскостит??? Одна на другой практически, ну в смысле лицами наружу, попами внутрь.

частый гость
Группа: Участники
Сообщений: 21
Добавлено: 01-02-2011 22:00
Ура! Я это сделал! Смотрите как:
У меня был код такой:
bullethit=ObjectCopy(raycast_pos, global.scene);
ObjectShow(bullethit);
ObjectSetPosition(bullethit,
ObjectGetCollisionPosition(0)-ObjectGetPosition(result,0)+0.5,
ObjectGetCollisionPosition(1)-ObjectGetPosition(result,1)+0.5,
ObjectGetCollisionPosition(2)-ObjectGetPosition(result,2)+0.5);
ObjectSetDirection(bullethit, ObjectGetCollisionNormal(0), ObjectGetCollisionNormal(1),ObjectGetCollisionNormal(2));
Я вниз добавил еще вот это (ну то есть создал еще одну плоскость):
bullethit2=ObjectCopy(raycast_pos, global.scene);
ObjectShow(bullethit2);
ObjectSetPosition(bullethit2,
ObjectGetCollisionPosition(0)-ObjectGetPosition(result,0)-0.5,
ObjectGetCollisionPosition(1)-ObjectGetPosition(result,1)-0.5,
ObjectGetCollisionPosition(2)-ObjectGetPosition(result,2)-0.5);
ObjectSetDirection(bullethit2, ObjectGetCollisionNormal(0), ObjectGetCollisionNormal(1)-180,ObjectGetCollisionNormal(2));
И все заработало по часам!

частый гость
Группа: Участники
Сообщений: 21
Добавлено: 02-02-2011 09:43
Ибо эти вопросы мы решили у меня появился новый. Как использовать альфа канал. png формат вроде считывает без прозрачности. Так вот, есть 2 текстуры одна сама текстура, другая альфа канал первой, как использовать этот альфа канал в игре?

частый гость
Группа: Участники
Сообщений: 21
Добавлено: 02-02-2011 17:41
Еще про ODE. Вродь функция OdeAddTriMesh работае некорректно.

Big Boss
Группа: Администраторы
Сообщений: 719
Добавлено: 02-02-2011 21:14
Как использовать альфа канал. png формат вроде считывает без прозрачности. Так вот, есть 2 текстуры одна сама текстура, другая альфа канал первой, как использовать этот альфа канал в игре?

Все считывает нормально, при условии, что текстура со сторонами 2 в степени N (т.е., 128, 256, 512 и т.д.). Правда иногда надо выставлять MaterialSetTextureImageAlpha('MaterialName',tiaDefault). Загружать альфа-канал отдельно, насколько я знаю, нельзя.

Еще про ODE. Вродь функция OdeAddTriMesh работае некорректно.

Это известный баг. ODE в X3D собран почему-то без библиотеки OPCODE, которая отвечает за проверку столкновений между TriMesh'ами.

частый гость
Группа: Участники
Сообщений: 21
Добавлено: 02-02-2011 22:03
MaterialSetTextureImageAlpha('MaterialName',tiaDefault)

А вот теперь заработало.

частый гость
Группа: Участники
Сообщений: 21
Добавлено: 05-02-2011 09:49
Опять я! Значит я смотрел пример ODE тряпичной куклы. Как там создаються какие то кубы и тд. А если есть модель, со скелетом в формате smd то как сделать легче? Это получается каждую кость нужно сделать динамичной?

Big Boss
Группа: Администраторы
Сообщений: 719
Добавлено: 06-02-2011 10:04
Про это уже была тема.

Страницы: 1  новая тема
Раздел: 
Форум движка Xtreme3D / Xtreme3D: вопросы и ответы / 2 вопроса

Отвечать на темы могут только зарегистрированные пользователи

KXK.RU