Depending on your bandwidth...Please be patience.
Edit:
If you get an error downloading the assets - download the assets here:
https://www.dropbox.com/s/fhtp4xr5o5levbt/data.zip?dl=0
and use the second code:
Code: Select all
DeclareModule Globe
UseJPEGImageDecoder()
Enumeration Initialize
#globe_InitEngine_Error
#Globe_InitSprite_Error
#Globe_InitKeyboard_Error
#Globe_InitNetwork_Error
#Globe_InitSound_Error
#Globe_Init_Success
EndEnumeration
Declare.i Init()
Declare.i Setup()
EndDeclareModule
Module Globe
Structure BaseVars
w.i
h.i
win.i
scr.i
ev.i
snd.i
path.s
cam.i
lgt.i
fn.i
EndStructure
Global v.BaseVars, th.i
Global DoingNow.s = "", DwlAssets.i = #True
Declare.i Run()
Declare.i DownloadAssetsAndPrepare()
Declare.i Lines(*Image)
Declare.i Screen(value.i)
Procedure.i Init()
If InitNetwork() = 0
ProcedureReturn #Globe_InitNetwork_Error
EndIf
If InitEngine3D(#PB_Engine3D_DebugLog) = 0
ProcedureReturn #globe_InitEngine_Error
EndIf
If InitSprite() = 0
ProcedureReturn #Globe_InitSprite_Error
EndIf
If InitKeyboard() = 0
ProcedureReturn #Globe_InitKeyboard_Error
EndIf
If InitMovie() = 0
v\snd = #False
Else
v\snd = #True
EndIf
ProcedureReturn #Globe_Init_Success
EndProcedure
Procedure.i Setup()
ExamineDesktops()
v\w = DesktopWidth(0) : v\h = DesktopHeight(0)
v\win = OpenWindow(#PB_Any, 0, 0, DesktopWidth(0), DesktopHeight(0), "Globe", #PB_Window_BorderLess)
v\scr = OpenWindowedScreen(WindowID(v\win), 0, 0, WindowWidth(v\win), WindowHeight(v\win))
v\cam = CreateCamera(#PB_Any, 0, 0, 100, 100)
MoveCamera(v\cam, 0, 0, 22)
v\lgt = CreateLight(#PB_Any, $00FF03, 0, 0, 4)
run()
EndProcedure
Procedure.i Screen(value.i)
Protected spr, ev
spr = CreateSprite(#PB_Any, v\w, v\h)
StartDrawing(SpriteOutput(spr))
Box(0, 0, OutputWidth(), OutputHeight(), $0)
DrawText(v\w/2 - TextWidth("DOWNLOADING ASSETS")/2, v\h/2 - TextHeight("H")/2, "DOWNLOADING ASSETS")
StopDrawing()
Repeat
RenderWorld()
DisplaySprite(spr, 0, 0)
FlipBuffers()
Delay(20)
Until DwlAssets = #False
EndProcedure
Procedure.i DownloadAssetsAndPrepare()
Protected ret.i, spr.i
DwlAssets = #True
th = CreateThread(@Screen(), #True)
v\path = GetTemporaryDirectory()
Add3DArchive(v\path, #PB_3DArchive_FileSystem)
ret = ReceiveHTTPFile("https://srv-file2.gofile.io/download/MMF7IU/earth_bw.jpg", v\path + "earth.jpg")
If ret = 0
MessageRequester("Download error", "Can't download earth.jpg")
End
EndIf
ret = ReceiveHTTPFile("https://srv-file2.gofile.io/download/XSQysm/PB.mesh", v\path + "pb.mesh")
If ret = 0
MessageRequester("Download error", "Can't download pb.mesh")
End
EndIf
ret = ReceiveHTTPFile("https://srv-file7.gofile.io/download/W7iXm7/pb.material", v\path + "pb.material")
If ret = 0
MessageRequester("Download error", "Can't download pb.material")
End
EndIf
If v\snd = #True
ret = ReceiveHTTPFile("http://static1.squarespace.com/static/59dcec2112abd985b7417cbd/t/5b9e316f21c67c4506125feb/1537094034349/3.+Nor%C3%B0ur+-+320bit.mp3/original/3.+Nor%C3%B0ur+-+320bit.mp3?download=true", v\path + "celtic.mp3")
EndIf
;MUSIC FROM INCOMPETECH.COM!! :-)
Parse3DScripts()
image.i = LoadImage(#PB_Any, v\path + "earth.jpg")
ret = Lines(image)
DwlAssets = #False
If ret = #True
CreateSphere(0, 2, 60, 60)
CreateTexture(0, ImageWidth(image), ImageHeight(image), "earth")
StartDrawing(TextureOutput(0))
DrawImage(ImageID(image), 0, 0)
StopDrawing()
CreateMaterial(0, TextureID(0))
MaterialBlendingMode(0, #PB_Material_Add)
AddMaterialLayer(0, TextureID(0), #PB_Material_Add)
MaterialFilteringMode(0, #PB_Material_Anisotropic, 8)
SetMaterialColor(0, #PB_Material_AmbientColor, $00FF03)
SetMaterialColor(0, #PB_Material_SelfIlluminationColor, $00FF03)
MaterialCullingMode(0, #PB_Material_NoCulling)
CreateEntity(0, MeshID(0), MaterialID(0), 0, 0, 13)
RotateEntity(0, 0, 23.44, 0, #PB_Absolute)
CreateIcoSphere(1, 2.6, 80)
CreateTexture(1, 512, 512, "Mat2")
StartDrawing(TextureOutput(1))
DrawingMode(#PB_2DDrawing_Outlined)
Box(0, 0, 512, 512, $00FF03)
StopDrawing()
CreateMaterial(1, TextureID(1))
MaterialBlendingMode(1, #PB_Material_Add)
AddMaterialLayer(1, TextureID(1), #PB_Material_Add)
MaterialCullingMode(1, #PB_Material_NoCulling)
ScaleMaterial(1, 0.2, 0.2, 0)
ScaleMaterial(1, 0.2, 0.2, 1)
ScrollMaterial(1, -0.1, 0, #PB_Material_Animated, 0)
ScrollMaterial(1, 0.1, 0, #PB_Material_Animated, 1)
MaterialFilteringMode(1, #PB_Material_Anisotropic, 8)
CreateEntity(1, MeshID(1), MaterialID(1), 0, 0, 13)
LoadMesh(2, "pb.mesh")
GetScriptMaterial(2, "Green")
CreateEntity(2, MeshID(2), #PB_Material_None, 0, 7, 0)
RotateEntity(2, 90, 0, 0)
CreateParticleEmitter(3, 100, 100, 100, #PB_Particle_Box, 0, 0, -50)
CreateTexture(3, 128, 128, "Particle")
StartDrawing(TextureOutput(3))
DrawingMode(#PB_2DDrawing_Gradient)
FrontColor($0) : BackColor($00FF03)
CircularGradient(64, 64, 54)
Circle(64, 64, 54)
GradientColor(0.2,$00FF03)
StopDrawing()
CreateMaterial(3, TextureID(3))
MaterialBlendingMode(3, #PB_Material_Add)
AddMaterialLayer(3, TextureID(3), #PB_Material_Add)
ParticleMaterial(3, MaterialID(3))
ParticleSize(3, 0.1, 0.1)
ParticleEmissionRate(3, 500)
ParticleEmitterDirection(3, 0, 0, 1)
ParticleVelocity(3, #PB_Particle_MinimumVelocity, 3)
ParticleVelocity(3, #PB_Particle_Velocity, 5)
ParticleVelocity(3, #PB_Particle_MaximumVelocity, 10)
ParticleAngle(3, 0, 45)
EndIf
If v\snd = #True
LoadMovie(0, v\path + "celtic.mp3")
PlayMovie(0, 0)
EndIf
ProcedureReturn #True
EndProcedure
Procedure.i Lines(*image)
Protected st.i = #True
Protected w = ImageWidth(*image)-1
Protected h = ImageHeight(*image)-1
StartDrawing(ImageOutput(*image))
For y = 1 To h Step 2
For x = 1 To w Step 2
Box(0, y, w, 1, $0)
Box(x, 0, 1, h, $0)
Next x
Next y
StopDrawing()
ProcedureReturn #True
EndProcedure
Procedure.i Run()
ret = DownloadAssetsAndPrepare()
Repeat
Repeat
v\ev = WindowEvent()
Until v\ev = 0
ExamineKeyboard()
RotateEntity(0, 0, -0.05, 0, #PB_Relative)
RotateEntity(1, 0.07, -0.04, -0.05, #PB_Relative)
RotateEntity(2, 0, 0, -0.05, #PB_Relative)
RenderWorld()
FlipBuffers()
Until KeyboardPushed(#PB_Key_Escape)
EndProcedure
EndModule
Globe::Init()
Globe::Setup()
The content must be at the same location as the code or
you must change the path yourself.
(Damn! So much extra for such a little simple example..
Code: Select all
DeclareModule Globe
UseJPEGImageDecoder()
Enumeration Initialize
#globe_InitEngine_Error
#Globe_InitSprite_Error
#Globe_InitKeyboard_Error
#Globe_InitSound_Error
#Globe_Init_Success
EndEnumeration
Declare.i Init()
Declare.i Setup()
EndDeclareModule
Module Globe
Structure BaseVars
w.i
h.i
win.i
scr.i
ev.i
snd.i
path.s
cam.i
lgt.i
fn.i
EndStructure
Global v.BaseVars, th.i
Global DoingNow.s = "", DwlAssets.i = #True
Declare.i Run()
Declare.i DownloadAssetsAndPrepare()
Declare.i Lines(*Image)
Procedure.i Init()
If InitEngine3D(#PB_Engine3D_DebugLog) = 0
ProcedureReturn #globe_InitEngine_Error
EndIf
If InitSprite() = 0
ProcedureReturn #Globe_InitSprite_Error
EndIf
If InitKeyboard() = 0
ProcedureReturn #Globe_InitKeyboard_Error
EndIf
If InitMovie() = 0
v\snd = #False
Else
v\snd = #True
EndIf
ProcedureReturn #Globe_Init_Success
EndProcedure
Procedure.i Setup()
ExamineDesktops()
v\w = DesktopWidth(0) : v\h = DesktopHeight(0)
v\win = OpenWindow(#PB_Any, 0, 0, DesktopWidth(0), DesktopHeight(0), "Globe", #PB_Window_BorderLess)
v\scr = OpenWindowedScreen(WindowID(v\win), 0, 0, WindowWidth(v\win), WindowHeight(v\win))
v\cam = CreateCamera(#PB_Any, 0, 0, 100, 100)
MoveCamera(v\cam, 0, 0, 22)
v\lgt = CreateLight(#PB_Any, $00FF03, 0, 0, 4)
run()
EndProcedure
Procedure.i DownloadAssetsAndPrepare()
Protected ret.i, spr.i
v\path = GetTemporaryDirectory()
Add3DArchive(".", #PB_3DArchive_FileSystem)
;MUSIC FROM INCOMPETECH.COM!! :-)
Parse3DScripts()
image.i = LoadImage(#PB_Any, "earth.jpg")
ret = Lines(image)
If ret = #True
CreateSphere(0, 2, 60, 60)
CreateTexture(0, ImageWidth(image), ImageHeight(image), "earth")
StartDrawing(TextureOutput(0))
DrawImage(ImageID(image), 0, 0)
StopDrawing()
CreateMaterial(0, TextureID(0))
MaterialBlendingMode(0, #PB_Material_Add)
AddMaterialLayer(0, TextureID(0), #PB_Material_Add)
MaterialFilteringMode(0, #PB_Material_Anisotropic, 8)
SetMaterialColor(0, #PB_Material_AmbientColor, $00FF03)
SetMaterialColor(0, #PB_Material_SelfIlluminationColor, $00FF03)
MaterialCullingMode(0, #PB_Material_NoCulling)
CreateEntity(0, MeshID(0), MaterialID(0), 0, 0, 13)
RotateEntity(0, 0, 23.44, 0, #PB_Absolute)
CreateIcoSphere(1, 2.6, 80)
CreateTexture(1, 512, 512, "Mat2")
StartDrawing(TextureOutput(1))
DrawingMode(#PB_2DDrawing_Outlined)
Box(0, 0, 512, 512, $00FF03)
StopDrawing()
CreateMaterial(1, TextureID(1))
MaterialBlendingMode(1, #PB_Material_Add)
AddMaterialLayer(1, TextureID(1), #PB_Material_Add)
MaterialCullingMode(1, #PB_Material_NoCulling)
ScaleMaterial(1, 0.2, 0.2, 0)
ScaleMaterial(1, 0.2, 0.2, 1)
ScrollMaterial(1, -0.1, 0, #PB_Material_Animated, 0)
ScrollMaterial(1, 0.1, 0, #PB_Material_Animated, 1)
MaterialFilteringMode(1, #PB_Material_Anisotropic, 8)
CreateEntity(1, MeshID(1), MaterialID(1), 0, 0, 13)
LoadMesh(2, "pb.mesh")
GetScriptMaterial(2, "Green")
CreateEntity(2, MeshID(2), #PB_Material_None, 0, 7, 0)
RotateEntity(2, 90, 0, 0)
CreateParticleEmitter(3, 100, 100, 100, #PB_Particle_Box, 0, 0, -50)
CreateTexture(3, 128, 128, "Particle")
StartDrawing(TextureOutput(3))
DrawingMode(#PB_2DDrawing_Gradient)
FrontColor($0) : BackColor($00FF03)
CircularGradient(64, 64, 54)
Circle(64, 64, 54)
GradientColor(0.2,$00FF03)
StopDrawing()
CreateMaterial(3, TextureID(3))
MaterialBlendingMode(3, #PB_Material_Add)
AddMaterialLayer(3, TextureID(3), #PB_Material_Add)
ParticleMaterial(3, MaterialID(3))
ParticleSize(3, 0.1, 0.1)
ParticleEmissionRate(3, 500)
ParticleEmitterDirection(3, 0, 0, 1)
ParticleVelocity(3, #PB_Particle_MinimumVelocity, 3)
ParticleVelocity(3, #PB_Particle_Velocity, 5)
ParticleVelocity(3, #PB_Particle_MaximumVelocity, 10)
ParticleAngle(3, 0, 45)
EndIf
If v\snd = #True
LoadMovie(0, "celtic.mp3")
PlayMovie(0, 0)
EndIf
ProcedureReturn #True
EndProcedure
Procedure.i Lines(*image)
Protected st.i = #True
Protected w = ImageWidth(*image)-1
Protected h = ImageHeight(*image)-1
StartDrawing(ImageOutput(*image))
For y = 1 To h Step 2
For x = 1 To w Step 2
Box(0, y, w, 1, $0)
Box(x, 0, 1, h, $0)
Next x
Next y
StopDrawing()
ProcedureReturn #True
EndProcedure
Procedure.i Run()
ret = DownloadAssetsAndPrepare()
Repeat
Repeat
v\ev = WindowEvent()
Until v\ev = 0
ExamineKeyboard()
RotateEntity(0, 0, -0.05, 0, #PB_Relative)
RotateEntity(1, 0.07, -0.04, -0.05, #PB_Relative)
RotateEntity(2, 0, 0, -0.05, #PB_Relative)
RenderWorld()
FlipBuffers()
Until KeyboardPushed(#PB_Key_Escape)
EndProcedure
EndModule
Globe::Init()
Globe::Setup()


