Версия для печати темы
Нажмите сюда для просмотра этой темы в оригинальном формате
Форум программистов > Программирование игр, графики и искусственного интеллекта > Передвижение игрока по ландшафту


Автор: Dronchik 7.8.2007, 13:49
Привет всем. Как реализовать движение игрока по неровному ландшафту на С++ и DirectX9?

Автор: ShellRaiser 7.8.2007, 14:31
Если ты юзал когданить Блитз3д то там была такая функция MoveEntity(объект,x,y,z) ну вот думаю подобным образом тебе придётся реализовывать на с++, только при этом ещё и учитывать коллизию...

Добавлено через 1 минуту и 12 секунд
и посмотри сэмлы с DirectX SDK там как раз реализован ответ на твой вопрос...

Автор: arilou 7.8.2007, 18:22
Dronchik, ландшафт должен уметь давать высоту Y по указанным X, Z. Типа GetHeightAt(float x, float z); на каждое движение чара получаешь новое значение высоты и кооректируешь его позицию.

Автор: Dronchik 8.8.2007, 07:35
То есть высота ландшафта на каждой позиции гдето записана? А где и как получить её?

Добавлено через 2 минуты и 35 секунд
ShellRaiser, в блитце я никогда не работал, можешь рассказать об этой функции?

Добавлено через 11 минут и 9 секунд
О придумал, ландшафт делатся в 3Д максе, я его сфоткаю сверху, переведу в чёрно-белый вид и загружу эту карту высот вместе с модель ландшафта. Но как проверит что игрок столкнулся с деревом например? Ведь деревьев там будет много. А каждую координату проверять долго.

Автор: ShellRaiser 8.8.2007, 10:23
как я помню в блице была такая хрень - EntityType тоесть она указывала тип объекта, и просто при инициализации указывал коллизи каких типов могут происходить...т.е. коллизия чела например и ландшафта...

А насчёт функции MoveEntity(объект, х,у,z):
вот пример как я думаю эт бут на jave, где описан частичный код Entity в блитзе
Код

class player{
   private float x;
   private float y;
   private float z;

   private float translate[3];
//и т.д., и метод MoveEntity();

   public void MoveEntity(x,y,z){
      this.x+=x;
      this.y+=y;
      this.z+=z;
   }
    
    public float EntityX(){
       return x;
    }

    public float EntityY(){
       return y;
    }

    public float EntityZ(){
       return z;
    }
//дальше можеш добавить переменные поворотов углов и т.д.
}


тоесть как ты заметил ты лиш прибовляеш к координатам небольшое смещение, в случае коллизи думаю ты догадаешся что сделать))

Автор: arilou 8.8.2007, 11:15
Dronchik, из карты высот. сгенери карту каким-нить World Machine, и строй ландшафт из нее. Google "построение трехмерных ландшафтов"

Powered by Invision Power Board (http://www.invisionboard.com)
© Invision Power Services (http://www.invisionpower.com)