Thread: Wide-angle view
View Single Post
  #9  
Old 09-04-2009, 04:57 PM
farshizzo farshizzo is offline
WorldViz Team Member
 
Join Date: Mar 2003
Posts: 2,849
Here is a sample script. The shader simply averages the image from each pass, you will need to replace that with your own shader code.
Code:
import viz
viz.go()

FRAG = """
uniform sampler2D Pass1;
uniform sampler2D Pass2;
uniform sampler2D Pass3;
uniform sampler2D Pass4;

void main()
{ 
	vec4 p1 = texture2D(Pass1, gl_TexCoord[0].xy);
	vec4 p2 = texture2D(Pass2, gl_TexCoord[0].xy);
	vec4 p3 = texture2D(Pass3, gl_TexCoord[0].xy);
	vec4 p4 = texture2D(Pass4, gl_TexCoord[0].xy);
	
	//TODO: Combine texture from each pass
	gl_FragColor = (p1+p2+p3+p4) * 0.25;
}
"""

def CreateRenderPasses():
	
	renderPass = []
	uniforms = []
	
	#Create post render pass that combines all passes
	postRenderPass = viz.addRenderNode()
	postRenderPass.setHUD(-1,1,-1,1,renderQuad=True)
	postRenderPass.setOrder(viz.POST_RENDER,-1)
	
	#Create each pass
	for x in range(4):
		
		#Create render texture
		renderTexture = viz.addRenderTexture()
		
		#Apply to post render pass
		postRenderPass.texture(renderTexture,unit=x)
		
		#Create uniform for texture unit
		uniforms.append(viz.addUniformInt('Pass'+str(x+1),x))
		
		#Create render node to render texture
		renderNode = viz.addRenderNode()
		renderNode.attachTexture(renderTexture)
		renderPass.append(renderNode)
		
	#Apply shader
	shader = viz.addShader(frag=FRAG,uniforms=uniforms)
	postRenderPass.apply(shader)

	#Set rotation offset of each render pass
	renderPass[0].setEuler(-30,0,0)
	renderPass[1].setEuler(-10,0,0)
	renderPass[2].setEuler(10,0,0)
	renderPass[3].setEuler(30,0,0)
	
viz.add('gallery.ive')

CreateRenderPasses()
Reply With Quote