#1
|
|||
|
|||
Mirrors and Nvis Nvisor
using the Knowledge base mirror code in conjunction with the Knowledge base nvisor code seems to blank the right eye of the nvisor.
Code:
import viz vprn = viz.add('vrpn7.dle') headTracker = vprn.addTracker('PPT0@172.19.1.23') headlink = viz.link(headTracker,viz.MainView) viz.eyeheight(0) viz.displaymode(2560, 1024) viz.go(viz.STEREO | viz.FULLSCREEN) REFLECT_MASK = viz.LAST_MASK << 1 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() for eye in (viz.RENDER_LEFT,viz.RENDER_RIGHT): #Create render texture tex = viz.addRenderTexture() #Create render node for rendering reflection lens = viz.addRenderNode(size=[1024,1024]) lens.setCullMask(REFLECT_MASK) lens.attachTexture(tex) lens.setInheritView(True,viz.POST_MULT) lens.disable(viz.CULL_FACE,op=viz.OP_OVERRIDE) lens.disable(eye) #Setup reflection matrix rot = viz.Matrix.quat(quat) invRot = rot.inverse() lens.setMatrix(viz.Matrix.translate(-pos)*invRot*viz.Matrix.scale(1,1,-1)*rot*viz.Matrix.translate(pos)) #Setup reflection clip plane s = -viz.sign(viz.Vector(dir) * viz.Vector(pos)) plane = vizmat.Plane(pos=pos,normal=dir) dist = plane.distance([0,0,0]) lens.clipPlane([-dir[0],-dir[1],-dir[2],s*dist+0.1]) #Project reflection texture onto mirror mirror.texture(tex) mirror.texGen(viz.TEXGEN_PROJECT_EYE) import nvis nvis.nvisorSX() #Add gallery environment gallery = viz.add('gallery.ive') import vizlens pincushion = vizlens.PincushionDistortion() #Use existing painting as mirror and specify the matrix mirror = gallery.getChild('art04-FACES') m = viz.Matrix() m.setPosition(mirror.getPosition(viz.ABS_GLOBAL)) m.setEuler(180,0,0) #Apply mirror settings to mirror object addMirror(mirror,m) #Increase ambient lighting viz.MainView.getHeadLight().ambient(1,1,1) #Create a self avatar avatar = viz.add('vcc_female.cfg') #Link avatar body to viewpoint avatarLink = viz.link(viz.MainView,avatar) avatarLink.setPos([None,0,None]) #Keep avatar on floor avatarLink.setEuler([None,0,0]) #Only update avatar yaw avatar.setMask(viz.LEFT_MASK|viz.RIGHT_MASK,mode=viz.MASK_REMOVE) #Only draw avatar in mirror #Link avatar head to viewpoint head = avatar.getBone('Bip01 Head') head.lock() viz.link(viz.MainView,head,mask=viz.LINK_ORI) I've also tried using the monocular mirror code but that creates more complicated problems. |
|
|