UpdateSpotLightVisualizer function
void
UpdateSpotLightVisualizer()
Implementation
void UpdateSpotLightVisualizer(
MeshData md, VM.Vector3 pos, VM.Vector3 dir, double range, double angle) {
final int kSpines = 8;
VM.Vector3 center = pos + dir.normalized() * range;
List<VM.Vector3> points = [pos, center];
VM.Vector3 ortho = GetOrthogonalVector3(dir)
..normalize()
..scale(Math.tan(angle) * range);
for (int i = 0; i < kSpines; i++) {
VM.Vector3 p = ortho.clone()
..applyAxisAngle(dir, i * 2.0 * Math.pi / kSpines)
..add(center);
points.add(p);
}
List<int> faces = [];
for (int i = 1; i < points.length; ++i) {
faces.add(0);
faces.add(i);
}
// funnel
for (int i = 3; i < points.length; ++i) {
faces.add(i - 1);
faces.add(i);
}
faces.add(points.length - 1);
faces.add(2);
// cross
for (int i = 2; i < points.length; ++i) {
if (i % 2 == 0) {
faces.add(1);
faces.add(i);
}
}
md.ChangeVertexData(FlattenVector3List(points));
md.ChangeFaces(faces);
}