CameraHelper constructor
CameraHelper(
- Camera camera
camera -- The camera to visualize.
This create a new CameraHelper for the specified camera.
Implementation
factory CameraHelper(Camera camera) {
final geometry = BufferGeometry();
final material = LineBasicMaterial.fromMap({"color": 0xffffff, "vertexColors": true, "toneMapped": false});
List<double> vertices = [];
List<double> colors = [];
Map<String, dynamic> pointMap = {};
// colors
final colorFrustum = Color.fromHex32(0xffaa00);
final colorCone = Color.fromHex32(0xff0000);
final colorUp = Color.fromHex32(0x00aaff);
final colorTarget = Color.fromHex32(0xffffff);
final colorCross = Color.fromHex32(0x333333);
void addPoint(String id, Color color) {
vertices.addAll([0, 0, 0]);
colors.addAll([color.red, color.green, color.blue]);
if (pointMap[id] == null) {
pointMap[id] = [];
}
pointMap[id].add(vertices.length ~/ 3.0 - 1);
}
void addLine(String a, String b, Color color) {
addPoint(a, color);
addPoint(b, color);
}
// near
addLine('n1', 'n2', colorFrustum);
addLine('n2', 'n4', colorFrustum);
addLine('n4', 'n3', colorFrustum);
addLine('n3', 'n1', colorFrustum);
// far
addLine('f1', 'f2', colorFrustum);
addLine('f2', 'f4', colorFrustum);
addLine('f4', 'f3', colorFrustum);
addLine('f3', 'f1', colorFrustum);
// sides
addLine('n1', 'f1', colorFrustum);
addLine('n2', 'f2', colorFrustum);
addLine('n3', 'f3', colorFrustum);
addLine('n4', 'f4', colorFrustum);
// cone
addLine('p', 'n1', colorCone);
addLine('p', 'n2', colorCone);
addLine('p', 'n3', colorCone);
addLine('p', 'n4', colorCone);
// up
addLine('u1', 'u2', colorUp);
addLine('u2', 'u3', colorUp);
addLine('u3', 'u1', colorUp);
// target
addLine('c', 't', colorTarget);
addLine('p', 'c', colorCross);
// cross
addLine('cn1', 'cn2', colorCross);
addLine('cn3', 'cn4', colorCross);
addLine('cf1', 'cf2', colorCross);
addLine('cf3', 'cf4', colorCross);
geometry.setAttributeFromString('position',Float32BufferAttribute.fromList(vertices, 3, false));
geometry.setAttributeFromString('color', Float32BufferAttribute.fromList(colors, 3, false));
CameraHelper cameraHelper = CameraHelper.create(geometry, material);
cameraHelper.camera = camera;
cameraHelper.camera.updateProjectionMatrix();
cameraHelper.matrix = camera.matrixWorld;
cameraHelper.matrixAutoUpdate = false;
cameraHelper.pointMap = pointMap;
cameraHelper.update();
return cameraHelper;
}