Drag On Wall

by black strings

HTML

<script src="https://threejs.org/build/three.min.js"></script>
<script src="https://threejs.org/examples/js/controls/OrbitControls.js"></script>

CSS

body {
  overflow: hidden;
  margin: 0;
}

JavaScript

var scene = new THREE.Scene();
var axesHelper = new THREE.AxesHelper( 20 );
var windowAxesHelper = new THREE.AxesHelper( 20 );
scene.add( axesHelper );
var camera = new THREE.PerspectiveCamera(60, window.innerWidth / window.innerHeight, 1, 1000);
camera.position.set(-5, 5, 5);
var renderer = new THREE.WebGLRenderer({
  antialias: true
});
renderer.setSize(window.innerWidth, window.innerHeight);
document.body.appendChild(renderer.domElement);

var controls = new THREE.OrbitControls(camera, renderer.domElement);

var light = new THREE.DirectionalLight(0xffffff);
light.position.set(3, 4, 1);
//light.position.setScalar(3);
var lightMesh = new THREE.BoxGeometry(1,1,1);
var lightBox = new THREE.Mesh(lightMesh);
light.add(lightBox);
//light.setRotationZ(Math.PI / 2);
scene.add(light);

scene.add(new THREE.AmbientLight(0x404040));

var building = new THREE.Mesh(new THREE.BoxGeometry(5, 2, 1), new THREE.MeshLambertMaterial({
  color: "teal"
}));
building.position.y = 1;
scene.add(building);

var building2 = new THREE.Mesh(new THREE.BoxGeometry(5, 2, 1), new THREE.MeshLambertMaterial({
  color: "teal"
}));
building2.position.y = 1;
building2.position.x = -3;
building2.position.z = 2;
building2.rotation.y = Math.PI / 2;
scene.add(building2);

var _window = new THREE.Mesh(new THREE.BoxGeometry(1, 1.5, 0.25), new THREE.MeshLambertMaterial({
  color: "brown"
}));
_window.geometry.translate(0, 0, 0.125);
_window.position.set(0, 0.75,0.5);
_window.geometry.applyMatrix(new THREE.Matrix4().makeTranslation(0, 0, 0));
_window.add(windowAxesHelper);
scene.add(_window);

var raycaster = new THREE.Raycaster();
var mouse = new THREE.Vector2();
var intersects;
var windowIntersects;
var wallIntersects;
var normalMatrix = new THREE.Matrix3();
var originalNormalMatrix = new THREE.Matrix3();
var worldNormal = new THREE.Vector3();
var lookAtVector = new THREE.Vector3();
var dragging = false;
var offset;
var originalOffset;
var prevRotationX = _window.rotation.x;
var prevRotationY =...