[5.11 ] MouseRayCast / CopyEntity() fail

Hier werden, insbesondere in den Beta-Phasen, Bugmeldungen gepostet. Das offizielle BugForum ist allerdings hier.
Benutzeravatar
tft
Beiträge: 605
Registriert: 08.09.2004 20:18
Computerausstattung: GTX Titan , i9 9900K , 32 GB Ram , 500 GB SSD , 3 ASUS FullHD Monitore and more
Wohnort: Dachsen
Kontaktdaten:

[5.11 ] MouseRayCast / CopyEntity() fail

Beitrag von tft »

Hallo,

MouseRayCast() funktioniert nicht mit Kopierten Entity.

Code: Alles auswählen

;
; ------------------------------------------------------------
;
;   PureBasic - MouseRayCast
;
;    (c) 2012 - Fantaisie Software
;
;    DebugTest TFT 2013 CopyEntity()
;
; ------------------------------------------------------------
;

IncludeFile "Screen3DRequester.pb"

#CameraSpeed = 0.4
#N = 2
Enumeration
  #MainWindow 
  #Editor
EndEnumeration

Define.f KeyX, KeyY, MouseX, MouseY, RatioX, RatioY, SpeedRotate

If InitEngine3D()
  
  Add3DArchive("Data/Textures", #PB_3DArchive_FileSystem)
  Add3DArchive("Data/Models", #PB_3DArchive_FileSystem)
  Add3DArchive("Data/Scripts", #PB_3DArchive_FileSystem)
  Add3DArchive("Data/GUI", #PB_3DArchive_FileSystem)
  Parse3DScripts()
  
  InitSprite()
  InitKeyboard()
  InitMouse()
  
  If Screen3DRequester()
    
    KeyboardMode(#PB_Keyboard_International)  
    
    WorldDebug(#PB_World_DebugEntity)
    
    ;-Materials
    ;
    GetScriptMaterial(0, "Color/Blue")
    GetScriptMaterial(1, "Color/Green")
    GetScriptMaterial(2, "Color/Red")
    GetScriptMaterial(3, "Color/Yellow")
    CreateMaterial(4, LoadTexture(0, "Dirt.jpg"))
    
    
    ;-Meshes
    ;
    CreateCube(0, 2)
    CreateSphere(1, 1)
    CreateCylinder(2, 1, 4)
    CreatePlane(3, 20, 20, 1, 1, 1, 1)
    LoadMesh(10, "robot.mesh")
    LoadMesh(11, "ninja.mesh")
    
    ;-Entities
    ;
    
    CreateEntity(1, MeshID(1), MaterialID(1), -4,  1,  0)
    CreateEntity(2, MeshID(2), MaterialID(2),  0,  2, -4)
    CreateEntity(3, MeshID(0), MaterialID(3), 10,  1, 13)
    CreateEntity(5, MeshID(1), MaterialID(2),  0,  0,  0)
    CreateEntity(6, MeshID(0), MaterialID(4), 14,  1,  0)
    
    ScaleEntity(3, 8, 1, 1)
    RotateEntity(3, 0, 34, 0)
    ScaleEntity(5, 0.5, 0.5, 0.5)
    
    CEntity=CopyEntity(3,#PB_Any)
    
    ;-Robot
    CreateEntity(10, MeshID(10), #PB_Material_None, -1, -1.5, 5)
    ScaleEntity(10, 0.05, 0.05, 0.05)
    StartEntityAnimation(10, "Walk")
    
    ;-Ninja
    CreateEntity(11, MeshID(11), #PB_Material_None, 6, -1.5, 12)
    ScaleEntity(11, 0.02, 0.02, 0.02)
    RotateEntity(11,0, 70, 0)
    StartEntityAnimation(11, "Walk")
    
    ;-Nodes
    ;
    CreateNode(0, 3, 0, 0)
    AttachNodeObject(0, EntityID(5))
    
    CreateNode(1, 0, 0, 1) 
    AttachNodeObject(0, NodeID(1))
    MoveNode(0, 0, 1, 0)
    
    ;-Camera
    ;
    CreateCamera(0, 0, 0, 100, 100)
    CameraBackColor(0, RGB(40, 30, 60))
    MoveCamera(0, -1, 8, 15, #PB_Absolute)
    CameraLookAt(0, -1, 0, 0)
    
    ;-Light
    ;
    CreateLight(0, RGB(255, 255, 255), 1560, 900, 500)
    AmbientColor(RGB(50, 50, 50))
    
    ;-GUI
    ;
    RatioX = CameraViewWidth(0) / 1920
    RatioY = CameraViewHeight(0) / 1080
    OpenWindow3D(#MainWindow, 0, 0, 420 * RatioX, 110 * RatioY, "MouseRayCast")
    StringGadget3D(#Editor, 10 * RatioX, 20 * RatioY, 360 * RatioX, 40 * RatioY, "", #PB_String3D_ReadOnly)
    
    ShowGUI(128, 1)
    
    MouseLocate(CameraViewWidth(0)/2, CameraViewHeight(0)/2)
    
    Repeat
      Screen3DEvents()
      
      Repeat
        Event3D = WindowEvent3D()
      Until Event3D = 0
      
      If ExamineMouse()
        InputEvent3D(MouseX(), MouseY(), MouseButton(#PB_MouseButton_Left))
        MouseX = -MouseDeltaX() * #CameraSpeed * 0.5
        MouseY = -MouseDeltaY() * #CameraSpeed * 0.5
        Mx = MouseX()
        My = MouseY()
      EndIf  
      
      If ExamineKeyboard()
        
        If KeyboardPushed(#PB_Key_Space)
          Stop = 0
        Else
          Stop = 1
        EndIf          
        If KeyboardPushed(#PB_Key_Left)
          KeyX = -#CameraSpeed 
        ElseIf KeyboardPushed(#PB_Key_Right)
          KeyX = #CameraSpeed 
        Else
          KeyX = 0
        EndIf
        
        If KeyboardPushed(#PB_Key_Up)
          KeyY = -#CameraSpeed 
        ElseIf KeyboardPushed(#PB_Key_Down)
          KeyY = #CameraSpeed 
        Else
          KeyY = 0
        EndIf
        
      EndIf
      
      Entity = MouseRayCast(0, Mx, My,-1)
      
      If Entity>0 
        
        CreateLine3D(11, PickX(), PickY(), PickZ(), RGB(255,0,0), 
                         PickX() + NormalX()*#N, 
                         PickY() + NormalY()*#N, 
                         PickZ() + NormalZ()*#N, RGB(255,0,0))
        
        SetGadgetText3D(#Editor, "Entity = " + Str(Entity))
        SpeedRotate = 0.1 
      Else   
        SetGadgetText3D(#Editor, "I'm looking...")
        SpeedRotate = 0.5
      EndIf  
      
      RotateNode(0, 0, SpeedRotate * Stop, 0, #PB_Relative)
      
      RotateCamera(0, MouseY, MouseX, 0, #PB_Relative)
      MoveCamera  (0, KeyX, 0, KeyY)
      
      RenderWorld()
      Screen3DStats()
      FlipBuffers()
    Until KeyboardPushed(#PB_Key_Escape) Or Quit = 1
  EndIf
  
Else
  MessageRequester("Error", "The 3D Engine can't be initialized", 0)
EndIf

End
ich habe schon fieles probiert. Aber Entitys die mit CopyEntity erzeugt werden. Lassen sich nicht mit MouseRayCast() finden.
MousePick() funktioniert zwar. Aber ich brauche die Normalen des Schnittpunktes. Und die gibt es bei MouseHit nicht.

MfG TFT
TFT seid 1989 , Turgut Frank Temucin , Dachsen/Berlin/Antalya
Aktuelles Projekte : Driving School Evergarden
YouTube : Pure Basic to go
FaceBook : Temuçin SourceMAgic Games
DISCORD : SourceMagic
W10 , i9 9900K ,32 GB Ram , GTX Titan , 3 Monitore FHD
ARDUINO Freak :-)