IrrlichtWrapper 1.05 (leider immer noch beta)

Anwendungen, Tools, Userlibs und anderes nützliches.
Benutzeravatar
tft
Beiträge: 650
Registriert: 08.09.2004 20:18
Computerausstattung: GFX 3060 Ti , i7 12700F , 32 GB Ram , 900 GB SSD , TV
Wohnort: Dachsen
Kontaktdaten:

Beitrag von tft »

Hallo ...

und ich schon wider, aber das erstellen eines Tutorial. Bringt eine menge dinge zutage. die ich nicht verstehe.

childs.l = IrrGetNodeChildCount(stone_liste()\node)
If childs.l>0
*node.l=irrgetnodechildat(stone_liste()\node,0)
EndIf

Gibt immer einen Memory fehler an Adresse 1

Eigentlich sollte in *node der Zeiger auf die erste Child Node von stone_liste()\node landen.
TFT seid 1989 , Turgut Frank Temucin , CH-Dachsen/DE-Berlin/TR-Antalya
Mein Projekt (Driving School Evergarden)
Codes bei (GitHub) Videos von (YouTube)
Treffen via Discord: Einladung

PB 6.10 | W11 | i7 12700F | 32 GB Ram | RTX 3060 Ti | 60 Herz -TV FullHD
ARDUINO Freak | Sprecher | Game Dev. | Geschichten Erzähler :-)
Benutzeravatar
Thalius
Beiträge: 476
Registriert: 17.02.2005 16:17
Wohnort: Basel / Schweiz

Beitrag von Thalius »

ha! Evtl. Bug gefunden. Notiert. Danke!

Weekend ebenfalls muss meine MSVC Umgebung unter win wieder aktualisieren.

Thalius
"...smoking hash-tables until until you run out of memory." :P
Benutzeravatar
tft
Beiträge: 650
Registriert: 08.09.2004 20:18
Computerausstattung: GFX 3060 Ti , i7 12700F , 32 GB Ram , 900 GB SSD , TV
Wohnort: Dachsen
Kontaktdaten:

Beitrag von tft »

Hallo ..

Ja ... das macht echt arbeit. Ich möchte ja weiterkommen. Daher werde ich nach einer anderen lösung suchen bis das behoben ist.
TFT seid 1989 , Turgut Frank Temucin , CH-Dachsen/DE-Berlin/TR-Antalya
Mein Projekt (Driving School Evergarden)
Codes bei (GitHub) Videos von (YouTube)
Treffen via Discord: Einladung

PB 6.10 | W11 | i7 12700F | 32 GB Ram | RTX 3060 Ti | 60 Herz -TV FullHD
ARDUINO Freak | Sprecher | Game Dev. | Geschichten Erzähler :-)
Benutzeravatar
Rings
Beiträge: 977
Registriert: 29.08.2004 08:48

Beitrag von Rings »

Manchmal muss man etwas Zeit investieren.
Hab heute mal ausführlich bissl mit rumprobiert, alle examples ausgetestet
(einige funktionierten nicht, 1.05 beta) und überlege ernsthaft
da nun ja statische lib angesagt ist mein projekt evtl. umzustellen, da mir enorm Möglichkeiten geboten wären.
Kurze Frage dazu:
1)Bisher habe ich meistens fast auschliesslich PB-Befehle genutzt und möchte die Plattformunabhängigkeit evtl. waren.Wie weit ist denn denn plattformübergreifend der wrapper gediegen ?
(OpenGL wird wohl überall funktionieren)

2)Das projekt worum es sich bei mir dreht ist in einer früheren version auch
hier downloadbar .
Oft hab ich einfach nur einfach bewegte objekte (buttons).Kann man sowas einfach als objekt (Mesh) erstellen und benutzen ?
(Also drehen, zoomen, transparent einstellen ).Bisher mache ich das über Sprite3D.

3). Kann man andere fremde Fenster (allerdings selber erstellt) einblenden ? (siehe TV-Abschnitt)

4)Da 3d, und irrlicht selbst für mich noch etwas ungewohnt ist, wo findet man die beste Doku ? Ich möchte gerne erfahren was die Irrklang kann, inwieweit GUI-Elemente implementiert sind.

