WorldViz User Forum

WorldViz User Forum (https://forum.worldviz.com/index.php)
-   Vizard (https://forum.worldviz.com/forumdisplay.php?f=17)
-   -   Strange bug concerning a mirror (https://forum.worldviz.com/showthread.php?t=1495)

Frank Verberne 05-14-2008 08:47 AM

Strange bug concerning a mirror
 
2 Attachment(s)
Hi all,

I'm having some strange problems with my mirror. When I use viz.go(viz.HMD | viz.STEREO), the right half of the mirror doesn't reflect everything (mainly not my avatar and the frames of the paintings) but the left half does. When I use viz.go(viz.HMD), the whole mirror works fine. I have absolutely no clue why this happens, and it happens on both screens of the HMD in STEREO mode. Any clue on how to fix this problem is appreciated! See the pictures for the difference.

farshizzo 05-14-2008 06:00 PM

I've modified the original mirror sample script to support stereo. The main differences are that a render node must be created for each eye. Also, I had to increase the clip plane scale factor to remove the clipping issues. Let me know if this works:
Code:

import viz
viz.go(viz.STEREO)

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_SET_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)
       
#Add gallery environment
gallery = viz.add('gallery.ive')

#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)


Frank Verberne 05-15-2008 05:09 AM

Hi farshizzo,

The modification of the original mirror script works fine. The only error in it is the line
Code:

lens.setMatrix(viz.Matrix.translate(-pos)*invRot*viz.Matrix.scale(1,1,-1)*rot*viz.Matrix.translate(pos))
This should be:
Code:

lens.setMatrix(viz.Matrix.translate(pos*-1)*invRot*viz.Matrix.scale(1,1,-1)*rot*viz.Matrix.translate(pos))
Thanks for helping me again!


All times are GMT -7. The time now is 08:32 AM.

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