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:


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

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