WorldViz User Forum  

Go Back   WorldViz User Forum > Vizard

 
 
Thread Tools Rate Thread Display Modes
Prev Previous Post   Next Post Next
  #3  
Old 09-28-2012, 01:47 AM
stefs stefs is offline
Member
 
Join Date: Mar 2008
Posts: 10
Ok, this seems to work for RGBA textures in Vizard 4.0
But there are other issues now. I try to read the depth values also. First issue is that .getPixelSize() returns zero (also for RGBA textures). By trial and error I found that if the texture is viz.TEX_DEPTH, at least one byte /character is returned per depth value. All other depth formats TEX_DEPTH_16, TEX_DEPTH_24, TEX_DEPTH_32 will cause an "error pixelFormat = 81a5". Please try the script below.
Any ideas how I can get at least 16 bit depth values are greatly appreciated.
(I could work around it by having a specific render pass with a shader that renders Z as RGBA into the color buffer)

Code:
import viz

global render_texture_RGBA 
global render_texture_Depth 
	
def set_render_node_view(render_node):
	render_node.setBuffer(viz.RENDER_FBO)
	render_node.setInheritView(False)
	render_node.setMatrix(viz.Transform())
	render_node.setPosition(-3.0,0.0,0)
	render_node.setEuler([90,0,0])
	render_node.setProjectionMatrix(viz.MainWindow.getProjectionMatrix())
	
def setup_render_node_RGBA():
	global render_texture_RGBA 
	render_texture_RGBA = viz.addRenderTexture([512, 512], type = viz.TEX_2D, format = viz.TEX_RGBA)
	render_node_RGBA = viz.addRenderNode()
	render_node_RGBA.setRenderTexture(render_texture_RGBA, buffer = viz.RENDER_COLOR)
	render_node_RGBA.setBuffer(viz.RENDER_FBO)
	set_render_node_view(render_node_RGBA)

def setup_render_node_Depth(depth_format):
	global render_texture_Depth 
	render_texture_Depth = viz.addRenderTexture([512, 512], type = viz.TEX_2D, format = depth_format)
	render_node_Depth = viz.addRenderNode()
	render_node_Depth.setRenderTexture(render_texture_Depth, buffer = viz.AUTO_COMPUTE)
	render_node_Depth.setBuffer(viz.RENDER_FBO)
	set_render_node_view(render_node_Depth)

def pick_texel_RGBA(texture, pos = [0.5, 0.5]):
	size = texture.getSize() 
	bpt  = texture.getPixelSize() # getPixelSize always returns 0
	bpt = 4                       # set to 4 as we know format is RGBA
	data = texture.saveToBuffer('<raw>')
	if (data == None):
		return None
	else:
		ix = int(float(size[0]) * pos[0])
		iy = int(float(size[1]) * pos[1])
		idx = (iy * size[1] + ix ) * bpt
		sample = []
		for i in range(bpt):
			sample.append(ord(data[idx+i]))
		return sample

def pick_texel_Depth(texture, pos = [0.5, 0.5]):
	size = texture.getSize() 
	bpt  = texture.getPixelSize() # getPixelSize always returns 0
	bpt = 1                       # set to 1 as this sees to work for format Depth
	data = texture.saveToBuffer('<raw>')
	if (data == None):
		return None
	else:
		ix = int(float(size[0]) * pos[0])
		iy = int(float(size[1]) * pos[1])
		idx = (iy * size[1] + ix ) * bpt
		sample = []
		for i in range(bpt):
			sample.append(ord(data[idx+i]))
		return sample
	
def onKeyDown(key):
	global render_texture_RGBA 
	if key == 'p':
		print 'RGBA/Depth of texel at [0.5, 0.5] is : ',pick_texel_RGBA(render_texture_RGBA,[0.5, 0.5]), pick_texel_Depth(render_texture_Depth,[0.5, 0.5])   
		print 'RGBA/Depth of texel at [0.55, 0.5] is : ',pick_texel_RGBA(render_texture_RGBA,[0.55,0.5]), pick_texel_Depth(render_texture_Depth,[0.55, 0.5])  
		print 'RGBA/Depth of texel at [0.6, 0.5] is : ',pick_texel_RGBA(render_texture_RGBA,[0.6,0.5]), pick_texel_Depth(render_texture_Depth,[0.6, 0.5])  
	
viz.add('ball.wrl')
viz.MainView.setPosition(0.0,0.0,-3)

setup_render_node_RGBA()
setup_render_node_Depth(viz.TEX_DEPTH)    # only format that works, will give 8-bit limited depth buffer
#setup_render_node_Depth(viz.TEX_DEPTH_16) # will cause an "error pixelFormat = 81a5" error at texture.saveToBuffer()
#setup_render_node_Depth(viz.TEX_DEPTH_24) # will cause an "error pixelFormat = 81a5" error at texture.saveToBuffer()
#setup_render_node_Depth(viz.TEX_DEPTH_32) # will cause an "error pixelFormat = 81a5" error at texture.saveToBuffer()

tex_quad = viz.addTexQuad()
tex_quad.texture(render_texture_RGBA)
#tex_quad.texture(render_texture_Depth) # show depth buffer, instead
tex_quad.setPosition(1.0,0.0,0)
tex_quad.setScale(viz.MainWindow.getAspectRatio(),1,1)
viz.callback(viz.KEYDOWN_EVENT,onKeyDown)
viz.go()
Reply With Quote
 


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
How to render a texture of the transparent object and then blur it whj Vizard 1 09-25-2012 03:15 PM
Avatar texture swaping sleiN13 Vizard 5 06-24-2011 12:48 AM
How to apply shader and render texture to an object whj Vizard 0 04-23-2010 12:23 PM
Randomly and Continuously Change Avatar's Face Texture Karla Vizard 4 08-22-2008 12:14 PM
how I can get my texture to appear exactly as is defined mspusch Vizard 1 04-23-2005 12:12 PM


All times are GMT -7. The time now is 06:15 PM.


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