View Single Post
  #1  
Old 07-24-2008, 03:43 AM
dan12345 dan12345 is offline
Member
 
Join Date: Jan 2008
Posts: 58
Problem using mirror

Hello - I've been trying to use the mirror which was discussed in previous forum posts. Everything seemed to be working just fine when trying it out not on the HMD - But when i try it out with the helmet i get a very very weird bug -
the avatar linked to the viewpoint usually looks just dandy, but while moving it suddenly disappears for a second or two - this happens consistently in particular moving patterns. The avatar seems to vanish behind an invisible screen. I've put all my efforts to understand why this happens, but feel like i've run into a dead end. Would be very, very grateful, if you could help me out!

Attached after this is the code (simplified to the minimum relevant to the mirror problem)
it uses the bigroom.ive file used in the public speaking demo. There is a boolean variable TESTING at the beginning which decides if to run on the HMD or not - notice how running not on the HMD produces good results. The addMirror function was copy pasted from the one talked about in earlier forum posts....

Thanks alot
dan

THE CODE:
#coding: UTF-8
import viztracker
TESTING = False
if TESTING :
viz.go()
else :
print(3)
head = viztracker.add()
headlink = viz.link(head,viz.MainView)
viz.eyeheight(0)
headlink.postTrans([0,0,0.2])
viz.go(viz.HMD|viz.STEREO)

def headLightOnMirror():
light = viz.addLight()
light.setPosition(-4,1.8,1.2)
light.position(0,0,1,0)

def addMirror(mirror,mat=None):

#If mirror matrix is not specifed, get matrix of mirror object
if mat is None:
mat = mirror.getMatrix()

#Position of mirror
pos = viz.Vector(mat.getPosition())

#Direction mirror is pointing
dir = viz.Vector(mat.getForward())
dir.normalize()

#Quaternion rotation of mirror
quat = mat.getQuat()

#Create render texture
tex = viz.addRenderTexture()

#Create render node for rendering reflection
lens = viz.addRenderNode(size=[1024,1024])
lens.attachTexture(tex)
lens.setInheritView(True,viz.POST_MULT)
lens.disable(viz.CULL_FACE,op=viz.OP_SET_OVERRIDE)

#Setup reflection matrix
rot = viz.Matrix.quat(quat)
invRot = rot.inverse()
lens.setMatrix(viz.Matrix.translate(pos*-1.0)*invRot*viz.Matrix.scale(1,1,-1)*rot*viz.Matrix.translate(pos))

#Setup reflection clip plane
plane = vizmat.Plane(pos=pos,normal=dir)
dist = plane.distance([0,0,0])
lens.clipPlane([-dir[0],-dir[1],-dir[2],dist+0.001])

#Project reflection texture onto mirror
mirror.texture(tex)
mirror.texGen(viz.TEXGEN_PROJECT_EYE)


myRoom = viz.add('../art/models/bigroom.IVE')
#Apply mirror settings to mirror object
mirrorsurface = viz.addTexQuad()
mirrorsurface.scale(.3,.25,.6)
mirrorsurface.setPosition(0,1.8,1.2)
mirrorsurfacerotation = [0,0,0] #rotation around the Z,Y,X axes #changed from [90,0,0]
mirrorsurface.rotate(mirrorsurfacerotation)
m = viz.Matrix()
m.setPosition(mirrorsurface.getPosition(viz.ABS_GL OBAL))
m.setEuler(mirrorsurfacerotation[0]-180,-mirrorsurfacerotation[1], mirrorsurfacerotation[2]) #Z,X,Y
addMirror(mirrorsurface,m)

female = viz.add('female.cfg')
headLink = viz.link(viz.MainView,female)
headLink.setPos([None,0,None])
headLightOnMirror()
Reply With Quote