WorldViz User Forum  

Go Back   WorldViz User Forum > Vizard

Reply
 
Thread Tools Rate Thread Display Modes
  #1  
Old 09-05-2006, 06:36 PM
k_iwan k_iwan is offline
Member
 
Join Date: May 2006
Posts: 115
Smile Multi-Texturing...

Hi,

Is it possible to do multi texturing in Vizard, not as in blend-mode, but as overlay?
I have attached 2 sites which captures exactly what I have in mind.

Multi Texturing in openGL;
http://www.kraftwrk.com/multi_texturing.htm
http://www.cs.auckland.ac.nz/~jvan00.../multitex.html

I hope that I posted this in the right forum.

Kind Regards,
Iwan
Reply With Quote
  #2  
Old 09-06-2006, 09:42 AM
farshizzo farshizzo is offline
WorldViz Team Member
 
Join Date: Mar 2003
Posts: 2,849
Hi,

I'm not sure what you mean by "overlay". The examples you pointed to apply multiple textures to a mesh and blend them together. This technique is possible within Vizard. To apply multitple textures on a node just do the following:
Code:
node.texture(tex1,'',0) #Apply to texture unit 0 (default)
node.texture(tex2,'',1) #Apply to texture unit 1
In the examples they use different texture coordinates per unit. You either need to set these in your modelling program and make sure they are exported, or you can use a texture matrix to change the coordinates of a unit. In the examples you gave, they simply have the detailed textures repeat over the surface, so create a texture matrix that scales the texture coordinates:
Code:
m = viz.Transform.scale(20,20,1)
node.texmat(m,'',1) #Scale texture coordinates of unit 1 (detail texture)
For this to work you need to make sure that your detail texture is in repeat mode:
Code:
tex.wrap(viz.WRAP_S,viz.REPEAT)
tex.wrap(viz.WRAP_T,viz.REPEAT)
To blend the textures you can use the following example:
Code:
node.texblend(0.5,'',1) #Blend texture 1 50% with texture 0
I believe this is similar to what the first example does. The second example is a little more tricky. It would be easier to implement in a shader. If you don't have a card that supports shaders then I could create a simple plugin that implements that behaviour.

Hope this helps.
Reply With Quote
  #3  
Old 09-06-2006, 05:40 PM
k_iwan k_iwan is offline
Member
 
Join Date: May 2006
Posts: 115
Unhappy tiling doesn't work?!? could be a mistake from my end

Hi,

Firstly, thanks for the reply. In order to attempt this blend-multi texture, I created a model out of Candor Canyon on mars, and I textured it.

The blending does work, but the repeating texture does not. for the detail texture I used a 64 x 64 image. I was hoping this small texture would repeat itself over large terrain.

There are 2 screenshot attached;
no_detail.jpg - plain texture.. no additional texture applied
not_tiled.jpg - I could see here that my 64 x 64 texture is fully streched across the terrain.

the terrain has only 1 UV map applied to it.

I attached my script, I couldn't figure out what did I do wrong??? could you have aa look and see why I couldn't repeat my small texture across the terrain?

#---------------------------------------------------------------------
import viz

viz.go()

viz.enable(viz.CULL_FACE)
viz.enable(viz.CULLING)

#loading textures
tex1 = viz.add('texModified.jpg')
tex2 = viz.add('detail.jpg')
tex2.wrap(viz.WRAP_S,viz.REPEAT)
tex2.wrap(viz.WRAP_T,viz.REPEAT)

#loading the objects
stage = viz.add('output.osg')
stage.enable(viz.CULL_FACE)
stage.enable(viz.CULLING)

stage.texture(tex1,'',0) #Apply to texture unit 0 (default)
stage.texture(tex2,'',1) #Apply to texture unit 1
stage.texblend(0.8,'',1) #Blend texture 1 50% with texture 0

