surfaceNormal
Definition
-- @/lua/ge/map.lua:502
local function surfaceNormal(p, r)
-- p3
-- \
-- \ r
-- \ r
-- p - - - - p1 | - > y
-- / v
-- / r x
-- /
-- p2
r = r or 2
local hr = 1.2 * r -- calculation is guaranteed to be accurate up to ~ 50 deg (argtan(1.2)) inclination
local p1 = vec3(p.x, p.y + r, p.z + hr)
local p2 = vec3(p.x + 0.8660254037844386 * r, p.y - 0.5 * r, p1.z) -- sin(60) => 0.8660254037844386, cos(60) => 0.5
local p3 = p2:copy()
p3.x = p.x - 0.8660254037844386 * r
p1.z = be:getSurfaceHeightBelow(p1)
p2.z = be:getSurfaceHeightBelow(p2)
p3.z = be:getSurfaceHeightBelow(p3)
-- store the result in p3
if min(p1.z, p2.z, p3.z) + hr < p.z then
p3:set(0, 0, 1)
else
p2:setSub(p3)
p1:setSub(p3)
p3:set(p2.y * p1.z - p2.z * p1.y, p2.z * p1.x - p2.x * p1.z, p2.x * p1.y - p2.y * p1.x) -- p2 x p1
p3:normalize()
end
return p3
end
Callers
@/lua/ge/map.lua
n.normal = surfaceNormal(nPos, radius * 0.5)
end
normal = vec3(),
biNormal = surfaceNormal(p, r * 0.5),
edgeVec = vec3(),
normal = vec3(),
biNormal = surfaceNormal(posOrig, radius * 0.5),
edgeVec = vec3(),
@/lua/ge/extensions/editor/toolUtilities/geom.lua
spline.normals[ctr] = spline.normals[ctr] or vec3(0, 0, 1)
spline.normals[ctr]:set(map.surfaceNormal(nodePos, 1.0))
@/lua/ge/extensions/editor/slotTrafficEditor.lua
nid = nid or getNewNodeName("manual", "")
mapNodes[nid] = {pos = vec3(pos), radius = radius, normal = map.surfaceNormal(pos, radius * 0.5), links = {}}
updateQt = true
local radius = n.radius
n.normal = map.surfaceNormal(nPos, radius * 0.5)
qtNodes:preLoad(nid, quadtree.pointBBox(nPos.x, nPos.y, radius))
@/lua/ge/extensions/editor/scriptAIEditor.lua
nodes[1].dir:set(dirVec)
nodes[1].up:set(map.surfaceNormal(pos, 1))
break
@/lua/ge/extensions/gameplay/police.lua
tempFwd:set(vecY:rotated(rot)) -- expected to be parallel to the road
tempUp:set(map.surfaceNormal(pos, 1))
tempRight:setCross(tempFwd, tempUp)
@/lua/ge/extensions/scenario/raceMarkers/crawlMarker.lua
end
local surfaceNormal = map.surfaceNormal(leftPos, 1)
if surfaceNormal then
end
local surfaceNormal = map.surfaceNormal(rightPos, 1)
if surfaceNormal then
@/lua/ge/extensions/gameplay/traffic.lua
local pos, dir = gameplay_traffic_trafficUtils.finalizeSpawnPoint(spawnData.pos, spawnData.dir, spawnData.n1, spawnData.n2, placeData)
local normal = map.surfaceNormal(pos, 1)
local rot = quatFromDir(vecY:rotated(quatFromDir(dir, normal)), normal)
local newPos, newRot = gameplay_traffic_trafficUtils.finalizeSpawnPoint(spawnData.pos, spawnData.dir, spawnData.n1, spawnData.n2, {legalDirection = true})
newRot = quatFromDir(newRot, map.surfaceNormal(newPos))
respawnVehicle(id, newPos, newRot)
@/lua/ge/extensions/editor/objectToSplineEditor.lua
pos.z = be:getSurfaceHeightBelow(pos + vecUp)
dirVecUp:set(map.surfaceNormal(pos, 1))
end
@/lua/ge/extensions/editor/aiViz.lua
local radius = n.radius
n.normal = n.normal or map.surfaceNormal(nPos, radius * 0.5)
qtNodes:preLoad(nid, quadtree.pointBBox(nPos.x, nPos.y, radius))
@/lua/ge/extensions/gameplay/crawl/boundary.lua
else
terrainNormal = map.surfaceNormal(pos, 1) or vec3(0, 0, 1)
end
@/lua/ge/extensions/editor/trafficManager.lua
-- get the road surface normal at this position
local normal = map.surfaceNormal(spawnPos, radius)
-- lateral direction vector to the surface made by normal and p2p1DirVec
@/lua/ge/extensions/gameplay/traffic/vehicle.lua
roadPos:setCross(tempDirVec, map.surfaceNormal(tempPos))
roadPos:setScaled(radius)