![]() |
#1
|
|||
|
|||
Headlight Question
Hi All,
Another question regarding lighting :-) I am trying to create motorcycle headlights that illuminate the road as they travel forward - I have created the following, which seems to work - but with a slightly strange effect... (Please note, you can insert any image in place of "tarmac.jpg" import viz import vizact import viztask import math import random from numpy import * viz.go() #Set the viewpoint's position and orientation so that we'll be able to see our scene. viz.MainView.setPosition( [0,0.8,20 ] ) viz.MainView.setEuler( [-180,4, 0] ) #Disable the default head light. viz.MainView.getHeadLight().disable() # Add directional light source sun_light=viz.addLight() sun_light.position(0,100,-70,1) # Give light sunish color and intensity sun_light.color ([1,1,1]) sun_light.intensity(-1) sun_light.quadraticattenuation(0) ball = viz.add('ball.wrl') ball.appearance(viz.TEXMODULATE) ball.setPosition([ 0 , 10.75 , 0 ]) # Create Road ground = viz.addTexture('tarmac.jpg') road = viz.addTexQuad(viz.WORLD,viz.MainScene,10) # 100m sq quad road.texture(ground) road.setPosition(0,-0.6,0) # road.rotate(90,90,0) road.appearance(viz.TEXGEN) road.appearance(viz.TEXMODULATE) road2=road.copy() road2.rotate(90,90,0) road2.setPosition(0,-0.6,10) #Add a model of a torch and place it in the scene. # Create headlight shape viz.startlayer(viz.POLY_FILL) viz.vertexcolor(1,1,1) Radius = 0.1 NUM_DOTS = 10000.0 for i in range(0, NUM_DOTS): angle= 360.0*(i/NUM_DOTS) x = Radius*math.sin(angle) y = Radius*math.cos(angle) # Put a vertex at each of these, but jump back to zero in between viz.vertex(0,0) viz.vertex(x,y) headlight1 = viz.endlayer() headlight1.color(1,1,1) headlight1.setPosition( [ 0 , 0 , -20 ]) #Add a light for the torch. flash_light = viz.addLight() #Make the light positional. flash_light.position(0,0,0,1) flash_light.intensity(100) #Make this positional light a spot light by limiting its spread. flash_light.spread(80) #flash_light.spotexponent( 10 ) flash_light.constantattenuation(0) flash_light.linearattenuation(1) #flash_light.quadraticattenuation(0) torch = viz.add('art/flashlight.IVE') #Link the light source to the torch. viz.link( headlight1, flash_light) viz.link( headlight1, torch) headlight1.setEuler(0,0,0) headlight1.goto(0,0,15,8, viz.TIME) #headlight1.addAction( vizact.spin( 10,1,0,90, viz.FOREVER ) ) Can anyone shed any light on what is happening here? Best wishes! |
#2
|
|||
|
|||
In the future please insert your code within code tags to preserve the indentation.
I think what you are seeing is that the whole texture quad appears lighted rather than just the small area near the light. Is that correct? A surface has to be tessellated to have differentiated lighting. So you would need to have many smaller texture quads to get that effect. |
#3
|
|||
|
|||
Thanks for the reply Jeff - I decided to try to use the Inifinite Terrain and coat it in a tarmac image in order to increase the tesselation...
#Add a texture and set it to repeat mode. grass = viz.add('tarmac.jpg') grass.wrap(viz.WRAP_S,viz.REPEAT) grass.wrap(viz.WRAP_T,viz.REPEAT) #Add the terrain using the infinte terrain plug-in. terrain = viz.add('InfiniteTerrain.dlc',1,'456',8,1000,400,1 0000) #Texture the terrain. terrain.texture(grass) terrain.command(1,'',0,0) terrain.appearance(viz.TEXMODULATE) However, I am still getting this jagged light effect - almost as if it is passing the light onto one object and then another - just at a faster pace. Is there anyway of smoothing this? Any increase in tesselation value (over 8) for the terrain results in my PC crashing - if an increase is likely to improve this effect, I can find another PC. Thanks - I appreciate your help! |
#4
|
|||
|
|||
For headlights, using the projector plugin will give the best effect. Check out this code and the attached .jpg
Code:
import viz viz.go() model = viz.add('tankmaze.wrl') import projector left = projector.add(viz.add('spotlight.bmp')) left.border(0.3,0.3,0.3) left.translate(-1,1.8,0) left.affect(model) right = projector.add(viz.add('spotlight.bmp')) right.border(0.3,0.3,0.3) right.translate(1,1.8,0) right.affect(model,2) viz.link(viz.MainView, left) viz.link(viz.MainView, right)
__________________
Paul Elliott WorldViz LLC |
#5
|
|||
|
|||
Thanks for the reply, I really do appreciate it - that effect is really quite cool, but sadly, it isn't the viewpoint I was looking for.
The basic paradigm here is that I want individuals to make judgements based on the speed at which vehicles are travelling in night-time conditions. In the attachments, you will see that in Screen Shot 1 - the car appears in full light (although the scene should actually be dark) and in Screen Shot 2, the car appears to be dark (which is correct) - but that is a different issue. Basically (as Screen Shot 3 demonstrates) as the vehicles are approaching the observation point (they are only visible for 0.75s) the light eminating from the headlights onto the group seems to flicker - as if it is lighting up a particular square and then not the next and then coming back on again. Is there a way that I can use this plug in here? Once again, thanks for your time. |
#6
|
|||
|
|||
Instead of linking the projector to the mainview, position it high and point it down.
Code:
light.setPosition([0, 3, 0]) light.setEuler([0, 90, 0])
__________________
Paul Elliott WorldViz LLC |
![]() |
Thread Tools | |
Display Modes | Rate This Thread |
|
|
![]() |
||||
Thread | Thread Starter | Forum | Replies | Last Post |
Lighting Question | new_horizon | Vizard | 12 | 02-24-2011 08:11 AM |
question about NVIDIA 3D vision | Weihua An | Vizard | 5 | 08-02-2010 06:49 AM |
Stereoscopic view question | atamasan | Vizard | 2 | 03-09-2010 09:13 PM |
how to invoke command line question | billjarrold | Vizard | 2 | 01-11-2010 08:51 AM |
General question and question regarding arrays | dan12345 | Vizard | 1 | 01-15-2008 10:15 AM |