Yes, I see .. Hmm .. I replaced the PointEntity command in the UpdateSprites function, and inserted a pivot to parent the sprite, so that aligning it to the camera doesn't affect it's orientation:
; CreateSphere Example
; --------------------
Graphics3D 640,480,0,2
SetBuffer BackBuffer()
piv=CreatePivot()
camera=CreateCamera()
MoveEntity camera, 0, 0, -2
textu = CreateTexture(80, 15)
SetBuffer TextureBuffer(Textu)
ClsColor 255, 0, 0
Cls
Text 1,1, "no"
SetBuffer BackBuffer()
Sprite = CreateSprite()
EntityTexture Sprite, Textu
ScaleSprite sprite, 0.5, 0.1
SpriteViewMode sprite, 1
FreeTexture Textu
EntityPickMode Sprite, 2
;EntityRadius sprite, 0.13, 0.9
;create spheres
For i = 0 To 1000
ok = CreateSphere()
PositionEntity ok, Rnd(-100, 100), Rnd(-100, 100), Rnd(-100, 100)
EntityColor ok, Rand(255), Rand(255), Rand(255)
Next
PositionEntity camera, 1,0,-2
Repeat
If KeyDown(203) Then TurnEntity camera, 0, +1, 0
If KeyDown(205) Then TurnEntity camera, 0, -1, 0
If KeyDown(200) Then TurnEntity camera, -1, 0, 0
If KeyDown(208) Then TurnEntity camera, +1, 0, 0
UpdateSprites(camera)
RenderWorld
CameraPick camera, MouseX(), MouseY()
Color 255, 255, 255
Text 0, 0, "you picked: " + PickedEntity()
Flip
Until KeyHit(1)
End
;-----------------------------------------------------------------------------------------------------
; MESH-BASED SPRITE COMMANDS
;-----------------------------------------------------------------------------------------------------
Type Sprites
Field pivot
Field mesh
Field view
End Type
;-----------------------------------------------------------------------------------------------------
; LoadSprite()
;-----------------------------------------------------------------------------------------------------
Function LoadSprite(filename$, texflag = 9, parent = 0)
tex = LoadTexture(filename$, texflag)
pivot = CreatePivot(parent)
mesh = CreateMesh(pivot)
surf = CreateSurface(mesh)
AddVertex surf, -1, -1, 0, 1, 1
AddVertex surf, +1, -1, 0, 0, 1
AddVertex surf, +1, +1, 0, 0, 0
AddVertex surf, -1, +1, 0, 1, 0
AddTriangle surf, 0, 1, 2
AddTriangle surf, 0, 2, 3
;double sided method I, works with PickMode 2
;AddTriangle surf, 2, 1, 0
;AddTriangle surf, 3, 2, 0
If tex <> 0 Then
EntityTexture mesh, tex
FreeTexture tex
End If
;double sided method II, could give problems with PickMode 2
;EntityFX mesh, 16
s.Sprites = New Sprites
s\mesh = mesh
s\pivot = pivot
Return mesh
End Function
;-----------------------------------------------------------------------------------------------------
; ScaleSprite()
;-----------------------------------------------------------------------------------------------------
Function ScaleSprite(sp, x#, y#)
ScaleEntity sp, x, y, 1
End Function
;-----------------------------------------------------------------------------------------------------
; RotateSprite()
;-----------------------------------------------------------------------------------------------------
Function RotateSprite(sp, x#)
RotateEntity sp, 0, 0, x, 1
End Function
;-----------------------------------------------------------------------------------------------------
; HandleSprite()
;-----------------------------------------------------------------------------------------------------
Function HandleSprite(sp, x#, y#)
PositionMesh sp, x, y, 0
End Function
;-----------------------------------------------------------------------------------------------------
; SpriteViewMode()
;-----------------------------------------------------------------------------------------------------
Function SpriteViewMode(sp, vm)
For s.Sprites = Each Sprites
If s\mesh = sp Then s\view = vm
Next
End Function
;-----------------------------------------------------------------------------------------------------
; UpdateSprites()
;-----------------------------------------------------------------------------------------------------
Function UpdateSprites(cam)
For s.Sprites = Each Sprites
If s\mesh <> 0 Then
;sprite view modes
Select s\view
Case 1
RotateEntity s\mesh, 0, 180 + EntityYaw(cam, 1), 0
Case 2
;nothing needed
Case 3
RotateEntity s\mesh, -EntityPitch(cam, 1), 180 + EntityYaw(cam, 1), -EntityRoll(cam, 1)
Case 4
RotateEntity s\mesh, 0, 180 + EntityYaw(cam, 1), -EntityRoll(cam, 1)
End Select
End If
Next
End Function
;-----------------------------------------------------------------------------------------------------
; FreeSprite()
;-----------------------------------------------------------------------------------------------------
Function FreeSprite(sp)
For s.Sprites = Each Sprites
If s\mesh = sp Then
FreeEntity sp
Delete s
End If
Next
End Function
;-----------------------------------------------------------------------------------------------------
; CreateSprite()
;-----------------------------------------------------------------------------------------------------
Function CreateSprite(parent = 0)
Return LoadSprite("", 0, parent)
End Function