I thought to try something similar in B3D some time ago. I got some speed by rendering a texture from the lens' point of view, but the effect is less pronounced as-is. Still, if we're covering all the bases...
Graphics3D 800,600,0,0
SetBuffer BackBuffer()
cam=CreateCamera()
PositionEntity cam,0,0,-8
light=CreateLight(2)
PositionEntity light,15,40,-28
LightRange light,240
room=CreateCube()
ScaleEntity room,10,10,10
PositionEntity room,0,5,0
FlipMesh room
EntityFX room,1
fixture=CreateCube(room)
ScaleEntity fixture,.1,.1,.1
PositionEntity fixture,.5,-.5,-.2
EntityColor fixture,100,100,200
fixture2=CreateCube(room)
ScaleEntity fixture2,.1,.1,.1
PositionEntity fixture2,0,-.5,.5
EntityColor fixture2,100,200,100
fixture3=CreateCube(room)
ScaleEntity fixture3,.1,.1,.1
PositionEntity fixture3,-.5,-.5,-.2
EntityColor fixture3,200,100,100
roomTex=CreateTexture(32,32,256)
SetBuffer TextureBuffer(roomTex)
Color 200,100,100 : Rect 0,0,32,32,True
Color 100,200,100 : Rect 0,0,16,16,True : Rect 16,16,16,16,True
SetBuffer BackBuffer()
ScaleTexture roomTex,.1,.1
EntityTexture room,roomTex
sphere=CreateSphere(32)
sphereTex=CreateTexture(256,256,256+64)
EntityTexture sphere,sphereTex
EntityShininess sphere,.1
sineBase#=0.0
While Not KeyDown(1)
;movement
PositionEntity sphere,0+Sin(sineBase),0,0
sineBase=sineBase+1.0
If sineBase>360 Then sineBase=sineBase-360
TurnEntity room,0,.1,0
;render sphere texture
PositionEntity cam,EntityX(sphere),EntityY(sphere),EntityZ(sphere)
CameraViewport cam,0,0,256,256
CameraZoom cam,4
RenderWorld
CopyRect 0,0,256,256,0,0,BackBuffer(),TextureBuffer(sphereTex)
;render scene
PositionEntity cam,0,0,-8
CameraViewport cam,0,0,800,600
CameraZoom cam,1.4
RenderWorld
Flip
Wend