5) Ich bin einfach begeistert über soviel gute Arbeit.
Rings hat geschrieben:ziert sich nich beim zitieren
Benutzeravatar
tft
Beiträge: 650
Registriert: 08.09.2004 20:18
Computerausstattung: GFX 3060 Ti , i7 12700F , 32 GB Ram , 900 GB SSD , TV
Wohnort: Dachsen
Kontaktdaten:

Beitrag von tft »

Hallo ...

Um mein Tut weiterzubringen wollte ich etwas Sound hinzufügen.
Aber nun habe ich erhebliche Schwierigkeit. Und ich fürchte das liegt an meinem MultiCore. Folgender Simpler Code geht garnicht.

Code: Alles auswählen

XIncludeFile #PB_Compiler_Home + "Includes\IrrlichtWrapper_Include.pbi"

If IrrStartEx(#IRR_EDT_DIRECT3D9,200, 200,#False, #False,#False, 32, #True, #False,#False,#Null) 
 
  Repeat
         
        While IrrKeyEventAvailable()
              
            *KeyEvent.irr_key_event = IrrReadKeyEvent()
      
            Select *KeyEvent\key
            Case #IRR_KEY_ESCAPE
              en=1
            EndSelect
              
        Wend
          
        IrrBeginScene(0, 0, 55 )  
        IrrDrawScene()
        IrrEndScene()
          
        Delay(100)
          
        Debug "1"
  
  Until en>0
  
  IrrStop()

EndIf
 
End   
Eigentlich sollte er nur auf einen Tastendruck warten. Aber das ganze schmiert einfach total ab.
TFT seid 1989 , Turgut Frank Temucin , CH-Dachsen/DE-Berlin/TR-Antalya
Mein Projekt (Driving School Evergarden)
Codes bei (GitHub) Videos von (YouTube)
Treffen via Discord: Einladung

PB 6.10 | W11 | i7 12700F | 32 GB Ram | RTX 3060 Ti | 60 Herz -TV FullHD
ARDUINO Freak | Sprecher | Game Dev. | Geschichten Erzähler :-)
Benutzeravatar
tft
Beiträge: 650
Registriert: 08.09.2004 20:18
Computerausstattung: GFX 3060 Ti , i7 12700F , 32 GB Ram , 900 GB SSD , TV
Wohnort: Dachsen
Kontaktdaten:

Beitrag von tft »

Hallo ...

und dann gleich nochetwas .... zum Thema Sound. IrrKlangPlaySound3D() gibt keinen Handler zurück.

Code: Alles auswählen

;
; -------------------------------------------------------------------------------
;
;   PureBasic - Irrlicht
;
;   Von 0 auf 100 (c) 2008 - TFT
;
;   IrrKlangTest
;
; -------------------------------------------------------------------------------
;
; Um die Schwierigkeiten mit Irrlicht zu umgehen. Werde ich mich nun an die 
; funktionierende Vorlage von Thalius halten. Auch wenn ich nicht nachvollziehen 
; kann warum das eine oder ander nicht functioniert. Die Parts ab 101 sind so 
; umgestalt das die Grundstruckture eingehalten wird.
;


;- Includes
XIncludeFile "Irr3DRequester_mod.pb"

;- Defines
; = System =
; Globals
Global Quit.l = #False
Global MouseX.l,MouseY.l,MouseSpeedX.l,MouseSpeedY.l
Global LeftMouseBottonHit.l,RigtMouseBottonHit.l,LeftMouseBottonDown.l,RigtMouseBottonDown.l
Global BottonHitLMB.l,BottonHitRMB.l

; Locals
*MyEvent = 0
x.f=0:y.f=0:z.f=0
irr_fps.l

;= IrrKlang =
Global *music_soundsource.l   = #Null          ; Pointer to a SoundSource
Global *fx_soundsource.l   = #Null             ; Pointer to a SoundEffectSource
Global *music_sound.l = #Null                  ; Pointer to a Sound
Global *fx_sound.l   = #Null                   ; Pointer to a SoundEffect
      
;= Irrlicht =
; Camera / Action
Global *camera.irr_camera
; Nodes
Global *cube.irr_node
; Textures
Global *CubeTexture.irr_texture
; Animator
Global *irb.irr_animator
; Media
Global *BitmapFont

