WorldViz User Forum  

Go Back   WorldViz User Forum > Vizard

Reply
 
Thread Tools Rate Thread Display Modes
  #1  
Old 12-09-2008, 01:33 PM
michaelrepucci michaelrepucci is offline
Member
 
Join Date: Jul 2008
Posts: 53
need some help with projection (maybe via module projector.py)

Hi Vizards, there doesn't seem to be much help on the projector.py module, just a few examples. This would be enough if I were trying something typical, but, as usual, I'm not. I'm not even sure that I can use projector.py to do this, but here goes.

What I have is an on-the-fly object which is essentially a 2D checkerboard. I would like to position it at some arbitrary angle and point in space, and then project its image onto an invisible surface at some other arbitrary angle and point in space.

For instance, if the checkerboard were slanted by 45 degrees, then projected onto an invisible wall placed between it and the viewer, the viewer would see the same image (it would look like a slanted checkerboard), but the image on the wall would actually be an unslanted, foreshortened checkerboard.

Can I use projector.py to do this, and, if so, how? Or is there some other Vizard tool I can use to do this arbitrary projection? Or will I have to calculate the projection matrix myself and manually adjust all the vertices in the OTF object?
Reply With Quote
  #2  
Old 12-17-2008, 12:31 PM
farshizzo farshizzo is offline
WorldViz Team Member
 
Join Date: Mar 2003
Posts: 2,849
The projector module can only project texture objects onto nodes. If you converted the 2D checkerboard object into an image then the projector module should do what you want, unless I'm misunderstanding you.
Reply With Quote
  #3  
Old 12-17-2008, 12:55 PM
michaelrepucci michaelrepucci is offline
Member
 
Join Date: Jul 2008
Posts: 53
I suspected that. Unfortunately there isn't just one checkerboard, there are hundreds of versions, depending on which squares are visible, so that won't be so convenient. (FYI, we're recreating a perceptual stimulus for vision research - see http://www.nature.com/nature/journal.../409085a0.html).

What I've done most recently is to do all the math by hand, finding the intersection of the line between the camera and each point in the checkerboard, and the plane onto which I want the points projected. This seems to "mostly work", aside from some small error that I haven't been able to track down. Gets a little messy since I'm dealing with head-tracking and a PowerWall.
Reply With Quote
  #4  
Old 12-17-2008, 01:25 PM
farshizzo farshizzo is offline
WorldViz Team Member
 
Join Date: Mar 2003
Posts: 2,849
Are you dynamically generating the 2D checkerboard nodes? If so, then it shouldn't be that much more difficult to generate them as 2D textures instead. Is there some other requirement that is forcing you to generate the patterns as nodes instead of textures?
Reply With Quote
  #5  
Old 12-17-2008, 01:31 PM
michaelrepucci michaelrepucci is offline
Member
 
Join Date: Jul 2008
Posts: 53
Are you saying I can make on-the-fly textures? That might work. Currently, I generate one 2D checkerboard as a collection of on-the-fly squares, then turn on or off the visibility of the appropriate squares. The only requirement that I can think of is that one a checkerboard is projected onto some plane, it's image must then not change if I move or rotate this plane. It's as if I'm burning the image onto this invisible sheet, which then I use as my new (distorted) checkerboard.
Reply With Quote
  #6  
Old 12-17-2008, 02:03 PM
farshizzo farshizzo is offline
WorldViz Team Member
 
Join Date: Mar 2003
Posts: 2,849
Yes, here is an example of how to create a texture on-the-fly and modify the data at runtime.
Code:
import viz
viz.go()

WIDTH = 16
HEIGHT = 16

#Create blank texture
tex = viz.addBlankTexture([WIDTH,HEIGHT])

#Create quad to display texture
quad = viz.addTexQuad(pos=(0,1.8,2),texture=tex)

def SetTextureColors(begin,end):
	
	#Get raw image data buffer
	data = tex.getImageData()

	#Modify image data so it blends from begin to end color
	def getColor(c):
		return [ chr(int(v*255)) for v in c ]

	for y in xrange(HEIGHT):
		for x in xrange(WIDTH):
			index = y*WIDTH*3 + x*3
			r,g,b = getColor(vizmat.Interpolate(begin,end,float(x)/WIDTH))
			data[index] = r
			data[index+1] = g
			data[index+2] = b

	#Notify Vizard that texture data has been modified
	tex.hint(viz.TEXTURE_MODIFIED_HINT)

SetTextureColors(viz.WHITE,viz.RED)

#Toggle texture color when space key is pressed
vizact.onkeydown(' ',SetTextureColors,viz.WHITE,vizact.choice([viz.GREEN,viz.BLUE,viz.RED]))
From what you described I don't see why you can't use textures instead of nodes.
Reply With Quote
  #7  
Old 12-17-2008, 02:34 PM
michaelrepucci michaelrepucci is offline
Member
 
Join Date: Jul 2008
Posts: 53
Interesting. I'll play with that and let you know if I have any problems. Thank you!
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

Similar Threads
Thread Thread Starter Forum Replies Last Post
orthographic projection in a head-tracked cave environment michaelrepucci Vizard 5 12-14-2011 11:29 AM
RE: Shadow Module nige777 Vizard 2 05-08-2008 05:52 PM
Viewing Projection pkhoosh Vizard 2 01-25-2006 10:52 AM
Fading/lightening-Problem and viz.go in module Johannes Vizard 6 09-02-2005 05:28 PM
vhil module vadrian Vizard 2 01-27-2005 12:52 PM


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


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