WorldViz User Forum  

Go Back   WorldViz User Forum > Vizard

Reply
 
Thread Tools Rating: Thread Rating: 15 votes, 5.00 average. Display Modes
  #1  
Old 02-10-2010, 02:03 PM
vissimutah vissimutah is offline
Member
 
Join Date: Aug 2009
Posts: 2
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.
Reply With Quote
Reply

Thread Tools
Display Modes Rate This Thread
Rate This Thread:

Posting Rules
You may not post new threads
You may not post replies
You may not post attachments
You may not edit your posts

BB code is On
Smilies are On
[IMG] code is On
HTML code is Off

Forum Jump


All times are GMT -7. The time now is 03:47 AM.


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