#loading the skybox
env = viz.add(viz.ENVIRONMENT_MAP,'mars_sky\mars_sky.jpg ')
sky = viz.add('skydome.dlc')
sky.texture(env)
#---------------------------------------------------------------------

Thanks for your help! Have a great day.

Regards,
Iwan
Attached Thumbnails
Click image for larger version

Name:	no_detail.jpg
Views:	1227
Size:	63.9 KB
ID:	108   Click image for larger version

Name:	notTiled.jpg
Views:	1272
Size:	41.6 KB
ID:	109  
Reply With Quote
  #4  
Old 09-06-2006, 05:44 PM
farshizzo farshizzo is offline
WorldViz Team Member
 
Join Date: Mar 2003
Posts: 2,849
Hi,

The texture coordinates were probably not exported for the second texture unit. Try setting the texture matrix like I mentioned in my previous post.
Code:
m = viz.Transform.scale(20,20,1) #Repeat 20 times in both directions
stage.texmat(m,'',1)
Let me know if this works.
Reply With Quote
  #5  
Old 09-06-2006, 05:48 PM
farshizzo farshizzo is offline
WorldViz Team Member
 
Join Date: Mar 2003
Posts: 2,849
Hi,

I just double checked to make sure this works and was able to create this sample script.
Code:
import viz
viz.go()

#Create quad and place it in front of user
quad = viz.add(viz.TEXQUAD,pos = (0,1.8,3))

#Add main texture
tex1 = viz.add('ball.jpg')

#Add detail texture in repeat mode
tex2 = viz.add('gb_noise.jpg',wrap=viz.REPEAT)

#Apply textures to quad
quad.texture(tex1)
quad.texture(tex2,unit=1)

#Blend textures 50%
quad.texblend(0.5,unit=1)

#Repeat detail texture 20 times
quad.texmat(viz.Transform.scale(20,20,1),unit=1)
Reply With Quote
  #6  
Old 09-06-2006, 07:14 PM
k_iwan k_iwan is offline
Member
 
Join Date: May 2006
Posts: 115
Talking VR Mars exploration has just started on Vizard!!!

Hi,

Thank you for your speedy response. It didn't work initially because I missed 2 lines!!! Thanks for pointing this one out to me.

Please look at the screenshots attached, the detail looks great. Detail texture may look bit repetitive for now, but it will change soon!

I attached my script with some changes in it, I had to bring the blend value to 0.065 to get the result that I wanted.

#-----------------------------------------------------
viz.go()

#loading textures
tex1 = viz.add('texModified.jpg')
tex2 = viz.add('detail.jpg')
tex2.wrap(viz.WRAP_S,viz.REPEAT)
tex2.wrap(viz.WRAP_T,viz.REPEAT)

#loading the objects
stage = viz.add('output.osg')
stage.enable(viz.CULL_FACE)
stage.enable(viz.CULLING)

stage.texture(tex1,'',0) #Apply to texture unit 0 (default)
stage.texture(tex2,'',1) #Apply to texture unit 1

stage.texblend(0.065,'',1) #Blend texture 1 0.065% with texture 0
m = viz.Transform.scale(5000,5000,1) #Repeat 5000 times in both directions
stage.texmat(m,'',1)


#loading the skybox
env = viz.add(viz.ENVIRONMENT_MAP,'mars_sky\mars_sky.jpg ')
sky = viz.add('skydome.dlc')
sky.texture(env)

#disabling head-light
viz.disable(viz.LIGHT0)
#-------------------------------------------------------------------

Thank you for your assistance! have a great day.

Regards,

Iwan
Attached Thumbnails
Click image for larger version

Name:	shot1.jpg
Views:	1253
Size:	69.5 KB
ID:	112   Click image for larger version

Name:	shot2.jpg
Views:	1235
Size:	52.0 KB
ID:	113  
Reply With Quote
Reply


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


All times are GMT -7. The time now is 11:18 AM.


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