forum.boolean.name

forum.boolean.name (http://forum.boolean.name/index.php)
-   3D-программирование (http://forum.boolean.name/forumdisplay.php?f=12)
-   -   Отвязать от родителя (http://forum.boolean.name/showthread.php?t=20638)

sdf111 10.08.2017 12:13

Отвязать от родителя
 
Объект привязал к родителю
Родитель повернулся на 180 вокруг Y
При EntityParent,obj,0 объект тоже разворачивает на 180 вокруг Y
Вопрос: Что из чего нужно вычесть, чтобы грамотно отвязать?
Спасибо.

Randomize 10.08.2017 19:46

Ответ: Отвязать от родителя
 
EntityParent child, 0, [global]
попробуй третий параметр

sdf111 11.08.2017 09:47

Ответ: Отвязать от родителя
 
Всё-одно разворачивает, да ещё и позицию сбрасывает на ноль:(
Global port

Код:

      If EntityDistance (a\user,port)<=1.5 And portYaw# >=-178
                                  portYaw#=EntityYaw (port)                     
                                  TurnEntity port,0,-1,0                                                                 
                                    EntityParent a\user, port   
         
        Else If  EntityDistance (a\user,port)>=3 And  portYaw# <=-177                           
                                    EntityParent a\user, 0,False

Может тут DeltaYaw надо, или TFormPoint ??:SOS:

ABTOMAT 11.08.2017 17:35

Ответ: Отвязать от родителя
 
Код:

EntityParent,obj,1
жи есть?
Я, правда, уже не помню, не стоит ли по умолчанию там уже единица

sdf111 11.08.2017 18:11

Ответ: Отвязать от родителя
 
EntityParent entity,parent[,global]
global (не обязательно) - true - чтобы сохранить глобальную позицию и ориентацию привязанного объекта (по умолчанию).

Это ничего не даёт. Юзера разворачивает при отвязке.:''((

ABTOMAT 11.08.2017 18:48

Ответ: Отвязать от родителя
 
Так у тебя же False стоит зачем-то?

EntityParent a\user, 0,False

Сделай так:

EntityParent a\user, 0,True

Тоже так же?

sdf111 11.08.2017 18:57

Ответ: Отвязать от родителя
 
по моему там true по умолчанию. Всё так же..

ABTOMAT 11.08.2017 21:22

Ответ: Отвязать от родителя
 
Сделай более простой пример с максимально простым кодом и без медии (например, на кубиках), чтобы его можно было запустить у себя.
Если нет возможности "потыкать", шанс того, что кто-то поможет, сильно снижается.
Кроме того, возможно, в процессе создания изолированного примера кода с багом, ты сам найдёшь его причину. Может быть, помимо отвязки от родителя, там ещё что-то делается, что влияет на результат.

sdf111 14.08.2017 09:43

Ответ: Отвязать от родителя
 
Цитата:

Сообщение от ABTOMAT (Сообщение 313858)
Сделай боле..........то влияет на результат.

Никак не думал, что такой простой вопрос окажется таким проблемным для профи........

RBK 14.08.2017 10:42

Ответ: Отвязать от родителя
 
Ответ на твой вопрос достаточно простой: EntityParent ничего не поворачивает, только меняет координатную сетку для привязанного объекта.
Значит ошибка где-то в логике написанной тобой программы.
Т.к. саму программу ты к вопросу не добавил, всем остаётся лишь гадать что с ней не так

sdf111 14.08.2017 14:12

Ответ: Отвязать от родителя
 
Цитата:

Сообщение от RBK (Сообщение 313861)
EntityParent ничего не поворачивает, только меняет координатную сетку для привязанного объекта.

Я и не утверждал обратного.
Без мыши отвязка нормальная:
Код:

Graphics3D 800,600,32,1  : SetBuffer BackBuffer() 
 font=LoadFont("arial",18)  : SetFont font
 
Global user,portYaw#

 world=CreatePlane() :  tex=CreateTex(256,256)  :  ScaleTexture tex,3,3  :  EntityTexture world,tex 
 Global port=CreateCylinder()  :ScaleEntity port,2,0.02,2 : PositionEntity port,0,1,2 
 
  CreateUser()
                           
Repeat
                       
  Updateuser()
                             
UpdateWorld ()
RenderWorld () 
        Color 255,255,100
        Text 20,20,"X "+EntityX(user) : Text 20,40,"Y "+EntityY(user)  : Text 20,60,"Z "+EntityZ(user)
        Text 220,20,"Parent "+GetParent (user) 
Flip
Cls
Until KeyHit(1)
End
;==========

Function CreateTex(w,h)
 tex=CreateTexture(w,h)
 SetBuffer TextureBuffer(tex)
Color 100,100,100
 Rect  10,10,450,450
 SetBuffer BackBuffer()
 Return tex
End Function


Function CreateUser()                                                                                                         
user=CreateCylinder(3) : ScaleEntity user,0.2,0.05,0.7  :  EntityColor user,255,0,0  : PositionEntity user,0,1,-4
 cam=CreateCamera()  : PositionEntity cam,0,10,0 : TurnEntity cam,90,0,0
        CameraProjMode cam,2 : CameraZoom cam,0.1 : EntityParent cam,user 

End Function


Function Updateuser()

  If KeyDown(200)  MoveEntity user,0,0,0.1
  If KeyDown(208)  MoveEntity user,0,0,-0.1
  If KeyDown(203)  TurnEntity user,0,1.5,0
  If KeyDown(205)  TurnEntity user,0,-1.5,0

                        If EntityDistance (user,port)<=1.5 And portYaw >=-178
                                  portYaw=EntityYaw (port)                     
                                  TurnEntity port,0,-1,0                                                                 
                                              EntityParent user, port 
                        Else If  EntityDistance (user,port)>=4 And  portYaw <=-177                     
                                              EntityParent user, 0
                        EndIf
 
End Function



с мышью - нет:(
Код:

Graphics3D 800,600,32,2  : SetBuffer BackBuffer() 
 font=LoadFont("arial",18)  : SetFont font
 
Global user, portYaw#
Global cam, camxa#, camya#

 world=CreatePlane() :  tex=CreateTex(256,256)  :  ScaleTexture tex,3,3  :  EntityTexture world,tex 
 Global port=CreateCylinder()  :ScaleEntity port,2,0.02,2 : PositionEntity port,0,1,10 
 
  CreateUser()
                HidePointer                 
Repeat
                       
  Updateuser()
                             
UpdateWorld ()
RenderWorld () 
        Color 255,255,100
        Text 20,20,"X "+EntityX(user) : Text 20,40,"Y "+EntityY(user)  : Text 20,60,"Z "+EntityZ(user)
        Text 220,20,"Parent "+GetParent (user)
        Text 220,40,"Yuser "+EntityYaw (user)
   
Flip
Cls
Until KeyHit(1)
End
;==========

Function CreateTex(w,h)
 tex=CreateTexture(w,h)
 SetBuffer TextureBuffer(tex)
Color 100,100,100
 Rect  10,10,450,450
 SetBuffer BackBuffer()
 Return tex
End Function


Function CreateUser()                                                                                                         
user=CreateCylinder(3) : ScaleEntity user,0.2,0.5,0.7  :  EntityColor user,255,0,0  :  PositionEntity user,0,1,0
 cam=CreateCamera(user)  : PositionEntity cam,0,18,0
 
End Function


Function Updateuser()

  If KeyDown(200)  MoveEntity user,0,0,0.1
  If KeyDown(208)  MoveEntity user,0,0,-0.1
  If KeyDown(203)  MoveEntity user,-0.1,0,0
  If KeyDown(205)  MoveEntity user,0.1,0,0
    mxs#=MouseXSpeed()*0.25                     
    mys#=MouseYSpeed()*0.25
    MoveMouse GraphicsWidth()*0.5,GraphicsHeight()*0.5
    camxa= camxa-mxs Mod 360
    camya= camya+mys
    If  camya<-70 Then  camya=-70   
    If  camya>70 Then  camya=70
    RotateEntity user,0, camxa,0
    RotateEntity cam, camya,0,0


                        If EntityDistance (user,port)<=1.5 And portYaw >=-178
                                  portYaw=EntityYaw (port)                     
                                  TurnEntity port,0,-1,0                                                                 
                                              EntityParent user, port 
                        Else If  EntityDistance (user,port)>=6 And  portYaw# <=-177                     
                                              EntityParent user, 0
                        EndIf
 
End Function

:(

L-ee-X 14.08.2017 14:46

Ответ: Отвязать от родителя
 
Я исходя из вышенаписанного вообще ничего не понял, чего хочет ТС
Цитата:

Сообщение от sdf111 (Сообщение 313862)

EntityParent user, 0

Это что?

sdf111 14.08.2017 15:32

Ответ: Отвязать от родителя
 
Цитата:

Сообщение от L-ee-X (Сообщение 313863)
чего хочет ТС

ТС хочет чтобы юзера не разворачивало в момент отвязки. Пост#11 оффтоп№2(с мышью)

RBK 14.08.2017 15:55

Ответ: Отвязать от родителя
 

Итак, объясняю что происходит:
когда расстояние между user и port становится <= 1.5,
вот эта часть кода крутит объект port
Код:

If  EntityDistance(user,port)<=1.5 And portYaw >=-178
      portYaw=EntityYaw (port)                     
  .  .  .
 Endif

когда portYaw станет >= -178 , вращение остановится

привязки и остальное не влияют на эту часть кода


стоп проблема в другой части

sdf111 14.08.2017 16:17

Ответ: Отвязать от родителя
 
Цитата:

Сообщение от RBK (Сообщение 313866)
...
когда расстояние между user и port становится <= 1.5,
вот эта часть кода крутит объект port
когда portYaw станет >= -178 , вращение остановится
привязки и остальное не влияют на эту часть кода

Спасибо. Но я как бы в курсе....:super:
А дальше?
Когда, в примере из Поста#11 оффтоп №2(с мышью), мы удаляемся от лифта и Parent становится =0 , юзера разве не разворачивает на 180?..:dontknow:

St_AnGer 14.08.2017 16:30

Ответ: Отвязать от родителя
 
Я вот взял и просто поменял
Цитата:

Сообщение от sdf111 (Сообщение 313862)
Код:

    RotateEntity user,0, camxa,0
    RotateEntity cam, camya,0,0


на
Код:

    TurnEntity user,0, -mxs,0
    RotateEntity cam, camya,0,0

и никуда больше не крутит user'а после лифта.

sdf111 14.08.2017 16:42

Ответ: Отвязать от родителя
 
Цитата:

Сообщение от St_AnGer (Сообщение 313868)
Я вот взял и просто поменял
на
Код:

    TurnEntity user,0, -mxs,0
    RotateEntity cam, camya,0,0

и никуда больше не крутит user'а после лифта.

Да, действительно,Супер!:super: Спасибо за ценную правку:beer:
Если ещё и в основной сценке всё будет работать.....тада вообще круть!
==================================пс

Кстати, не подскажешь, в чём тут прикол цифры 180? а то я плох в математике..
Если If EntityDistance (user,port)<=1.5 And portYaw >=-180
portYaw=EntityYaw (port)
При такой записи , после -180 значение перескакивает в плюсовой диапазон и движется к нулю..лифт крутиться всё время..

St_AnGer 14.08.2017 16:54

Ответ: Отвязать от родителя
 
Цитата:

Сообщение от sdf111 (Сообщение 313869)
При такой записи , после -180 значение перескакивает в плюсовой диапазон и движется к нулю..лифт крутиться всё время..

Ну, я точно не скажу, но, возможно, EntityYaw возвращает диапазон значений от -179.99999 (тут куча девяток) до 180. По цифрам как раз 360 градусов получается.

RBK 14.08.2017 16:54

Ответ: Отвязать от родителя
 
Это так углы сделаны:
с одной стороны диапазон от 0 до 180,
с другой от 0 до -179
внизу после -179 будет 180, вроде так было

sdf111 14.08.2017 17:06

Ответ: Отвязать от родителя
 
Ну а если мне нужно будет повернуть на -270, тогда как? Вычитать из 360-270 и на это значение поворачивать , или как?
Меня, в принципе, и -179 устраивает, но просто интересно..

Randomize 15.08.2017 08:22

Ответ: Отвязать от родителя
 
Цитата:

Сообщение от sdf111 (Сообщение 313872)
Ну а если мне нужно будет повернуть на -270, тогда как?

Например если сделать RotateEntity ent, 0, -361, 0 это будет равносильно тому, что мы написали RotateEntity ent, 0, -1, 0
то есть оно как-бы переводит любое вводимое значение в требуемые пределы (~-180..+180).
Иными словами контролировать этот момент как-то дополнительно не требуется.

mingw 16.08.2017 13:25

Ответ: Отвязать от родителя
 
последний параметр global - указывает на то, стоит ли переносить глобальные координаты привязываемого объекта на новую сетку. Так если кубик с глобальными координатами 10,10,10 привязать к камере с флагом global, то он не поменяет своего глобального положения, будут вычислены только локальные координаты. Без флага global кубик встанет в позицию камеры.


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

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