;
; ------------------------------------------------------------
;
; PureBasic - Sound3D
;
; (c) Fantaisie Software
;
; ------------------------------------------------------------
;
; ; Инициализация трехмерного мира
InitEngine3D()
InitSprite()
InitKeyboard()
InitMouse()
Add3DArchive(#PB_Compiler_Home+"Examples/3D/Data", #PB_3DArchive_FileSystem)
Add3DArchive(#PB_Compiler_Home+"Examples/3D/Data/Packs/skybox.zip", #PB_3DArchive_Zip)
Add3DArchive(#PB_Compiler_Home+"Examples/3D/Data/Textures", #PB_3DArchive_FileSystem)
; Откроем окно
OpenWindow(0,0,0,1000,1000,"Звук меняется в зависимости от положения планеты",#PB_Window_ScreenCentered|#PB_Window_SystemMenu)
OpenWindowedScreen(WindowID(0),0,0,1000,1000,1,0,0)
;Создание трехмерного мира
SkyBox("stevecube.jpg");
cam=CreateCamera(#PB_Any, 0, 0, 100, 100)
planete=CreateSphere(#PB_Any, 10)
tex_planete=LoadTexture(#PB_Any, "clouds.jpg")
material=CreateMaterial(#PB_Any,TextureID(tex_planete))
planeteE=CreateEntity(#PB_Any,MeshID(planete),MaterialID(material))
; Загрузка файла Sonav WAV или Ogg, который должен быть моно
son3D= LoadSound3D(#PB_Any,"Roar.ogg",#PB_Sound3D_Streaming)
SoundVolume3D(son3D, 20) ; Громкость звука в 20%
SoundRange3D(son3D, 1, 100) ; Звуковая зона
SoundCone3D(son3D, 90, 360, 20) ; Опционально, звуковой конус
; Звук воспроизводится повторно
PlaySound3D(son3D, #PB_Sound3D_Loop)
; Слушатель движется с камерой
SoundListenerLocate(CameraX(cam),CameraY(cam),CameraZ(cam))
; Звук и планета связаны,
; поэтому, если пользователь перемещает планету, звук движется вместе с ней.
noeud=CreateNode(#PB_Any, 0, 0, -75)
AttachNodeObject(noeud, SoundID3D(son3D))
AttachNodeObject(noeud, EntityID(planeteE))
; Управление окнами, клавиатурой и мышью
Repeat
Repeat
Event = WindowEvent()
Select Event
Case #PB_Event_CloseWindow
End
EndSelect
Until Event = 0
ExamineKeyboard()
ExamineMouse()
If MouseDeltaX()>0
MoveNode(noeud,0.5,0,0)
ElseIf MouseDeltaX()<0
MoveNode(noeud,-0.5,0,0)
EndIf
If MouseDeltaY()>0
MoveNode(noeud,0,-0.5,0)
ElseIf MouseDeltaY()<0
MoveNode(noeud,0,0.5,0)
EndIf
If MouseButton(#PB_MouseButton_Left) <>0
End
EndIf
If MouseButton( #PB_MouseButton_Right) <>0
MoveNode(noeud,0,0,-75,#PB_Absolute)
EndIf
If KeyboardPushed(#PB_Key_Escape)
quitter + 1
EndIf
RotateNode(noeud,0.3,0.4,0.5,#PB_Relative)
If KeyboardPushed(#PB_Key_Right)
MoveNode(noeud,0.5,0,0)
EndIf
If KeyboardPushed(#PB_Key_Left)
MoveNode(noeud,-0.5,0,0)
EndIf
If KeyboardPushed(#PB_Key_Up)
MoveNode(noeud,0,0.5,0)
EndIf
If KeyboardPushed(#PB_Key_Down)
MoveNode(noeud,0,-0.5,0)
EndIf
tiks = MouseWheel()
If tiks > 0
MoveNode(noeud,0,0,5)
EndIf
If tiks < 0
MoveNode(noeud,0,0,-5)
EndIf
; Отображение сцены
StartDrawing(WindowOutput(0))
DrawText(0,5,"X=" + Str(NodeX(noeud)) + " Y=" + Str(NodeY(noeud)) + " Z="+Str(NodeZ(noeud)))
DrawText(0,30,"Мышь или клавиатура: вверх, вниз, вправо, влево и колесо мыши")
DrawText(0,60,".: Esc или левый клик для выхода :.")
StopDrawing()
RenderWorld()
FlipBuffers()
Until quitter
End