faces
in a flat Array[Float]
# Compute the normals of `faces` in a flat `Array[Float]`
fun normals(faces: Array[ObjFace]): Array[Float] do
var obj_def = obj_def
var normals = new Array[Float]
for face in faces do
# 1st triangle
var count = 0
for e in face.vertices do
var i = e.normal_index
if i == null then
compute_and_append_normal(normals, face)
else
var v = obj_def.normals[i-1]
normals.add v.x
normals.add v.y
normals.add v.z
end
if count == 2 then break
count += 1
end
# If square, 2nd triangle
#
# This may not support all vertices ordering.
if face.vertices.length > 3 then
for e in [face.vertices[0], face.vertices[2], face.vertices[3]] do
var i = e.normal_index
if i == null then
compute_and_append_normal(normals, face)
else
var v = obj_def.normals[i-1]
normals.add v.x
normals.add v.y
normals.add v.z
end
end
end
end
return normals
end
lib/gamnit/depth/more_models.nit:333,2--374,4