surfaceNormalBelow
Definition
-- @/lua/vehicle/mapmgr.lua:182
local function surfaceNormalBelow(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
p1:set(p.x, p.y + r, p.z + hr)
p2:set(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 = obj:getSurfaceHeightBelow(p1)
p2.z = obj:getSurfaceHeightBelow(p2)
p3.z = obj: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/vehicle/scriptai.lua
dir = vec3(script[1].dir)
up = vec3(script[1].up or mapmgr.surfaceNormalBelow(vec3(script[1])))
dir = p2 - p1; dir:normalize()
up = mapmgr.surfaceNormalBelow(p1)
dir = vec3(script[1].dir)
up = vec3(script[1].up or mapmgr.surfaceNormalBelow(vec3(script[1])))
dir = p2 - p1; dir:normalize()
up = mapmgr.surfaceNormalBelow(p1)
@/lua/vehicle/controller/tech/roadsSensor.lua
for k, v in pairs(coords) do
normals[k] = mapmgr.surfaceNormalBelow(v)
end
@/lua/vehicle/ai.lua
newNode.turnDir:set(0, 0, 0)
newNode.biNormal:setScaled2(mapmgr.surfaceNormalBelow(mapData.positions[newNodeId], mapData.radius[newNodeId] * 0.5), -1)
newNode.normal:set(0, 0, 0)
n2.radiusOrig = getPathNodeRadius(path, i) --mapData.radius[path[i]],
n2.biNormal = -mapmgr.surfaceNormalBelow(mapData.positions[path[i]], mapData.radius[path[i]] * 0.5)
local rad1, rad2 = mapData:getEdgeRadii(path[i], path[i+1])
local biNormal = mapmgr.surfaceNormalBelow(pos1)
local normal = (pos2-pos1):cross(biNormal); normal:normalize()
segC:setAdd2(n1.pos, segVx)
segVz = mapmgr.surfaceNormalBelow(segC, (n1.radiusOrig + n2.radiusOrig) * 0.25); segVz:setScaled(-1)
segVy:setCross(segVz, segVx); segVy:setScaled(0.5 * ego.width / (segVy:length() + 1e-30)) -- 0.5 * (ego.width + 1)
newNode.biNormal = mapmgr.surfaceNormalBelow(newNode.posOrig, radiusOrig * 0.5); newNode.biNormal:setScaled(-1)
local laneLimLeft, laneLimRight = -ego.width * 0.5, ego.width * 0.5
local biNormal = mapmgr.surfaceNormalBelow(ego.pos, ego.width * 0.5); biNormal:setScaled(-1)
local wp, lanes, roadSpeedLimit
local laneLimLeft, laneLimRight = -ego.width * 0.5, ego.width * 0.5
local biNormal = mapmgr.surfaceNormalBelow(ego.pos, ego.width * 0.5); biNormal:setScaled(-1)
local wp, lanes, roadSpeedLimit
local dir = (pos - pos2):normalized()
local up = mapmgr.surfaceNormalBelow(pos)
local rot = quatFromDir(-dir:cross(up):cross(up), up) -- minus sign is due to convention used by safeTeleport
dir = vec3(script[1].dir)
up = vec3(script[1].up or mapmgr.surfaceNormalBelow(vec3(script[1])))
dir = p2 - p1; dir:normalize()
up = mapmgr.surfaceNormalBelow(p1)
@/lua/vehicle/extensions/advancedwheeldebug.lua
local pos = obj:getNodePosition(nodeId) + obj:getPosition()
local normal = mapmgr.surfaceNormalBelow(pos, 0.1)
surfaceUp:setAdd(normal)