Главная | Форум | Мой профиль | Выход | RSS
Меню сайта
Мини-чат
200
Наш опрос
Расширение спектра деятельности. Тоесть принимать и по возможности помогать не только Ultimate 3D
Всего ответов: 298
Кабинет

Логин:
Пароль:
Поиск
Наши друзья
  • Официальный cайт U3D
  • Лучший сайт по GM
  • Сайт по геймдеву
  • Статистика

    Онлайн всего: 1
    Гостей: 1
    Пользователей: 0
    Реклама:

    Главная » Статьи » Начало

    Упрощённый вариант использования ландшафтов часть II взаимодействие

      Статья: «Упрощённый вариант использования ландшафтов часть II взаимодействие».

    Надеюсь вы не пропустили первую часть!
    В этой части я напишу о взаимодействии с ландшафтом. Мы заставим двигаться 
    камеру по поверхности, ландшафта, и не просто двигаться а облигать все припятствия, и даже падать с них
    Для начало создайте простой объект камеры. Без лишних наворотов.
    В создании камеры, пишем:
    rotxsm=0;//углХ головы
    rotxygl=0;//углX тела
    myspeed=0.7;//скорость ходьбы
    myspeed2=0;//скорость бега(для шифтам)
    max_range=8000;//расстояние при котором виден ландшафт
    min_range=2; //тоже расстояние при котором виден ландшафт
    mouse_speed=0.2;//скорость мыши
    z=13;//и так понятно
    view=90;//вид в градусах
    height=9;//высота
    MoveCamera();//создание камеры

    В степи камеры:
    time_factor=100/max(20,fps);//фактор меняющегося фпс
    //это вращение камерой при помощи мыши(менять не надо):
    GetMousePos();
    rotx+=(global.mouse_y-display_get_height()/2)*mouse_speed;
    if(rotx<-60)
      rotx=-59;
    if(rotx>60)
      rotx=59;
    roty+=(global.mouse_x-display_get_width()/2)*mouse_speed;
    SetMousePos(display_get_width()/2,display_get_height()/2);
    MoveCamera();//степ камеры

    Так, основную часть написали.
    Теперь само взаимодействие с ландшафтом. Ставим в степ:
    z=GetTerrainHeightAtPos(terrain,x,y);//вытаскиваем высоту в точки (x,y), на объект ландшафта(terrain)
    Смотрим- камера стоит прям на ландшафте.
    Добавим управление:
    //БЕГ:
    if(keyboard_check(vk_shift)){
    myspeed2=myspeed;
    }else{
    myspeed2=0;
    }
    //управление ходьбой
    if(keyboard_check(vk_up)){//если нажали вперёд
    Move(0,roty,(myspeed+myspeed2)*time_factor);
    //идём в сторону которую повёрнуты, на скорости (ходьбы+скорости бега)и умножаем фактор фпс
    }
    if(keyboard_check(vk_left)){
    Move(0,roty-90,(myspeed+myspeed2)*time_factor);
    }
    if(keyboard_check(vk_right)){
    Move(0,roty+90,(myspeed+myspeed2)*time_factor);
    }
    if(keyboard_check(vk_down)){
    Move(0,roty-180,(myspeed+myspeed2)*time_factor);
    }

    Всё теперь камера готова! Можно по ходить по ландшафту!
    Теперь зделаем что-бы камера не лазила по стенам!
    Для начало добавим в папку скрипты, скрипт rotation. А в него пишем:
    var curangle, newangle, step, dif; 
    curangle = argument0; 
    newangle = argument1; 
    step = argument2; 
    dif = abs(newangle - curangle) 
    while dif >= 360 dif -= 360 
    if dif > 180 dif = 360 - dif 
    dif = abs(dif) 
    temp = sin(degtorad(newangle - curangle)) 
    if curangle != newangle curangle += min(step,dif)*temp 
    //by Tetrider rotation.

    В степ ставим:
    point1=(z-6);
    point2=GetTerrainHeightAtPos(terrain,x+sin(degtorad(roty))*-8,y+cos(degtorad(-roty))*-8,0,90,0)-1;
    point3=GetTerrainHeightAtPos(terrain,x+sin(degtorad(roty+90))*5,y+cos(degtorad(-roty-90))*5,0,90,0);
    rotxygl=rotation(rotxygl,180-point_direction(0,0,-8,point1-point2),1.3*time_factor);
    rotz=rotation(rotz,point_direction(0,0,5,point1-point3)-50,0.9*time_factor);
    if(point_direction(0,0,5,point1-point3)-50>33){//если сильно наклонено тело в лево
    Move(0,roty-90,1.4*time_factor);//летим в лево
    }
    if(point_direction(0,0,5,point1-point3)-50<-33){//если сильно наклонено тело в право
    Move(0,roty+90,1.4*time_factor); //летим в право
    }
    if(180-point_direction(0,0,-8,point1-point2)>43){//если сильно наклонено тело вперёд
    Move(180-point_direction(0,0,-8,point1-point2),roty,1.4*time_factor); //летим вперёд
    }
    if(180-point_direction(0,0,-8,point1-point2)<-43){//если сильно наклонено тело назад
    Move(180-point_direction(0,0,-8,point1-point2)-180,roty,1.4*time_factor);//летим назад
    }
    //падение конечно немного заключено, но для начало пойдёт)))

    Вот и всё, ваша камера отлично взаимодействует с ландшафтом. Здесь и плавное движение головой, и всё остальное.

    Вот пример -Ссылка-

    Автор: ZXC76


    Категория: Начало | Добавил: ZXC76 (08.06.2009) | Автор: ZXC76
    Просмотров: 1541 | Комментарии: 2 | Теги: ландшафт, камера, пример, облигание ландшафта, ultimate 3d, рельеф | Рейтинг: 5.0/1
    Всего комментариев: 1
    1 ZXC76  
    1
    чё, и тут же что ли(((
    почему ссылки перестали работать cry

    спасибо что написал, я всё исправил.


    Добавлять комментарии могут только зарегистрированные пользователи.
    [ Регистрация | Вход ]

    Школа Ultimate3D 2009-2010 год