|
sprite - sprite handle view_mode - how the sprite orients itself: 1: camera-aligned (default) - takes the camera orientation completely, so it faces the camera and rolls with it 2: free - keeps whatever orientation you give it 3: camera-facing - turns to look along the camera view direction, but keeps its own roll 4: upright - turns to face the camera about the up axis only, staying upright |
|
Sets how a sprite turns to face the camera. Mode 1 is the default and the one to use for particles: the sprite adopts the camera orientation outright, so it is always square-on to the screen no matter how the camera pitches or rolls. Smoke, sparks, explosions and glows all want this. Mode 2 turns the behaviour off entirely - the sprite keeps whatever orientation you gave it, like a flat piece of paper hung in the world. That makes it useful for decals, signs and floor markings. Because it is a single flat quad it is only visible from the front, so add EntityFX sprite,16 to disable backface culling if the player can walk behind it. Mode 3 turns the sprite to look along the camera view direction while keeping its own roll, so a sprite you have deliberately rotated stays rotated as the camera moves around it. Mode 4 is the classic billboard: the sprite turns about the up axis to face the camera, but never tips over. This is what trees, bushes, spectators, torches and lamp posts want - things that should always be seen from the side, and would look wrong lying flat when the camera looks down at them from above. See also: CreateSprite, LoadSprite, HandleSprite, RotateSprite, EntityFX. |
; SpriteViewMode Example
; ----------------------
Graphics3D 640,480,0,2
SetBuffer BackBuffer()
; The camera hangs from a pivot so it can orbit the sprite
pivot=CreatePivot()
PositionEntity pivot,0,1,0
camera=CreateCamera(pivot)
PositionEntity camera,0,0,10
light=CreateLight()
RotateEntity light,90,0,0
; A reflective floor helps show the camera moving
plane=CreatePlane()
EntityTexture plane,LoadTexture("media/Chorme-2.BMP")
sprite=LoadSprite("media/b3dlogo.jpg")
PositionEntity sprite,0,1,0
pitch=-15
yaw=180
roll=0
view_mode=1
view_mode_info$=" (fixed)"
While Not KeyDown(1)
; Cursor keys orbit the camera, A and S roll it
If KeyDown(208) And pitch<0 Then pitch=pitch+1
If KeyDown(200) And pitch>-89 Then pitch=pitch-1
If KeyDown(205) Then yaw=yaw+1
If KeyDown(203) Then yaw=yaw-1
If KeyDown(30) Then roll=roll+1
If KeyDown(31) Then roll=roll-1
; Choose a sprite view mode with keys 1-4
If KeyHit(2) Then view_mode=1 : view_mode_info$=" (fixed: always faces camera)"
If KeyHit(3) Then view_mode=2 : view_mode_info$=" (free: independent of camera)"
If KeyHit(4) Then view_mode=3 : view_mode_info$=" (upright1: faces camera, rolls with it)"
If KeyHit(5) Then view_mode=4 : view_mode_info$=" (upright2: billboard, stays upright)"
; Apply the view mode to the sprite
SpriteViewMode sprite,view_mode
RotateEntity pivot,pitch,yaw,0
PointEntity camera,sprite,roll
RenderWorld
Text 0,0,"Cursor keys: orbit camera A/S: roll camera 1-4: view mode Esc: exit"
Text 0,20,"SpriteViewMode sprite,"+view_mode+view_mode_info$
Flip
Wend
End