Помог с решением проблемы -
@trushka
решение от
@trushka:
делать таки с одной камерой и скалить Gizmo в зависимости от расстояния до неё. Ну вот, допустим
var base=1000 - расстояние до камеры, при котором Gizmo не скалится
Тогда при движении камеры если s - расстояние до точки просмотра:
Gizmo.scale.x=Gizmo.scale.y=Gizmo.scale.z=s/base;
var v1 = this.camera.position.clone();
var v2 = Gizmo.position.clone();
var len = v1.sub(v2).length();
var v = new THREE.Vector3(1,1,1);
v.multiplyScalar(len/1039); // 1039 - расстояние от камеры до точки просмотра
Gizmo.applyMatrix(obj.mLocal.clone().scale(v));
.....
спустя какое то время пришло понимание что этот код работает несколько не правильно
так как при большом отдалении начинали высыпать
баги фишки артефакты неизвестного характера, разбираться сними честно не хотелось. Собрав информацию с других ресурсов стало понятно, как решить данный вопрос.
собственно код:
var cameraPos = this.world.camera.position.clone();
var gizmoPos = E.select.mLocal.getPosition().clone();
cameraPos.sub( ( cameraPos.clone().sub( gizmoPos ) ).normalize().multiplyScalar( 1000 ) );
немного прокомментирую, находим направление камеры на Gizmo
так:
( cameraPos.clone().sub( gizmoPos ) ).normalize()
увеличиваем результат в 1000 раз
так:
.multiplyScalar( 1000 ) // это кстати удаление Gizmo от камеры
и вычитаем результат из позиции камеры.
cameraPos.sub( ... );
суть метода заключается в банальном удерживании камеры на равном расстоянии(1000) от камеры.
У меня все, благодарю за помощь.