![]() |
|
|
|
#1
|
|||
|
|||
|
Getting a mirror to work in any environment
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)
|
|
#2
|
|||
|
|||
|
Can you be more specific about what doesn't work? I ran your script and it worked fine.
|
|
#3
|
|||
|
|||
|
It seems to be that the computer I was testing on was the problem. When I tested it in the lab, all was fine like you say. I don't know why my testing computer has this issue, but it doesn't matter that much if it works in the lab.
|
|
#4
|
|||
|
|||
|
I'm still having problems with the mirror. When I don't adjust the ambient lighting like this:
Code:
#Increase ambient lighting viz.MainView.getHeadLight().ambient(3,3,3) |
|
#5
|
|||
|
|||
|
By default Vizard has a light source attached to the head position. So when you look in the mirror the head light is not facing the avatar. You should disable the head light and add a fixed light source. For example, the following code will create a directional light that point downward:
Code:
viz.MainView.getHeadLight().disable() sunlight = viz.addLight() sunlight.position(0,1,0,0) sunlight.ambient([0.6]*3) |
|
#6
|
|||
|
|||
|
Thanks farshizzo! After trying some things I managed to get the reflection the way I wanted. Putting the light on the position of the mirror seemed to do the trick. Because I have several conditions (where participants view the world through the eyes of the avatar or through a point outside of the body of the avatar) I had to disable the headlight and add a light that pointed on the avatar, which had to be the same as the light on the mirror. Anyway, the problem is solved
!
|
![]() |
| Thread Tools | |
| Display Modes | Rate This Thread |
|
|
Similar Threads
|
||||
| Thread | Thread Starter | Forum | Replies | Last Post |
| Best Modelling Environment for Vizard? | tmcw | Vizard | 6 | 02-24-2007 12:15 PM |
| newbie problem getting vizard to work | Colin | Vizard | 2 | 11-10-2006 11:54 AM |
| MainWindow.frustum doesn't work | Joran | Vizard | 2 | 06-13-2006 06:24 PM |
| peoplemaker not work in viz 2.53? | bailenson | Vizard | 3 | 10-21-2005 01:43 PM |
| environment maps, scenes, and you! | vadrian | Vizard | 1 | 01-12-2005 05:04 PM |