The following was created while fixing my original overlay system in code archives.
It demonstrates use of sprites to achieve perfect pixel-texel mapping which results in zero filtering / blurring.
Odd sized textures and zoomed cameras may require some tweaks.
It demonstrates use of sprites to achieve perfect pixel-texel mapping which results in zero filtering / blurring.
Odd sized textures and zoomed cameras may require some tweaks.
; pixies.bb ; by simon armstrong ; pixies are pixel perfect sprite overlays ; LoadPixie(camera,file$) ; CreatePixie(camera,texture) ; returns a sprite parented to a camera ; with following features ; 1:1 pixel-texel scale for zero filtered sharp overlays ; position pixies in screen coordinates ; 20.8.2003 untested with odd sized sprites displaywidth=800 displayheight=600 Graphics3D displaywidth,displayheight cam=CreateCamera() CameraRange cam,.1,1000 pixie=LoadPixie(cam,"simon2.bmp") ;800,600, While Not KeyHit(1) PositionEntity pixie,MouseX(),MouseY(),0 RenderWorld UpdateWorld TurnEntity cam,1,2,0 ;test texel drift Flip Wend End Function LoadPixie(camera,file$) texture=LoadTexture(file) Return CreatePixie(camera,texture) End Function Function CreatePixie(camera,texture) ; change these for viewports viewwidth=GraphicsWidth() viewheight=GraphicsHeight() ; find existing pixiespace parented to camera magic=0 n=CountChildren(camera) For i=1 To n If EntityName(GetChild(camera,i))="pixiespace" magic=GetChild(GetChild(camera,i),1) EndIf Next If magic=0 magic=CreatePivot(camera) NameEntity(magic,"pixiespace") aspect#=Float(viewheight)/viewwidth PositionEntity magic,-1,aspect,1 scale#=2.0/viewwidth ScaleEntity magic,scale,-scale,-scale magic=CreatePivot(magic) PositionEntity magic,-.5,-.5,0 EndIf ; create sprite from texture as child of magic overlay sprite=CreateSprite() ;,magic ??? EntityParent sprite,magic ;cludge for blitz bug in createsprite(parent) brush=CreateBrush() BrushFX brush,1 BrushTexture brush,texture PaintEntity sprite,brush FreeBrush brush SpriteViewMode sprite,2 scale#=1.0/viewwidth ScaleSprite sprite,TextureWidth(texture)*scale,TextureHeight(texture)*scale Return sprite End Function