WorldViz User Forum

WorldViz User Forum (https://forum.worldviz.com/index.php)
-   Vizard (https://forum.worldviz.com/forumdisplay.php?f=17)
-   -   Mirrors and Nvis Nvisor (https://forum.worldviz.com/showthread.php?t=2517)

vissimutah 02-10-2010 02:03 PM

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)

Each section of provided code utilizes different arguments to viz.go(), but I haven't managed to correct the problem by using either or both of them.

I've also tried using the monocular mirror code but that creates more complicated problems.


All times are GMT -7. The time now is 04:21 PM.

Powered by vBulletin® Version 3.8.7
Copyright ©2000 - 2024, vBulletin Solutions, Inc.
Copyright 2002-2023 WorldViz LLC