WorldViz User Forum

WorldViz User Forum (https://forum.worldviz.com/index.php)
-   Vizard (https://forum.worldviz.com/forumdisplay.php?f=17)
-   -   Updating a Postprocessing effect (https://forum.worldviz.com/showthread.php?t=5343)

MissingAFew 05-02-2015 02:16 PM

Updating a Postprocessing effect
 
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:


Code:

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:

Code:

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 command to call effect.setBulge and waits until the vizact.mix parameters are complete.

Code:

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.


All times are GMT -7. The time now is 04:51 AM.

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