[SOLVED]Text over 3d entities
Posted: Wed Dec 07, 2011 4:14 pm
I need to draw over each ball of this example:
http://www.purebasic.fr/english/viewtop ... 12&t=48467
a text label, like the one on the image. Any hint?
Thanks in advance.
http://www.purebasic.com
https://www.purebasic.fr/english/
Yes, that is what I need.Couldn't the label be a small surface, 'attached' logically to it's ball but always parallel and orientated to the screen, using a texture for the text?
Code: Select all
Direction\x = CameraX(0) - EntityX(0)
Direction\y = CameraY(0) - EntityY(0)
Direction\z = CameraZ(0) - EntityZ(0)
Code: Select all
#CameraSpeed = 2
Enumeration
#MainWindow
#Editor
EndEnumeration
Structure Vector3
x.f
y.f
z.f
EndStructure
IncludeFile "Screen3DRequester.pb"
Define.f KeyX, KeyY, MouseX, MouseY, Rayon = 5, Distance
Distance = Rayon + 0.5
Define.Vector3 Direction
Declare Normalize(*V.Vector3)
If InitEngine3D()
Add3DArchive("Data/Textures", #PB_3DArchive_FileSystem)
Add3DArchive("Data/Models", #PB_3DArchive_FileSystem)
Add3DArchive("Data/Scripts", #PB_3DArchive_FileSystem)
Parse3DScripts()
InitSprite()
InitKeyboard()
InitMouse()
If Screen3DRequester()
KeyboardMode(#PB_Keyboard_International)
; First create materials
;
CreateMaterial(0, LoadTexture(0,"Dirt.jpg"))
CreateMaterial(1, LoadTexture(1,"viseur-jeux.png"))
MaterialBlendingMode(1, #PB_Material_AlphaBlend)
; Meshes
;
CreateSphere(0, Rayon, 40, 40)
; Entities
;
CreateEntity(0, MeshID(0), MaterialID(0))
;-Billboard
CreateBillboardGroup(0, MaterialID(1), Rayon/4, Rayon/4)
AddBillboard(#PB_Any, 0, 0, 0, 0)
; Camera
;
CreateCamera(0, 0, 0, 100, 100)
CameraLocate(0, 0, 3, 20)
CameraLookAt(0, 0, 3, 0)
; Light
;
CreateLight(0, RGB(255, 255, 255), 560, 90, 500)
AmbientColor($888888)
Repeat
Screen3DEvents()
If ExamineMouse()
MouseX = MouseDeltaX() * #CameraSpeed * 0.05
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
EndIf
If KeyboardPushed(#PB_Key_Up)
KeyY = -#CameraSpeed
ElseIf KeyboardPushed(#PB_Key_Down)
KeyY = #CameraSpeed
Else
KeyY = 0
EndIf
EndIf
RotateEntity(0, 1, 1, 1, #PB_Relative)
RotateCamera(0, MouseY, MouseX, 0, #PB_Relative)
MoveCamera(0, KeyX, 0, KeyY)
Direction\x = CameraX(0) - EntityX(0)
Direction\y = CameraY(0) - EntityY(0)
Direction\z = CameraZ(0) - EntityZ(0)
Normalize(@Direction)
BillboardGroupLocate(0, EntityX(0) + Direction\x * Distance, EntityY(0) + Direction\y * Distance, EntityZ(0) + Direction\z * Distance)
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