;- Functions
Procedure InitScene()
  
  ;- Init Camera
  *camera = IrrAddCamera(0,0,0,0,0,1)
  If *camera
    IrrSetCameraClipDistance(*camera,100) ; We set this to 10 to save some extra cpu, since our Scene is very small
    IrrSetCameraNearValue(*camera,0.1)
  Else 
    ProcedureReturn #False
  EndIf
  
  ;- Get Media
  *BitmapFont = IrrGetFont( "bitmapfont.bmp" )
  If Not *BitmapFont 
    ProcedureReturn #False
  EndIf
  
  ;- Create Cube
  *cube=IrrAddCubeSceneNode(2)
  If Not *cube 
    ProcedureReturn #False
  EndIf
  
  *CubeTexture = IrrGetTexture( "test.bmp" )
  If Not *CubeTexture 
    ProcedureReturn #False
  EndIf 
  
  IrrSetNodePosition(*cube,0,0,0)
  IrrSetNodeMaterialFlag( *cube, #IRR_EMF_LIGHTING, #IRR_Off )
  IrrSetNodeMaterialTexture( *cube, *CubeTexture, 0 )
  IrrSetNodeMaterialFlag( *cube, #IRR_EMF_BACK_FACE_CULLING, #IRR_OFF) 
  IrrSetNodeMaterialType( *cube, #IRR_EMT_TRANSPARENT_ADD_COLOR)

  *irb.irr_animator = IrrAddFlyCircleAnimator(*cube, 0,0,0,10,0.001)   
  
  ;- Load Sound
  
  *fx_soundsource = IrrKlangAddSound("explosion.wav")
  If Not *fx_soundsource 
    ProcedureReturn #False
  EndIf 
  ;IrrKlangSSSetDefaultMaxDistance(*fx_soundsource,40.0)
  ;- 
  ProcedureReturn #True  ; Everything's fine !
   
EndProcedure
ProcedureC _My_Events(*event.SEvent)
  Protected key.l,mouse.l
  
  If *event\EventType = #IRR_EET_KEY_INPUT_EVENT         
 
    key.l = *event\KeyEvent\key
    
    Select key
      Case #IRR_KEY_ESCAPE  ; -> Escape Quits
        If *event\KeyEvent\PressedDown
          If Quit.l = #False
            Quit.l = #True  
          EndIf
        EndIf
      Case #IRR_KEY_F12
        If *event\KeyEvent\PressedDown    
            IrrStop()
            If Irr3DRequester(#IRR3DREQ_REQUESTER)
              IrrSetWindowCaption("PureBasic - Irrlicht > Von 0 auf 100 (c) 2008 - TFT")
              If InitScene()
                *MyEvent = IrrCreateEventReceiver(@_My_Events())
                IrrSetEventReceiver(*MyEvent)
              Else
                MessageRequester("ERROR!","Unable to inizialise Scene")
                If Quit.l = #False
                  Quit.l = #True  
                EndIf
              EndIf
            Else
              MessageRequester("ERROR!","Unable to open Irr3DRequester .")
              If Quit.l = #False
                Quit.l = #True  
              EndIf
            EndIf
         EndIf    
    EndSelect
  
  ElseIf *event\EventType = #IRR_EET_MOUSE_INPUT_EVENT
    
    mouse.l = *event\MouseEvent\event
    
    Select mouse
      Case #IRR_EMIE_LMOUSE_PRESSED_DOWN 
        LeftMouseBottonDown.l=1
      Case #IRR_EMIE_RMOUSE_PRESSED_DOWN 
        RigtMouseBottonDown.l=1
      Case #IRR_EMIE_MMOUSE_PRESSED_DOWN 
      Case #IRR_EMIE_LMOUSE_LEFT_UP 
        LeftMouseBottonDown.l=0
      Case #IRR_EMIE_RMOUSE_LEFT_UP 
        RigtMouseBottonDown.l=0
      Case #IRR_EMIE_MMOUSE_LEFT_UP
      Case #IRR_EMIE_MOUSE_MOVED
        MouseSpeedX.l=MouseX.l-*event\MouseEvent\x
        MouseSpeedY.l=MouseY.l-*event\MouseEvent\y
        MouseX.l = *event\MouseEvent\x
        MouseY.l = *event\MouseEvent\y
      Case #IRR_EMIE_MOUSE_WHEEL
    EndSelect
    
  EndIf     
  
  ProcedureReturn #False
EndProcedure
Procedure BottonHitControll()

  LeftMouseBottonHit=0
  If LeftMouseBottonDown.l=1 And BottonHitLMB=0 
    BottonHitLMB=1
    LeftMouseBottonHit=1
  ElseIf LeftMouseBottonDown.l=0
    BottonHitLMB=0
  EndIf
  
  RigtMouseBottonHit=0
  If RigtMouseBottonDown.l=1 And BottonHitRMB=0 
    BottonHitRMB=1
    RigtMouseBottonHit=1
  ElseIf RigtMouseBottonDown.l=0
    BottonHitRMB=0
  EndIf
  
EndProcedure

If Irr3DRequester(#IRR3DREQ_SKIP)
  IrrSetWindowCaption("PureBasic - Irrlicht > Von 0 auf 100 (c) 2008 - TFT")
  If IrrKlangStart()
    If InitScene()
      
      *MyEvent = IrrCreateEventReceiver(@_My_Events())
      IrrSetEventReceiver(*MyEvent)
      
      posOnCircle.f = 0;
      radius.f = 5;
      ;- Mainloop
      While IrrRunning() And Quit = #False
        
        BottonHitControll()
 
        IrrGetNodePosition(*cube,@x.f,@y.f,@z.f)
            
          ; After We know the positions, We need To let irrKlang know about the
          ; listener position (always position (0,0,0), facing forward in This example)
          ; And let irrKlang know about our calculated 3D music Position
            
        IrrKlangListenerPosition(0,0,0,  0,0,1,  0,0,0,  0,0,0)
          
        If LeftMouseBottonHit=1 
          *fx_sound.l=IrrKlangPlay3D(*fx_soundsource, x.f,y.f,z.f , #False, #False, #False)
          If *fx_sound <> #Null
            Debug "PlaySouns"
            IrrKlangSoundSetMinDistance(*fx_sound, 0.1)
            IrrKlangSoundSetMaxDistance(*fx_sound, 50)
          Else
            Debug "IrrKlangPlay3D() Return 0"
          EndIf  
        EndIf
            
        irr_fps.l=IrrGetFPS()
        
        IrrBeginScene(0, 0, 55 )  
        IrrDrawScene()
        Irr2DFontDraw ( *BitmapFont,"Position = "+Str(irr_fps.l),4,4,0,0)
        IrrEndScene()
  
        Delay(10)
        
      Wend
      
    Else
      MessageRequester("ERROR!","Unable to inizialise Scene .")
    EndIf
  Else
    MessageRequester("ERROR!","Unable to inizialise IrrKlang .")
  EndIf
  
EndIf

IrrStop()

End
TFT seid 1989 , Turgut Frank Temucin , CH-Dachsen/DE-Berlin/TR-Antalya
Mein Projekt (Driving School Evergarden)
Codes bei (GitHub) Videos von (YouTube)
Treffen via Discord: Einladung

PB 6.10 | W11 | i7 12700F | 32 GB Ram | RTX 3060 Ti | 60 Herz -TV FullHD
ARDUINO Freak | Sprecher | Game Dev. | Geschichten Erzähler :-)
Benutzeravatar
Thalius
Beiträge: 476
Registriert: 17.02.2005 16:17
Wohnort: Basel / Schweiz

Beitrag von Thalius »

tft hat geschrieben:Hallo ...

Um mein Tut weiterzubringen wollte ich etwas Sound hinzufügen.
Aber nun habe ich erhebliche Schwierigkeit. Und ich fürchte das liegt an meinem MultiCore. Folgender Simpler Code geht garnicht.


Eigentlich sollte er nur auf einen Tastendruck warten. Aber das ganze schmiert einfach total ab.
Ganz einfach du überprüfst nicht ob Irrlicht läuft bevor du versuchst einen Event abzufragen - des geht natürlich ned... ;)

Hier die kommentierte, korrigierte Version die tut was man ihr sagt :)

Code: Alles auswählen

XIncludeFile #PB_Compiler_Home + "Includes\IrrlichtWrapper_Include.pbi"

Define *KeyEvent.irr_key_event

; IrrStartEx:                                               *------ FLAG to TRUE - Capture Events. 
; This flags Event processing on and off - if #False no events will be processed and therefor 
; No keyevent is cast - This allows the programmer the Freedom to save some extra cpu time again
; when no events are needed.
If IrrStartEx(#IRR_EDT_DIRECT3D9,200, 200,#False, #False,#True, 32, #True, #False,#False,#Null)
  
  ; While Irrlicht is running...
  While IrrRunning() And Quit = #False
    
    ; clear the canvas to dark blue
    IrrBeginScene(0, 0, 55 ) 
    IrrDrawScene() ; draw the scene
    ; draw the Graphical User Interface on top of the scene ( if there is one ;)
    ; IrrDrawGUI()
    ; end drawing the scene/flip and display it
    IrrEndScene() 
    
    ; we check if a key event is available for the next frame ...
    If IrrKeyEventAvailable()
      *KeyEvent = IrrReadKeyEvent()
        ; ...and if teh button is held down ...
      If *KeyEvent\direction = #IRR_KEY_DOWN
        ; arbitrate the key...
        Select *KeyEvent\key
          Case #IRR_KEY_ESCAPE
            MessageRequester("Yatta!","Escape has been pressed! i will now cleanup.")
            Quit = #True
        EndSelect
      EndIf 
      
    EndIf
    
    
    
    Delay(100) ; delay 100 whoa this is alot !
    
    
  Wend
  ; Stop Irrlicht Enviroment and free Ressources.
  IrrStop()
  
EndIf
 
End    
Ausserdem wenn du irrstartEX benutzt und events brauchst - siehe code musst du Capture Events auf true setzen.

Thalius
"...smoking hash-tables until until you run out of memory." :P
Benutzeravatar
Thalius
Beiträge: 476
Registriert: 17.02.2005 16:17
Wohnort: Basel / Schweiz

Beitrag von Thalius »

tft hat geschrieben:Hallo ...

und dann gleich nochetwas .... zum Thema Sound. IrrKlangPlaySound3D() gibt keinen Handler zurück.

EDIT: Track'ing auf #True setzen damit man handle erhält. Ansonsten wird keine Rückgabe gemacht und CPU zeit gespart.

Hier korriegiert, kommentiert:

Code: Alles auswählen

;
; -------------------------------------------------------------------------------
;
;   PureBasic - Irrlicht
;
;   Von 0 auf 100 (c) 2008 - TFT
;
;   IrrKlangTest
;
; -------------------------------------------------------------------------------
;
; Um die Schwierigkeiten mit Irrlicht zu umgehen. Werde ich mich nun an die
; funktionierende Vorlage von Thalius halten. Auch wenn ich nicht nachvollziehen
; kann warum das eine oder ander nicht functioniert. Die Parts ab 101 sind so
; umgestalt das die Grundstruckture eingehalten wird.
;


;- Includes
XIncludeFile "Irr3DRequester.pb"

;- Defines
; = System =
; Globals
Global Quit.l = #False
Global MouseX.l,MouseY.l,MouseSpeedX.l,MouseSpeedY.l
Global LeftMouseBottonHit.l,RigtMouseBottonHit.l,LeftMouseBottonDown.l,RigtMouseBottonDown.l
Global BottonHitLMB.l,BottonHitRMB.l

; Locals
*MyEvent = 0
x.f=0:y.f=0:z.f=0
irr_fps.l

;= IrrKlang =
Global *music_soundsource.l   = #Null          ; Pointer to a SoundSource
Global *fx_soundsource.l   = #Null             ; Pointer to a SoundEffectSource
Global *music_sound.l = #Null                  ; Pointer to a Sound
Global *fx_sound.l   = #Null                   ; Pointer to a SoundEffect
     
;= Irrlicht =
; Camera / Action
Global *camera.irr_camera
; Nodes
Global *cube.irr_node
; Textures
Global *CubeTexture.irr_texture
; Animator
Global *irb.irr_animator
; Media
Global *BitmapFont

;- Functions
Procedure InitScene()
  
  ;- Init Camera
  *camera = IrrAddCamera(0,0,0,0,0,1)
  If *camera
    IrrSetCameraClipDistance(*camera,100) ; We set this to 10 to save some extra cpu, since our Scene is very small
    IrrSetCameraNearValue(*camera,0.1)
  Else
    ProcedureReturn #False
  EndIf
  
  ;- Get Media
  *BitmapFont = IrrGetFont( "media/bitmapfont.bmp" )
  If Not *BitmapFont
    ProcedureReturn #False
  EndIf
  
  ;- Create Cube
  *cube=IrrAddCubeSceneNode(2)
  If Not *cube
    ProcedureReturn #False
  EndIf
  
  *CubeTexture = IrrGetTexture( "media/fire.bmp" )
  If Not *CubeTexture
    ProcedureReturn #False
  EndIf
  
  IrrSetNodePosition(*cube,0,0,0)
  IrrSetNodeMaterialFlag( *cube, #IRR_EMF_LIGHTING, #IRR_OFF )
  IrrSetNodeMaterialTexture( *cube, *CubeTexture, 0 )
  IrrSetNodeMaterialFlag( *cube, #IRR_EMF_BACK_FACE_CULLING, #IRR_OFF)
  IrrSetNodeMaterialType( *cube, #IRR_EMT_TRANSPARENT_ADD_COLOR)
  
  *irb = IrrAddFlyCircleAnimator(*cube, 0,0,0,10,0.001)   
  
  ;- Load Sound
  
  *fx_soundsource = IrrKlangAddSound("media/explosion.wav")
  
  
  If Not *fx_soundsource And *mx_soundsource
    ProcedureReturn #False
  EndIf
  ;IrrKlangSSSetDefaultMaxDistance(*fx_soundsource,40.0)
  
  ;-
  ProcedureReturn #True  ; Everything's fine !
  
EndProcedure
ProcedureC _My_Events(*event.SEvent)
  Protected key.l,mouse.l
  
  If *event\EventType = #IRR_EET_KEY_INPUT_EVENT         
    
    key.l = *event\KeyEvent\key
    
    Select key
      Case #IRR_KEY_ESCAPE  ; -> Escape Quits
        If *event\KeyEvent\PressedDown
          If Quit.l = #False
            Quit.l = #True 
          EndIf
        EndIf
      Case #IRR_KEY_F12
        If *event\KeyEvent\PressedDown   
          ; PLease recheck this - you try to STOP Irrlicht here then reuse its functions 
          ; See Console Window for error and crash at end. 
          ;
          ; Sidenote: a Eventreceiver has to be created ocne - as every ressource in irrlicht 
          ; It is cashed and doesent need to be loaded again until you free it.
          ;
          ; This allows fast levelchanges or dynamic model switching without killing your io or harddrive.
          ;
          ; So effectively Irrlicht does NOT need a restart everytime the scene changes. In
          ; fact it is alot more efficient to just reset the scene.
          
          ; *uncommented evil code*
          ; IrrStop() 
          ; If Irr3DRequester()
            ; IrrSetWindowCaption("PureBasic - Irrlicht > Von 0 auf 100 (c) 2008 - TFT")
            ; If InitScene()
              ; *MyEvent = IrrCreateEventReceiver(@_My_Events())
              ; IrrSetEventReceiver(*MyEvent)
            ; Else
              ; MessageRequester("ERROR!","Unable to inizialise Scene")
              ; If Quit.l = #False
                ; Quit.l = #True 
              ; EndIf
            ; EndIf
          ; Else
            ; MessageRequester("ERROR!","Unable to open Irr3DRequester .")
            ; If Quit.l = #False
              ; Quit.l = #True 
            ; EndIf
          ; EndIf
          
        ; *end uncomment*
          ; Stop animator
          IrrRemoveAnimator(*cube, *irb) 
          ; Reset Scene
          IrrSetNodePosition(*cube,0,0,0)
          ; and start animator again... uncommented you clearly hear the soudn coming from around you as the box
          ; is inside our listener ( or surrounds it )
          ;*irb = IrrAddFlyCircleAnimator(*cube, 0,0,0,10,0.001)    <-- uncomment me
        EndIf 
    EndSelect
    
  ElseIf *event\EventType = #IRR_EET_MOUSE_INPUT_EVENT
    
    mouse.l = *event\MouseEvent\event
    
    Select mouse
      Case #IRR_EMIE_LMOUSE_PRESSED_DOWN
        LeftMouseBottonDown.l=1
      Case #IRR_EMIE_RMOUSE_PRESSED_DOWN
        RigtMouseBottonDown.l=1
      Case #IRR_EMIE_MMOUSE_PRESSED_DOWN
      Case #IRR_EMIE_LMOUSE_LEFT_UP
        LeftMouseBottonDown.l=0
      Case #IRR_EMIE_RMOUSE_LEFT_UP
        RigtMouseBottonDown.l=0
      Case #IRR_EMIE_MMOUSE_LEFT_UP
      Case #IRR_EMIE_MOUSE_MOVED
        MouseSpeedX.l=MouseX.l-*event\MouseEvent\x
        MouseSpeedY.l=MouseY.l-*event\MouseEvent\y
        MouseX.l = *event\MouseEvent\x
        MouseY.l = *event\MouseEvent\y
      Case #IRR_EMIE_MOUSE_WHEEL
    EndSelect
    
  EndIf     
  
  ProcedureReturn #False
EndProcedure
Procedure BottonHitControll()
  
  LeftMouseBottonHit=0
  If LeftMouseBottonDown.l=1 And BottonHitLMB=0
    BottonHitLMB=1
    LeftMouseBottonHit=1
  ElseIf LeftMouseBottonDown.l=0
    BottonHitLMB=0
  EndIf
  
  RigtMouseBottonHit=0
  If RigtMouseBottonDown.l=1 And BottonHitRMB=0
    BottonHitRMB=1
    RigtMouseBottonHit=1
  ElseIf RigtMouseBottonDown.l=0
    BottonHitRMB=0
  EndIf
  
EndProcedure

If Irr3DRequester()
  IrrSetWindowCaption("PureBasic - Irrlicht > Von 0 auf 100 (c) 2008 - TFT")
  If IrrKlangStart()
    If InitScene()
      
      *MyEvent = IrrCreateEventReceiver(@_My_Events())
      IrrSetEventReceiver(*MyEvent)
      
      posOnCircle.f = 0;
      radius.f = 5;
      ;- Mainloop
      While IrrRunning() And Quit = #False
        
        BottonHitControll()
        
        IrrGetNodePosition(*cube,@x.f,@y.f,@z.f)
        
        ; After We know the positions, We need To let irrKlang know about the
        ; listener position (always position (0,0,0), facing forward in This example)
        ; And let irrKlang know about our calculated 3D music Position
        
        IrrKlangListenerPosition(0,0,0,  0,0,1,  0,0,0,  0,0,0)
        
        If LeftMouseBottonHit=1
          ; Play functions have no return value as they only play ;)
          IrrKlangPlay3D(*fx_soundsource, x.f,y.f,z.f , #False, #False, #False)
          
        EndIf
        
        irr_fps.l=IrrGetFPS()
        
        IrrBeginScene(0, 0, 55 ) 
        IrrDrawScene()
        Irr2DFontDraw ( *BitmapFont,"Position = "+Str(irr_fps.l),4,4,0,0)
        IrrEndScene()
        
        Delay(1)
        
      Wend
      
    Else
      MessageRequester("ERROR!","Unable to inizialise Scene .")
    EndIf
  Else
    MessageRequester("ERROR!","Unable to inizialise IrrKlang .")
  EndIf
  
EndIf
IrrKlangStop() ; clenaup irrklang
IrrStop() ; clenaup irrlicht

End 
Hat imemrnoch paar denkfehler aber langsam denke ich hast dus. :)

Thalius
Zuletzt geändert von Thalius am 08.01.2008 02:17, insgesamt 1-mal geändert.
"...smoking hash-tables until until you run out of memory." :P
Benutzeravatar
Thalius
Beiträge: 476
Registriert: 17.02.2005 16:17
Wohnort: Basel / Schweiz

Beitrag von Thalius »

Rings hat geschrieben: Kurze Frage dazu:
1)Bisher habe ich meistens fast auschliesslich PB-Befehle genutzt und möchte die Plattformunabhängigkeit evtl. waren.Wie weit ist denn denn plattformübergreifend der wrapper gediegen ?
(OpenGL wird wohl überall funktionieren)
Derzeit sind mal alle Grundfunktionen unter Linux lauffähig ( 1.05 ) An den extras nage ich noch. :) Mike baut derzeit 1.06 schon mit makefiles zusammen also sollte ne Linux/mac compile dann kein prob mehr sein.

Manual ist zu 90% fertig ( Newton , Stlt und paar Kleinigkeiten fehlen noch )
2)Das projekt worum es sich bei mir dreht ist in einer früheren version auch
hier downloadbar .
Oft hab ich einfach nur einfach bewegte objekte (buttons).Kann man sowas einfach als objekt (Mesh) erstellen und benutzen ?
(Also drehen, zoomen, transparent einstellen ).Bisher mache ich das über Sprite3D.
Also - hab ich noch nicht getestet aber Irrlicht sowie des neue PB DX9 sollten kompatibel sein ( Sprich du kannst PB Spites ( anstatt irrlicht Sprites ) direkt über Irrlicht Szenen rendern lassen ( DirectX only ). Dazu musst du ihm den hook mitgeben ( hat glaub ne funktion in der Include lib - hierzu sind noch beispiele geplant ) - auch die movie funktionen sollten dadurch funktionieren. Als 2 methode wäre direkt zb ffmpg anzusprechen und auf eine Textur zu rendern ( das ganze dann zb auf nem 3D objekt darzustellen ;)

Mehr Sprite und Partikelfunktionen folgen ebenfalls sowie funktionen für direkte Bild/Texturmanipulation - Imo geht das nur über PB ( Irr2PBImage() ).
3). Kann man andere fremde Fenster (allerdings selber erstellt) einblenden ? (siehe TV-Abschnitt)
In einem Windowed Screen sollte das gehen. Irrlicht lässt sich in jedes Gadget "inkorporieren" ( Siehe Beispiel 24 ). Evtl. kommt später noch ein 3D HTML Renderer rein in dem sich webseiten dann perspektivisch im raum anzeigen lassen ( auf surfaces ) ... :) Aber dazu später.
4)Da 3d, und irrlicht selbst für mich noch etwas ungewohnt ist, wo findet man die beste Doku ? Ich möchte gerne erfahren was die Irrklang kann, inwieweit GUI-Elemente implementiert sind.
GUI und Imagegui sind drin wobei in der Version auf purearea net ist da noch ein kleiner bug im imagui ( eigentlich in der header definition dessen ). Aber ich schick dir auf wunsch n fix ( das noch n bissl gehen wir dbis ich heir durch bin ). Eine einfache doku ist dabei ( die komplette ist bald feddich .. endlich .. ). Falls du hartgesotten bist und was in der momentanen docu ned findest:
http://irrlicht.sourceforge.net/docu/

Irrklang features:
http://www.ambiera.com/irrklang/index.html

aktuell ist version 1.0 bei uns drinne aber ne neue zu kompiliern sollte keine hexerei sein.

Ansonsten schiess los wenn Fragen hast ;) Ah und wenn irgendwas unklar ist der source code ( C++ ) ist dabei - sprich manchmal die nase da rein stecken hilft klarheit . :)
Auch das include file solltest du dir vorher mal genau ansehen :) Hat da auch ein paar nützliche helper funktionen :)
5) Ich bin einfach begeistert über soviel gute Arbeit.
Danke! Aber ist noch bissl entfernt von Komplett - aber bin fast durch. Werds auch Mike ausrichten , der freut sich sicher über etwas Motivation :) Der arme war krank über Weihnacht/Neujahr. :(


Grüssle, Thalius :D
"...smoking hash-tables until until you run out of memory." :P
Benutzeravatar
Thalius
Beiträge: 476
Registriert: 17.02.2005 16:17
Wohnort: Basel / Schweiz

Beitrag von Thalius »

Nachtrag, Hier eine komplettere Version des autocomplete udn command index für jaPBe:

http://www.anwesend.ch/meckardt/irrlich ... rapper.txt

Einfach ins jaPBe/Definitions/ hauen - jaPBe neustarten udn voila.

Thalius
"...smoking hash-tables until until you run out of memory." :P
Antworten