SoundRange3D() : La caméra à des oreilles
Publié : mer. 28/janv./2015 15:00
Le 10 Janvier j'ai signalé un bug avec la fonction SoundRange3D() sur le forum anglais. En fait c'est de ma faute.
Quand on utilise la fonction SoundRange3D(), on doit aussi utiliser la fonction SoundListenerLocate(x, y, z).
x = CameraX(#camera)
y = CameraY(#camera)
z = CameraZ(#camera)
Un code (Testé sous Windows 7 et Windows 8.1) qui vous montre comment tout cela fonctionne. Dirigez vous avec les flèches en direction de la sphère rouge ou bleu.■ Si ça ne fonctionne pas sous Window 8 ou Windows 8.1
- Commenter la ligne 46
- Ou configurer les options de compilation avec le sous system OpenGL.
Quand on utilise la fonction SoundRange3D(), on doit aussi utiliser la fonction SoundListenerLocate(x, y, z).
x = CameraX(#camera)
y = CameraY(#camera)
z = CameraZ(#camera)
Un code (Testé sous Windows 7 et Windows 8.1) qui vous montre comment tout cela fonctionne. Dirigez vous avec les flèches en direction de la sphère rouge ou bleu.
Code : Tout sélectionner
Enumeration Window
#Mainform
EndEnumeration
Enumeration D3
#camera
#player
#material
#ground
#nodeRed
#nodeBlue
#soundRed
#soundBlue
#LandMarkRed
#LandMarkBlue
#Panel
EndEnumeration
Global PlayerSpeed.f = 0.2
InitEngine3D()
InitKeyboard()
InitSprite()
InitMouse()
ExamineDesktops()
OpenWindow(#Mainform,0, 0, 800, 600, "", #PB_Window_SystemMenu)
OpenWindowedScreen(WindowID(#Mainform), 0, 0, 800, 600, 0, 0, 0)
Add3DArchive(#PB_Compiler_Home + "Examples/3D/Data", #PB_3DArchive_FileSystem)
Add3DArchive(#PB_Compiler_Home + "Examples/3D/Data/Textures", #PB_3DArchive_FileSystem)
Add3DArchive(#PB_Compiler_Home + "Examples/3D/Data/Scripts", #PB_3DArchive_FileSystem)
Parse3DScripts()
KeyboardMode(#PB_Keyboard_International)
;Light & Shadow
CreateLight(#PB_Any,RGB(255, 255, 255), -4, 100, -50)
WorldShadows(#PB_Shadow_Additive, 30, RGB(250, 235, 215)) ;Comment if Windows 8
;Camera
CreateCamera(#camera ,0, 0, 100, 100)
CameraBackColor(#camera, RGB(145, 182, 201))
MoveCamera(#camera, 2, 5, 15, #PB_Absolute)
CameraLookAt(#camera, 0,0,0)
;Ground
GetScriptMaterial(#material, "Color/Yellow")
CreateEntity(#ground, MeshID(CreatePlane(#PB_Any, 100, 100, 1, 1, 1, 1)), MaterialID(#material))
;Red sound (Node, Sound, Red LandMark)
CreateNode(#nodeRed, 20, 1, 30)
LoadSound3D(#soundRed, "Roar.ogg")
GetScriptMaterial(#material,"Color/Red")
CreateEntity(#LandMarkRed, MeshID(CreateSphere(#PB_Any, 1)), MaterialID(#material))
AttachNodeObject(#nodeRed, SoundID3D(#soundRed))
AttachNodeObject(#nodeRed, EntityID(#LandMarkRed))
SoundRange3D(#soundRed, 0, 30)
PlaySound3D(#soundRed, #PB_Sound3D_Loop)
;Blue sound (Node, Sound, Red LandMark)
CreateNode(#nodeBlue, -20, 1, 30)
LoadSound3D(#soundBlue, "Siren.ogg")
GetScriptMaterial(#material,"Color/Blue")
CreateEntity(#LandMarkBlue, MeshID(CreateSphere(#PB_Any, 1)), MaterialID(#material))
AttachNodeObject(#nodeBlue, SoundID3D(#soundBlue))
AttachNodeObject(#nodeBlue, EntityID(#LandMarkBlue))
SoundRange3D(#soundBlue, 0, 30)
PlaySound3D(#soundBlue, #PB_Sound3D_Loop)
;Player
CreateEntity(#player, MeshID(CreateCube(#PB_Any, 1)), #PB_Material_None, 0, 1, -10)
HideEntity(#player, #True)
Repeat ;Event 3D Loop
Repeat ;Event Window Loop
Event = WindowEvent()
Select Event
Case #PB_Event_CloseWindow
End
EndSelect
Until Event = 0
If ExamineKeyboard()
If KeyboardPushed (#PB_Key_Escape)
End
EndIf
;Move Up or Down
If KeyboardPushed (#PB_Key_Up)
MoveEntity(#player, 0, 0, PlayerSpeed, #PB_Absolute|#PB_Local)
ElseIf KeyboardPushed (#PB_Key_Down)
MoveEntity(#player, 0, 0, -PlayerSpeed, #PB_Absolute|#PB_Local)
EndIf
;Rotate Left or Right
If KeyboardPushed (#PB_Key_Left)
RotateEntity(#player, 0, 1.5, 0, #PB_Relative)
ElseIf KeyboardPushed (#PB_Key_Right)
RotateEntity(#player, 0, -1.5, 0, #PB_Relative)
EndIf
EndIf
CameraFollow(#camera, EntityID(#player), 180, 1, 1, 0.2, 0.2)
;IMPORTANT The ear follows the camera (Les oreilles suivent la caméra)
SoundListenerLocate(CameraX(#camera), CameraY(#camera), CameraZ(#camera))
RenderWorld(30)
;-Control Panel
CreateSprite(#Panel, 800, 40)
StartDrawing(SpriteOutput(#Panel))
Box(0,0, 800, 40, RGBA(178, 34, 34, 20))
DrawingMode(#PB_2DDrawing_Transparent)
DrawText(5,2,"FPS: "+ Str(Engine3DStatus(#PB_Engine3D_CurrentFPS)) +
" Min: " + Str(Engine3DStatus(#PB_Engine3D_MinimumFPS)) +
" Max: " + Str(Engine3DStatus(#PB_Engine3D_MaximumFPS)))
DrawText(200, 2, "(" + Str(EntityX(#player)) + ", " + Str(EntityY(#Player)) + ", " + Str(EntityZ(#Player)) + ")")
StopDrawing()
DisplaySprite(#Panel, 0, 0)
FlipBuffers()
ForEver
- Commenter la ligne 46
Code : Tout sélectionner
WorldShadows(#PB_Shadow_Additive, 30, RGB(250, 235, 215))