not sure what you are looking for, so here 2 examples
Code: Select all
#CameraSpeed = 2
IncludeFile #PB_Compiler_Home + "examples/3d/Screen3DRequester.pb"
Structure VECTOR3
x.f
y.f
z.f
EndStructure
Define.f KeyX, KeyY, MouseX, MouseY, d = 20
Define.VECTOR3 x,y,z
Declare Normalize(*V.VECTOR3)
Declare ProduitVectoriel(*N.VECTOR3, *V1.VECTOR3, *V2.VECTOR3)
If InitEngine3D()
InitSprite()
InitKeyboard()
InitMouse()
If Screen3DRequester()
Add3DArchive(#PB_Compiler_Home + "examples/3d/Data/Textures", #PB_3DArchive_FileSystem)
Add3DArchive(#PB_Compiler_Home + "examples/3d/Data/Models", #PB_3DArchive_FileSystem)
Add3DArchive(#PB_Compiler_Home + "examples/3d/Data/Scripts", #PB_3DArchive_FileSystem)
Add3DArchive(#PB_Compiler_Home + "examples/3d/Data/Packs/Desert.zip", #PB_3DArchive_Zip)
Parse3DScripts()
; First create materials
;
GrassMaterial = CreateMaterial(#PB_Any, TextureID(LoadTexture(#PB_Any,"grass1.png")))
MaterialBlendingMode(GrassMaterial, #PB_Material_AlphaBlend)
DirtMaterial = CreateMaterial(#PB_Any, TextureID(LoadTexture(#PB_Any,"Dirt.jpg")))
NinjaRed = CreateMaterial(#PB_Any, TextureID(LoadTexture(#PB_Any,"nskinrd.jpg")))
Red = GetScriptMaterial(#PB_Any, "Color/Red")
Blue = GetScriptMaterial(#PB_Any, "Color/Blue")
Green = GetScriptMaterial(#PB_Any, "Color/Green")
; Then create the billboard group and use the previous material
;
;-Billboard
Billboard = CreateBillboardGroup(#PB_Any, MaterialID(GrassMaterial), 60, 60)
For i = 0 To 1000
AddBillboard(Billboard, Random(2000)-1000, 30, Random(2000) - 1000)
Next i
; create ground
MeshPlane = CreatePlane(#PB_Any, 2000, 2000, 40, 40, 4, 4)
CreateEntity(#PB_Any, MeshID(MeshPlane), MaterialID(DirtMaterial))
; Add house
MeshHouse = LoadMesh(#PB_Any, "tudorhouse.mesh")
House = CreateEntity(#PB_Any, MeshID(MeshHouse), #PB_Material_None, 0, 280, 0)
ScaleEntity(House, 0.5, 0.5, 0.5)
;- Ninja
NinjaMesh = LoadMesh(#PB_Any, "ninja.mesh")
Ninja = CreateEntity(#PB_Any, MeshID(NinjaMesh), MaterialID(NinjaRed), 500, 0, 400)
ScaleEntity(Ninja, 0.5, 0.5, 0.5)
StartEntityAnimation(Ninja, "Walk")
;Sphere
Sphere = CreateSphere(#PB_Any, 5)
SphereUp = CreateEntity(#PB_Any, MeshID(Sphere), MaterialID(Red), 0, 110, 0)
SphereLeft = CreateEntity(#PB_Any, MeshID(Sphere), MaterialID(Green), -d, 55, 0)
SphereRight = CreateEntity(#PB_Any, MeshID(Sphere), MaterialID(Blue), d, 55, 0)
CreateNode(0)
AttachNodeObject(0, EntityID(SphereUp))
AttachNodeObject(0, EntityID(SphereLeft))
AttachNodeObject(0, EntityID(SphereRight))
; SkyBox
SkyBox("Desert07.jpg")
; create camera
Camera = CreateCamera(#PB_Any, 0, 0, 100, 100)
; Light
CreateLight(0, RGB(255, 255, 255), 1560, 900, 500)
AmbientColor(RGB(50,50,50))
Repeat
Screen3DEvents()
If ExamineMouse()
MouseX = -MouseDeltaX() * #CameraSpeed * 0.03
MouseY = -MouseDeltaY() * #CameraSpeed * 0.05
EndIf
If ExamineKeyboard()
If KeyboardPushed(#PB_Key_Left)
KeyX = -#CameraSpeed
ElseIf KeyboardPushed(#PB_Key_Right)
KeyX = #CameraSpeed
Else
KeyX * 0.85
EndIf
If KeyboardPushed(#PB_Key_Up)
KeyY = -#CameraSpeed
ElseIf KeyboardPushed(#PB_Key_Down)
KeyY = #CameraSpeed
Else
KeyY * 0.9
EndIf
EndIf
MoveEntity(Ninja, KeyX, 0, KeyY, #PB_Local)
Yaw(EntityID(Ninja), MouseX, #PB_World)
CameraFollow(Camera, EntityID(Ninja), 0, EntityY(Ninja) + 80, 200, 0.1, 0.1, #False)
CameraLookAt(Camera, EntityX(Ninja), 40, EntityZ(Ninja))
MoveNode(0, EntityX(Ninja), EntityY(Ninja),EntityZ(Ninja), #PB_Absolute)
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
Code: Select all
#CameraSpeed = 2
IncludeFile #PB_Compiler_Home + "examples/3d/Screen3DRequester.pb"
Structure VECTOR3
x.f
y.f
z.f
EndStructure
Define.f KeyX, KeyY, MouseX, MouseY, d = 20
Define.VECTOR3 x,y,z
Declare Normalize(*V.VECTOR3)
Declare ProduitVectoriel(*N.VECTOR3, *V1.VECTOR3, *V2.VECTOR3)
If InitEngine3D()
InitSprite()
InitKeyboard()
InitMouse()
If Screen3DRequester()
Add3DArchive(#PB_Compiler_Home + "examples/3d/Data/Textures", #PB_3DArchive_FileSystem)
Add3DArchive(#PB_Compiler_Home + "examples/3d/Data/Models", #PB_3DArchive_FileSystem)
Add3DArchive(#PB_Compiler_Home + "examples/3d/Data/Scripts", #PB_3DArchive_FileSystem)
Add3DArchive(#PB_Compiler_Home + "examples/3d/Data/Packs/Desert.zip", #PB_3DArchive_Zip)
Parse3DScripts()
; First create materials
;
GrassMaterial = CreateMaterial(#PB_Any, TextureID(LoadTexture(#PB_Any,"grass1.png")))
MaterialBlendingMode(GrassMaterial, #PB_Material_AlphaBlend)
DirtMaterial = CreateMaterial(#PB_Any, TextureID(LoadTexture(#PB_Any,"Dirt.jpg")))
NinjaRed = CreateMaterial(#PB_Any, TextureID(LoadTexture(#PB_Any,"nskinrd.jpg")))
Red = GetScriptMaterial(#PB_Any, "Color/Red")
Blue = GetScriptMaterial(#PB_Any, "Color/Blue")
Green = GetScriptMaterial(#PB_Any, "Color/Green")
; Then create the billboard group and use the previous material
;
;-Billboard
Billboard = CreateBillboardGroup(#PB_Any, MaterialID(GrassMaterial), 60, 60)
For i = 0 To 1000
AddBillboard(Billboard, Random(2000)-1000, 30, Random(2000) - 1000)
Next i
; create ground
MeshPlane = CreatePlane(#PB_Any, 2000, 2000, 40, 40, 4, 4)
CreateEntity(#PB_Any, MeshID(MeshPlane), MaterialID(DirtMaterial))
; Add house
MeshHouse = LoadMesh(#PB_Any, "tudorhouse.mesh")
House = CreateEntity(#PB_Any, MeshID(MeshHouse), #PB_Material_None, 0, 280, 0)
ScaleEntity(House, 0.5, 0.5, 0.5)
;- Ninja
NinjaMesh = LoadMesh(#PB_Any, "ninja.mesh")
Ninja = CreateEntity(#PB_Any, MeshID(NinjaMesh), MaterialID(NinjaRed), 500, 0, 400)
ScaleEntity(Ninja, 0.5, 0.5, 0.5)
StartEntityAnimation(Ninja, "Walk")
;Sphere
Sphere = CreateSphere(#PB_Any, 5)
SphereUp = CreateEntity(#PB_Any, MeshID(Sphere), MaterialID(Red))
SphereLeft = CreateEntity(#PB_Any, MeshID(Sphere), MaterialID(Green))
SphereRight = CreateEntity(#PB_Any, MeshID(Sphere), MaterialID(Blue))
; SkyBox
SkyBox("Desert07.jpg")
; create camera
Camera = CreateCamera(#PB_Any, 0, 0, 100, 100)
; Light
CreateLight(0, RGB(255, 255, 255), 1560, 900, 500)
AmbientColor(RGB(50,50,50))
Repeat
Screen3DEvents()
If ExamineMouse()
MouseX = -MouseDeltaX() * #CameraSpeed * 0.03
MouseY = -MouseDeltaY() * #CameraSpeed * 0.05
EndIf
If ExamineKeyboard()
If KeyboardPushed(#PB_Key_Left)
KeyX = -#CameraSpeed
ElseIf KeyboardPushed(#PB_Key_Right)
KeyX = #CameraSpeed
Else
KeyX * 0.85
EndIf
If KeyboardPushed(#PB_Key_Up)
KeyY = -#CameraSpeed
ElseIf KeyboardPushed(#PB_Key_Down)
KeyY = #CameraSpeed
Else
KeyY * 0.9
EndIf
EndIf
MoveEntity(Ninja, KeyX, 0, KeyY, #PB_Local)
Yaw(EntityID(Ninja), MouseX, #PB_World)
CameraFollow(Camera, EntityID(Ninja), 0, EntityY(Ninja) + 80, 200, 0.1, 0.1, #False)
CameraLookAt(Camera, EntityX(Ninja), 40, EntityZ(Ninja))
; Get camera's axis
y\x = 0
y\y = 1
y\z = 0
z\x = CameraDirectionX(Camera)
z\y = CameraDirectionY(Camera)
z\z = CameraDirectionZ(Camera)
ProduitVectoriel(@x, @z, @y)
Normalize(@x)
; Spheres
MoveEntity(SphereUp , EntityX(Ninja), EntityY(Ninja) + 110, EntityZ(Ninja), #PB_Absolute)
MoveEntity(SphereLeft , EntityX(Ninja) - x\x * d, EntityY(Ninja) + 55 - x\y * d, EntityZ(Ninja) - x\z * d, #PB_Absolute)
MoveEntity(SphereRight, EntityX(Ninja) + x\x * d, EntityY(Ninja) + 55 + x\y * d, EntityZ(Ninja) + x\z * d, #PB_Absolute)
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
Procedure Normalize(*V.VECTOR3)
Define.f magSq, oneOverMag
magSq = *V\x * *V\x + *V\y * *V\y + *V\z * *V\z
If magsq > 0
oneOverMag = 1.0 / Sqr(magSq)
*V\x * oneOverMag
*V\y * oneOverMag
*V\z * oneOverMag
EndIf
EndProcedure
Procedure ProduitVectoriel(*N.VECTOR3, *V1.VECTOR3, *V2.VECTOR3)
*N\x = *V1\y * *V2\z - *V1\z * *V2\y
*N\y = *V1\z * *V2\x - *V1\x * *V2\z
*N\z = *V1\x * *V2\y - *V1\y * *V2\x
EndProcedure