View Single Post
  #5  
Old 04-02-2013, 12:04 AM
goro goro is offline
Member
 
Join Date: May 2012
Posts: 33
Hello all! We have developed further of our own and found one solution. We are sharing the code with you.

Code:
import viz
viz.go()

#Adding Models to two different scenes
piazza = viz.addChild('piazza.osgb',viz.WORLD,2)
pit = viz.addChild('pit.osgb',viz.WORLD,3)

#Creating render node & adding Render Texture for Scene 2
video1 = viz.addRenderTexture()
cam1 = viz.addRenderNode(size=(1280,720))
cam1.setScene(2)
cam1.setFov(60.0,1280/720.0,0.1,1000.0)
cam1.attachTexture(video1)
cam1.setRenderLimit(viz.RENDER_LIMIT_FRAME)

#Creating render node & adding Render Texture for Scene 3
video2 = viz.addRenderTexture()
cam2 = viz.addRenderNode(size=(1280,720))
cam2.setScene(3)
cam2.setFov(60.0,1280/720.0,0.1,1000.0)
cam2.attachTexture(video2)
cam2.setRenderLimit(viz.RENDER_LIMIT_FRAME)

# Adding quad to Main Scene & scaling & positioning it to occupy whole screen
quad = viz.addTexQuad(viz.WORLD,1)
quad.setPosition(0,1.8,4.1)
quad.setScale(4,3)

#Applying textures from outputs of Scene2 & Scene3
quad.texture(video1,unit = 0)
quad.texture(video2,unit = 1)

viz.scene(1) # Setting Scene 1 as main scene

#Applying post process shaders to Render Nodes 

#------------- Post Process Effects on Scene2--------------------#

fragCode = """
		uniform sampler2D InputTex;
		void main()
		{
			vec4 color = texture2D(InputTex,gl_TexCoord[0].st);
			gl_FragColor.r = dot(color.rgb, vec3(.393, .769, .189));
			gl_FragColor.g = dot(color.rgb, vec3(.349, .686, .168));
			gl_FragColor.b = dot(color.rgb, vec3(.272, .534, .131));
			gl_FragColor.a = color.a;
		}
		"""
		
SepiaEffectShader = viz.addShader(frag = fragCode)

ui_inputTex = viz.addUniformInt('InputTex',0)

cam1.apply(SepiaEffectShader)
cam1.apply(ui_inputTex)

#------------- Post Process Effects on Scene3--------------------#

fragCode = """
		uniform sampler2D vizpp_InputTex;
		void main()
		{
			vec4 color = texture2D(vizpp_InputTex,gl_TexCoord[0].st);
			gl_FragColor = vec4(1.0-color.r,1.0-color.g,1.0-color.b,1);
		}
		"""
		
InvertColorShader = viz.addShader(frag = fragCode)

ui_inputTex = viz.addUniformInt('InputTex',0)

cam2.apply(InvertColorShader)
cam2.apply(ui_inputTex)

#Applying Final Blending on quad

#------------------- Final Texure blend Effect -----------------------------#

VertCode = """
		void main()
		{
			gl_Position = ftransform();
			gl_TexCoord[0] = gl_MultiTexCoord0;
		}
		"""
		
FragCode = """
		uniform sampler2D tex1;
		uniform sampler2D tex2;
		void main(void)

		{
			vec4 texture1 = texture2D(tex1,gl_TexCoord[0].st);
			vec4 texture2 = texture2D(tex2,gl_TexCoord[0].st);

		   gl_FragColor = texture1* texture2;
		}
				"""

BlendShader = viz.addShader(vert = VertCode,frag = FragCode)


ui_tex1 = viz.addUniformInt('tex1',0)
ui_tex2 = viz.addUniformInt('tex2',1)


quad.apply(BlendShader)
quad.apply(ui_tex1)
quad.apply(ui_tex2)

#Locking mouse navigation as quad is 2D & objective is Augmented Reality & Not Virtual Reality
viz.mouse(viz.OFF)
And the output is:


We are getting the desired result. Our question is, is there any other much appropriate method or much optimized method to get the same?
Reply With Quote