forum.boolean.name

forum.boolean.name (http://forum.boolean.name/index.php)
-   3D-программирование (http://forum.boolean.name/forumdisplay.php?f=12)
-   -   Камера от MMORPG (http://forum.boolean.name/showthread.php?t=13755)

BlackOut 28.12.2010 01:23

Ответ: Камера от MMORPG
 
@Костян
Посмотри пример:
http://www.blitz-school.info/less_ex.phtml

Amatsu 28.12.2010 10:45

Ответ: Камера от MMORPG
 
Хм... чтож вы меня не спросили, я как раз такую систему сделал в своей игре %) Если кому-то еще надо, набросал простенький пример
Код:

Graphics3D 1024,768,32,1
SeedRnd(MilliSecs())

;объявление необходимых переменных
Global mxs#,mys#,dest_xang#,dest_yang#,xang#,yang#,differ_yaw#,target_rot#
Global camera_target=CreatePivot()
Global dist_target=CreatePivot(camera_target)
Global move_navigator=CreatePivot(camera_target)
Global move_directional=CreatePivot()

;создание камеры
Global camera=CreateCamera()
CameraZoom camera,1.4

;создание сцены
Global light=CreateLight()
RotateEntity light,30,30,0

plane=CreatePlane()
EntityColor plane,100,150,255
EntityPickMode plane,2

For c=1 To 10
  cube=CreateCube()
  EntityColor cube,150,255,150
  ScaleEntity cube,2,20,2
  PositionEntity cube,Rand(-50,50),20,Rand(-50,50)
  EntityPickMode cube,2
Next

;создание модели игрока
player=CreateCube()
EntityAlpha player,0.5
PositionEntity player,0,1,0
EntityColor player,255,0,0



While Not KeyHit(1)

  MouseLook(player)

  UpdateWorld()
  RenderWorld()
 
  Flip

Wend

End

;<<сама функция>>
;height - параметр указывает высоту над центром модели, куда "привязать" камеру. например если надо чтобы прицел был над головой игрока
;speed - скорость передвижения игрока
;rotate - скорость поворота модели игрока в сторону движения. желательно оставить 10

Function MouseLook(target,height=5,speed#=0.5,rotate#=10)

;ВНИМАНИЕ!!! нижеследующие 3 параметра можно менять, если хотите подредактировать "колизию" камеры с уровнем. но я не рекомендую их трогать - долго подбирал значения =)

;collision_radius - радиус луча, по которому проверяется наличие препятсвий между моделью игрока и камерой (команда LinePick)

;collision_distance - параметр смещает камеру (чем меньше значение, тем ближе будет приближаться камера) ближе к модели игрока в случае, если LinePick=true.
; помогает от "проваливания" камеры в стены

;camera_distance - расстояние от модели игрока до камеры в случае если LinePick=false

  collision_radius#=0.5
  collision_distance#=5
  camera_distance=30

  If target<>0 Then
    PositionEntity move_navigator,0,0,0

    If KeyDown(17) Then PositionEntity move_navigator,EntityX(move_navigator),0,0.1
    If KeyDown(31) Then PositionEntity move_navigator,EntityX(move_navigator),0,-0.1
    If KeyDown(30) Then PositionEntity move_navigator,-0.1,0,EntityZ(move_navigator)
    If KeyDown(32) Then PositionEntity move_navigator,0.1,0,EntityZ(move_navigator)


    PositionEntity move_directional,EntityX(target),EntityY(target)+height,EntityZ(target)
    If EntityX(move_navigator)<>0 Or EntityZ(move_navigator)<>0 Then
          PointEntity move_directional,move_navigator
      If Abs(differ_yaw)<90 Then MoveEntity target,0,0,speed ;число 90 определяет угол между направлением движения и направлением модели, при котором модель начинает движение
    EndIf

    mxs=MouseX()-GraphicsWidth()/2
    mys=MouseY()-GraphicsHeight()/2
    MoveMouse GraphicsWidth()/2,GraphicsHeight()/2
    mxs=mxs/5.5
    mys=mys/5.5
    If mxs>30 Then mxs=30
    If mxs<-30 Then mxs=-30
    If mys>30 Then mys=30
    If mys<-30 Then mys=-30
    dest_xang=dest_xang-mxs
    dest_yang=dest_yang+mys

    If dest_yang<-85 Then dest_yang=-85
    If dest_yang>85 Then dest_yang=85
    yang=(yang+(dest_yang-yang)/4)
    xang=(xang+(dest_xang-xang)/4)


    PositionEntity camera_target,EntityX(target),EntityY(target)+height,EntityZ(target)
    RotateEntity camera_target,0,xang,0
    PositionEntity dist_target,0,Sin(yang)*camera_distance,-Cos(yang)*camera_distance

    vis_line_x#=EntityX(camera_target,1)
    vis_line_y#=EntityY(camera_target,1)
    vis_line_z#=EntityZ(camera_target,1)
    vis_line_dx#=EntityX(dist_target,1)-EntityX(camera_target,1)
    vis_line_dy#=EntityY(dist_target,1)-EntityY(camera_target,1)
    vis_line_dz#=EntityZ(dist_target,1)-EntityZ(camera_target,1)
    If LinePick(vis_line_x,vis_line_y,vis_line_z,vis_line_dx,vis_line_dy,vis_line_dz,collision_radius) Then
      PositionEntity camera,PickedX#()-(PickedX#()-EntityX#(camera_target,1))/collision_distance,PickedY#()-(PickedY#()-EntityY#(camera_target,1))/collision_distance,PickedZ#()-(PickedZ#()-EntityZ#(camera_target,1))/collision_distance
    Else
;      PositionEntity camera,EntityX#(dist_target,1)-(EntityX#(dist_target,1)-EntityX#(camera_target,1))/collision_distance,EntityY#(dist_target,1)-(EntityY#(dist_target,1)-EntityY#(camera_target,1))/collision_distance,EntityZ#(dist_target,1)-(EntityZ#(dist_target,1)-EntityZ#(camera_target,1))/collision_distance
      PositionEntity camera,EntityX#(dist_target,1),EntityY#(dist_target,1),EntityZ#(dist_target,1)
    EndIf
    PointEntity camera,camera_target

    differ_yaw=EntityYaw(target)-EntityYaw(move_directional)
    If differ_yaw>179.9999 Then differ_yaw=differ_yaw-359.9999
    If differ_yaw<-179.9999 Then differ_yaw=359.9999+differ_yaw

    If EntityX(move_navigator)<>0 Or EntityZ(move_navigator)<>0 Then
      If differ_yaw>rotate Then
        target_rot=target_rot-rotate
      ElseIf differ_yaw<-rotate Then
        target_rot=target_rot+rotate
      ElseIf differ_yaw<rotate*3 And differ_yaw>-rotate*3 Then
        target_rot=EntityYaw(move_directional,1)
      EndIf
    EndIf
    RotateEntity target,0,target_rot,0
  EndIf
End Function


RegIon 29.12.2010 06:31

Ответ: Камера от MMORPG
 
Неха маленький код на камеру:4to:

Amatsu 29.12.2010 09:45

Ответ: Камера от MMORPG
 
Цитата:

Сообщение от Костян (Сообщение 173569)
Неха маленький код на камеру:4to:

Можешь оптимизировать ;)

moka 29.12.2010 23:25

Ответ: Камера от MMORPG
 
Цитата:

Сообщение от Костян (Сообщение 173569)
Неха маленький код на камеру:4to:

Ты не видел исходников, по например реализации работы string'ов. Или ещё чего "попроще", так строк сотни бывают, а выглядит, как простая "чтучка".

RegIon 30.12.2010 05:44

Ответ: Камера от MMORPG
 
Цитата:

Ты не видел исходников, по например реализации работы string'ов. Или ещё чего "попроще", так строк сотни бывают, а выглядит, как простая "чтучка".
А в чём их прикол.(string'ов. )

moka 31.12.2010 03:01

Ответ: Камера от MMORPG
 
Цитата:

Сообщение от Костян (Сообщение 173709)
А в чём их прикол.(string'ов. )

Ну я и говорю, "Ты не видел исходников".
Сперва, что такое string (технически), и как он реализован на уровне памяти и переменных. А затем функции, по работе с ними, всякие там поиски в string'е, обрезания, сравнивания, конвертация одного типа данных, в string, и многое другое. Там немалый лес, и много работы с битами.

Эм, зачем это я рассказываю..

RegIon 31.12.2010 05:32

Ответ: Камера от MMORPG
 
Цитата:

Ну я и говорю, "Ты не видел исходников".
Сперва, что такое string (технически), и как он реализован на уровне памяти и переменных. А затем функции, по работе с ними, всякие там поиски в string'е, обрезания, сравнивания, конвертация одного типа данных, в string, и многое другое. Там немалый лес, и много работы с битами.
Так эта же машинный код.Оно всё автоматом делаеться.

Randomize 31.12.2010 05:40

Ответ: Камера от MMORPG
 
Цитата:

Сообщение от Костян (Сообщение 173878)
Так эта же машинный код.Оно всё автоматом делаеться.

O_o не не не. Не автоматом! Это в Blitz3D это уже за тебя реализовано.

RegIon 31.12.2010 06:18

Ответ: Камера от MMORPG
 
Код:

O_o не не не. Не автоматом! Это в Blitz3D это уже за тебя реализовано.
Когда успел написать. Тыж Offline

moka 31.12.2010 21:14

Ответ: Камера от MMORPG
 
Цитата:

Сообщение от Костян (Сообщение 173878)
Так эта же машинный код.Оно всё автоматом делаеться.

Дети тоже "автоматом" рождаются.
И вообще компьютер никто не делал, всё автоматом сделалось, и думает автоматом.
Запомни. Всё что ты видишь в мониторе, ничего не сделано "автоматом", а то что работает на уровне железа, сделано умненькими инженерами, которые тоже не "пишут пару строк".

Вообще у тебя никакого, даже базового понятия о том как компьютер и его компоненты работают и взаимодействуют? Даже в школе это преподают, несмотря на то какой там убогий предмет информатики.

Костян, сразу на заметку, чтобы быть начитанным и немного образованным в чём-то. Используй фантазию, но только не для утверждений, а для поиска информации. Вообрази, что-то, но понимай что это что-то лишь тобою вооброжаемо. И пока ты найдёшь конкретного подтверждения своим "догадкам", не бросайся ими, как "утверждениями". Они останутся твоими "догадками", не более. Здесь "удача" не работает.
Вот тебе, на вооружение:
google.com - самый важный инструмент, я лично его открываю как каждый 5 сайт. А на работе, это вообще для меня каждая вторая закладка - это гуугл.
Для образования и теоретической части, достаточно удобна ru.wikipedia.org, там есть куча всего. Можешь почитать что значит большинство терминов, на любую тему, которые ты встречаешь.
Если есть стремление к знаниям, то используй инструменты, для получения этих знаний.
Короче говоря, увидел слово string, не поленись, вбей в гугле: "string wikipedia", далее, выбери строку: String (computer science), sequence of symbols or digits in computer programming
И затем слева, переключись на русский, затем если будешь внимательным, дойдёшь до "Реализация в языках программирования", и будет что-то более ясным.

Учись пока молод! Дерзай!
Но бл..ть! НЕ ТУПИ. Детский сад...


Часовой пояс GMT +4, время: 13:58.

vBulletin® Version 3.6.5.
Copyright ©2000 - 2025, Jelsoft Enterprises Ltd.
Перевод: zCarot