Reputation: 803
I add some .fbx models loaded from url and i want to add a transform controls to to move and rotate them.
var transformControls = new THREE.TransformControls(camera3d, renderer3d.domElement);
transformControls.addEventListener('change', renderer3d);
console.log(object);
try {
transformControls.attach(object);
}
catch (err) {
console.log(err);
}
scene3d.add(transformControls);
transformControls.addEventListener('mouseDown', function () {
controls3d.enabled = false;
});
transformControls.addEventListener('mouseUp', function () {
controls3d.enabled = true;
});
the problem is that the move object doesn't appear and the listeners doesn't work...
i have created this fiddle : https://jsfiddle.net/qnv4ah5c/9/
Upvotes: 0
Views: 4610
Reputation: 6558
Two things to note in your fiddle.
function render
is missingrenderer
object to transformControls.addEventListener('change', renderer);
instead of render
functionBasically render()
function will handle the rendering of the transform controls. That's why it is missing and if you see in the console of your fiddle you will notice error when you hover the 3d object.
var camera, scene, renderer;
var geometry, material, mesh;
init();
animate();
function init() {
camera = new THREE.PerspectiveCamera(70, window.innerWidth / window.innerHeight, 0.01, 10);
camera.position.z = 1;
scene = new THREE.Scene();
geometry = new THREE.BoxGeometry(0.2, 0.2, 0.2);
material = new THREE.MeshNormalMaterial();
renderer = new THREE.WebGLRenderer({ antialias: true });
renderer.setSize(window.innerWidth, window.innerHeight);
document.body.appendChild(renderer.domElement);
mesh = new THREE.Mesh(geometry, material);
scene.add(mesh);
var transformControls = new THREE.TransformControls(camera, renderer.domElement);
transformControls.addEventListener('change', render);
try {
transformControls.attach(mesh);
} catch (err) {
console.log(err);
}
scene.add(transformControls);
}
function animate() {
requestAnimationFrame(animate);
mesh.rotation.x += 0.01;
mesh.rotation.y += 0.02;
renderer.render(scene, camera);
}
function render() {
renderer.render(scene, camera);
}
.as-console {
display: none !important;
}
<script src="//cdn.rawgit.com/mrdoob/three.js/master/build/three.min.js"></script>
<script src="https://threejs.org/examples/js/controls/TransformControls.js"></script>
<script src="https://threejs.org/examples/js/libs/inflate.min.js"></script>
<script src="https://threejs.org/examples/js/loaders/FBXLoader.js"></script>
Upvotes: 2