I used the code from this thread (
http://www.worldviz.com/forum/showthread.php?t=1303) to create a mirror in the gallery environment. However, when I want to use the mirror in an other environment, it doesn't work anymore. Can somebody explain me why it doesn't work anymore and how I can make it work in any environment (even without an environment)? Or do I have to adjust the mirror for the environment I'm using? If so, how can I do that? Here is my code I'm currently using:
Code:
import viz
import socket
import math
import vizmat
import csv
import time
import random
viz.go()
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=[512,512]) #set to [1024,1024] in the lab!
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)
#Add gallery environment
#gallery = viz.add('gallery.ive')
environment = viz.add('tut_ground.wrl')
#Create a mirror
mirror = viz.addTexQuad()
mirror.scale(1.3,3,1)
mirror.setPosition([0, 1, 2])
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(3,3,3) #adjust avatar lighting
#Create two self avatars, possible: vcc_male.cfg, vcc_female.cfg, male.cfg, male_bbox.cfg, duck.cfg, hand.cfg
avatar1 = viz.add('vcc_male.cfg')
avatar1.setPosition(0.5,0,0) #(Y,Z,X)
avatar2 = viz.add('vcc_female.cfg')
avatar2.setPosition(-0.5,0,0) #(Y,Z,X)