terrain normals
Blitz3D Forums/Blitz3D Programming/terrain normals
| ||
hi all... In the current shadow libry I'm working on, creating terrain receivers uses towl meshes. It grabs the terrainheight() to figure out the placement of the vertex... how exactly can I get the normal of the point on the terrain? (to apply to vertexnx#, vertexny# & vertexnz#) I need this to figure out which polygons not to create so the shadows don't appear where there is no light. thankyou for reading :) |
| ||
You could try picking the terrain and then use the returned PickedNX/NY/NZ ? |
| ||
I would do that, but I'm avoiding using "pick" commands, because I think they could get in the way for people who want to use shaKAL, but also want to use pick commands for other things... I used to use them for lame bots looking for wall collisions |
| ||
There 3 ways to get the normal 1. Use Pick (the easiest and most likely fastest if you pick with a dy of 0.1. get terrainY and pick from terrainy - 0.05 with dy = 0.1 :) ) 2. Use collisions 3. Interpolate them through 3 terrain high values doing the normal calculation yourself. (N = (e1 x e2)/|e1 x e2| where e1 = vector from point 1 to 2 and e2 = vector from point 1 to 3) |
| ||
I think option 3 would be the quickest ... you need 3 points to calculate the normal using cross product ...ax# = x1 - x0 ay# = y1 - y0 az# = z1 - z0 bx# = x2 - x1 by# = y2 - y1 bz# = z2 - z1 Nx# = ( ay * bz ) - ( az * by ) Ny# = ( az * bx ) - ( ax * bz ) Nz# = ( ax * by ) - ( ay * bx ) ;only use this part if normals need to be normalised / faster without Ns# = Sqr( Nx * Nx + Ny*Ny + Nz*Nz ) Nx = Nx / Ns Ny = Ny / Ns Nz = Nz / Ns Stevie |