PDA

View Full Version : Updating a Postprocessing effect


MissingAFew
05-02-2015, 02:16 PM
I'd like to be able to modify and update a postprocessing effect in a loop for a particular effect. Specifically, I'm wanting to modify BulgeAmount such that it loops and interpolates between -0.5 and 0.5:


effect = BulgeEffect(BulgeAmount)
vizfx.postprocess.addEffect(effect)


I tried using the director function to create a new thread and have it loop separately from the main thread but it crashed. This is the code I tried:

import viz
import viztask

import vizfx.postprocess
from vizfx.postprocess.distort import PincushionEffect

def UpdateDrunkEffect():
DrunkValue = 0
Modulate = True

Length = 60

while True:
if DrunkValue <= 0:
Modulate = True

if DrunkValue >= 1:
Modulate = False
Length -= 1

if Modulate:
DrunkValue += .01
else:
DrunkValue -= .01

effect = PincushionEffect(DrunkValue)
vizfx.postprocess.addEffect(effect)

if Length == 0:
effect = PincushionEffect(0)
vizfx.postprocess.addEffect(effect)
break

viz.director( UpdateDrunkEffect )

Is there a better way to do this that I'm just not thinking of? How can I go about changing the postprocessing effect in a loop without it freezing the application?

Jeff
05-04-2015, 02:37 PM
Here's an example that uses the viztask.waitCall (http://docs.worldviz.com/vizard/#commands/viztask/waitCall.htm%3FTocPath%3DCommand%20Index%7CVizard% 20modules%7Cviztask%7C_____15) command to call effect.setBulge and waits until the vizact.mix (http://docs.worldviz.com/vizard/#commands/vizact/mix.htm%3FTocPath%3DCommand%20Index%7CVizard%20mod ules%7Cvizact%7C_____12) parameters are complete.

import viz
import vizact
import viztask

viz.go()
viz.addChild('gallery.osgb')

import vizfx.postprocess
from vizfx.postprocess.distort import BulgeEffect
effect = BulgeEffect(0,radius=1)
vizfx.postprocess.addEffect(effect)

def BulgeTask():

increase = vizact.mix(-0.5,0.5,time=2)
decrease = vizact.mix(0.5,-0.5,time=2)

while True:

yield viztask.waitCall(effect.setBulge,increase)
yield viztask.waitCall(effect.setBulge,decrease)

viztask.schedule( BulgeTask() )

MissingAFew
05-07-2015, 09:58 AM
Thank you Jeff! This is exactly what I was trying to do. You make my life easy.