|
[ На главную ] -- [ Список участников ] -- [ Правила форума ] -- [ Зарегистрироваться ] |
On-line: |
Форум движка Xtreme3D / Xtreme3D: вопросы и ответы / 2 вопроса |
Страницы: 1 |
Автор | Сообщение | |
hard_ndm частый гость Группа: Участники Сообщений: 21 |
Добавлено: 30-01-2011 23:01 | |
1) Можно ли в DCE реализовать эффект тряпичной куклы? Если Да то как? Или лучше связать как нибудь DCE с оде? 2) Вопрос по тому же раутрас. Насчет жизней разобрался. Спасибо. Вопрос в другом. Вы там создаете маленькие кубики в месте попадания. А что если у меня есть текстура дырки и попытаться воспользоваться шейдером мультиматериала, то как по вашему это реализовать. Подкиньте что нибудь. Спасибо. |
||
Hacker Ответственный за CHM Группа: Модераторы Сообщений: 346 |
Добавлено: 31-01-2011 00:34 | |
1. Ты имеешь в виду Ragdoll? С DCE невозможно, а ODE слишком глюченный, что бы можно было реализовать его. 2. Зачем мультиматериал? Достаточно создавать кубики (а лучше плоскости) и накладывать текстуру с альфа каналом на них (ObjectSetMaterial). |
||
hard_ndm частый гость Группа: Участники Сообщений: 21 |
Добавлено: 31-01-2011 07:15 | |
Насчет второго. Ну допустим создаю я маленькую плоскость. Как мне ей объяснить на полу она появилась, или на стене. Или еще на каком нибудь предмете. Я в том смысле что как сделать так чтобы плоскость знала как распологаться. Например на полу лицом вверх, на потолке вниз, на стене как то и тд. |
||
Hacker Ответственный за CHM Группа: Модераторы Сообщений: 346 |
Добавлено: 01-02-2011 15:16 | |
Не пробовал находить угол наклона нормали, то есть фактически не знаю как это делать, но есть пример Футуристические гонки там корабль принимает позицию относительно угла наклона трассы, думаю это поможет, надо бы и самому когда-нибудь разобраться... | ||
Gecko Big Boss Группа: Администраторы Сообщений: 719 |
Добавлено: 01-02-2011 17:35 | |
Этот пример к рэйкастингу никакого отношения не имеет, там угол корабля вычисляется другим способом. Если надо найти нормаль поверхности попадания пули - только ObjectGetCollisionNormal. Но эта функция имеет ряд ограничений: хорошо работает только для примитивов и, к тому же, не учитывает поворот объекта (с этим теоретически можно справиться, но я не пробовал). |
||
Gecko Big Boss Группа: Администраторы Сообщений: 719 |
Добавлено: 01-02-2011 17:39 | |
Насчет ragdoll - на сайте есть ODE SDK с реализацией простого ragdoll. | ||
hard_ndm частый гость Группа: Участники Сообщений: 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? |
||
Gecko Big Boss Группа: Администраторы Сообщений: 719 |
Добавлено: 01-02-2011 21:04 | |
Как я уже сказал, ObjectGetCollisionNormal не учитывает поворот, поэтому с трансформированными объектами могут быть глюки. |
||
hard_ndm частый гость Группа: Участники Сообщений: 21 |
Добавлено: 01-02-2011 21:42 | |
Gecko, Помоги решить данную проблему, я тебе в аську стучал. Смотри, мы же знаем точку где должна появиться плоскость. Никак нельзя это использовать? А что если сделать 2 плоскостит??? Одна на другой практически, ну в смысле лицами наружу, попами внутрь. | ||
hard_ndm частый гость Группа: Участники Сообщений: 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)); И все заработало по часам! |
||
hard_ndm частый гость Группа: Участники Сообщений: 21 |
Добавлено: 02-02-2011 09:43 | |
Ибо эти вопросы мы решили у меня появился новый. Как использовать альфа канал. png формат вроде считывает без прозрачности. Так вот, есть 2 текстуры одна сама текстура, другая альфа канал первой, как использовать этот альфа канал в игре? | ||
hard_ndm частый гость Группа: Участники Сообщений: 21 |
Добавлено: 02-02-2011 17:41 | |
Еще про ODE. Вродь функция OdeAddTriMesh работае некорректно. | ||
Gecko Big Boss Группа: Администраторы Сообщений: 719 |
Добавлено: 02-02-2011 21:14 | |
Все считывает нормально, при условии, что текстура со сторонами 2 в степени N (т.е., 128, 256, 512 и т.д.). Правда иногда надо выставлять MaterialSetTextureImageAlpha('MaterialName',tiaDefault). Загружать альфа-канал отдельно, насколько я знаю, нельзя.
Это известный баг. ODE в X3D собран почему-то без библиотеки OPCODE, которая отвечает за проверку столкновений между TriMesh'ами. |
||
hard_ndm частый гость Группа: Участники Сообщений: 21 |
Добавлено: 02-02-2011 22:03 | |
А вот теперь заработало. |
||
hard_ndm частый гость Группа: Участники Сообщений: 21 |
Добавлено: 05-02-2011 09:49 | |
Опять я! Значит я смотрел пример ODE тряпичной куклы. Как там создаються какие то кубы и тд. А если есть модель, со скелетом в формате smd то как сделать легче? Это получается каждую кость нужно сделать динамичной? | ||
Gecko Big Boss Группа: Администраторы Сообщений: 719 |
Добавлено: 06-02-2011 10:04 | |
Про это уже была тема. |
Страницы: 1 |
Форум движка Xtreme3D / Xtreme3D: вопросы и ответы / 2 вопроса |