Войти
ПрограммированиеФорумФизика

PhysX CharacterController

#0
15:52, 11 мар. 2007

Народ поделитесь маленьким примером (типа SampleCharacterController ), но чтобы упраление было и вперед назад и т.п.  а то ни как не могу разобраться (


#1
17:52, 11 мар. 2007

да с этим в физикс немного мутновато, все вроде хорошо а вот с управлением персом приходится серьезно мучаться. Лично я вроде с движением разобрался сразу, а с гравитацией до сих пор мучаюсь. подскажите плиз кто нибудь хорошую идею... :)

#2
20:30, 12 мар. 2007

up

#3
23:25, 12 мар. 2007

использую Ogre+PhysX

void cCharacter::OnUpdateForces(const Ogre::FrameEvent &evt, OIS::Mouse *mMouse, OIS::Keyboard *mKeyboard, OIS::JoyStick* mJoy)
{
        //evt.timeSinceLastFrame - время рендера последнего кадра
  const OIS::MouseState &ms = mMouse->getMouseState();
  Vector3 d(0, 0, 0);

  d.y -= (9.80665 * evt.timeSinceLastFrame); //гравитация

  if(is_controllable) //управляемый?
  {
    if(mKeyboard->isKeyDown(KC_W))
    {
      if(m_AnimationStates[1]->Activate()) m_ListAnimations.push_back(m_AnimationStates[1]);
      m_AnimationStates[1]->setKeyDown(true);
      d.z += (9.80665 * evt.timeSinceLastFrame);
    }
    else m_AnimationStates[1]->setKeyDown(false);


    if(mKeyboard->isKeyDown(KC_S))
    {
      m_Actor->addLocalForce(NxVec3(0, 0, -200));
      d.z -= (9.80665 * evt.timeSinceLastFrame);
    }

    if(mKeyboard->isKeyDown(KC_A))
    {
      d.x = (9.80665 * evt.timeSinceLastFrame);
    }

    if(mKeyboard->isKeyDown(KC_D))
    {
      m_Actor->addLocalForce(NxVec3(-100, 0, 0));
      d.x -= (9.80665 * evt.timeSinceLastFrame);
    }

    if (ms.X.rel)
    {
      m_Node->yaw(Radian(-ms.X.rel*0.0007));
    }

    if(mKeyboard->isKeyDown(KC_SPACE) && !isJumping && collisionFlags & NXCC_COLLISION_DOWN) 
    {
      isJumping = true;
      isJumpingTime = Root::getSingleton().getTimer()->getMicroseconds();
    }
  }


  if(isJumping) //прыжок
  {
    Real a = isJumpingTime + 200000 - Root::getSingleton().getTimer()->getMicroseconds();
    if(a > 0.0f) d.y += (a*0.0002 * evt.timeSinceLastFrame);
  }

  NxVec3 pos = Ogre2NxVector(m_Node->getWorldOrientation()*d);
  boxController->move(pos, -1, 0.00001f, collisionFlags); //перемещаем character

  if(collisionFlags & NXCC_COLLISION_DOWN) isJumping = false;
}
минус: столкновения с объектом приходится обрабатывать отдельно...

#4
23:40, 12 мар. 2007

Здесь
http://www.equalmeans.net/~chriss/EQM/index.html
хороший пример CharacterController, кроме прыжков почти все есть.

#5
13:45, 13 мар. 2007

IDirect3DDevice
_РЕСПЕКТ_ тебе. классная ссылка! просто руль!

#6
16:38, 13 мар. 2007

Долго я разбирал стандартные примеры, толку было мало.
Этот сайт ужа давно встречал, как вижу он постояно обновляется. Класный сайтец!

#7
23:16, 14 мар. 2007

А еще какие нибудь сайты с примерами по PhysX встречали? Я только этот встретил и Рендера сайт еще.

#8
23:57, 14 мар. 2007

Вот таких ресурсов мало, я восновном черпаю инфу из форума Агеи (много полезного можно узнать). Встречал пару америкаских сайтов, но там одна лажа, вообщем ничего полезного. Вот так и приходится жить. Было бы класно если собрать всю инфу о сайтах по Физиксу.
Кстати, на моём сайте есть табличка со всеми игрушками, движками, прогами, самоделками и т.д. Очень полезная вещь.

#9
4:39, 15 мар. 2007

Render
Да, мне эта табличка очень понравилась. Интересно очень.

#10
12:09, 15 мар. 2007

что за сайт у Render-а ?

#11
19:48, 15 мар. 2007

http://rubux.swargo.com/rus

#12
18:02, 24 мар. 2007

Блин, ссылка сдохла, а я несохранил пример. Дайте кто нибудь.

#13
18:25, 24 мар. 2007

Если ты имешь ввиду отсюда http://www.equalmeans.net/~chriss/EQM/index.html, могу скинуть, хотя у меня ссылка работает.

#14
19:21, 24 мар. 2007

Страница ненайдена. Дня три назад у самого работало.

ПрограммированиеФорумФизика

Тема в архиве.