gpt4 book ai didi

javascript - 在 Three.js 中,有没有办法获取附加到对象的 Controller 列表?

转载 作者:行者123 更新时间:2023-12-03 05:56:37 24 4
gpt4 key购买 nike

在 Three.js 中,有没有办法获取附加到对象的 Controller 列表?或者至少有一个连接到该对象的 Controller 。我有一个连接到一个对象的 Controller 。我不希望 TransformController 在该对象上始终可见。我尝试了 trnasformController.enabled = false 但它似乎什么也没做。我将其分离,似乎工作正常,但是如果我单击该对象,我需要一种方法来导航回附加到它的 Controller 。有什么办法可以将其分离吗?我想要做的只是在单击对象后才显示 Controller ,以便可以对其进行修改。 TIA

enter image description here

最佳答案

下面是一个示例代码,用于在选择对象时附加变换控件。然后在按下 Esc 键时分离变换控件。

Javascript:

var renderer
var saphi_mesh
var control
var controls
var pickable = []

function init() {
container = document.createElement("div")
document.body.appendChild(container)



camera = new THREE.PerspectiveCamera(45, window.innerWidth / window.innerHeight, 1, 1000)
camera.position.z = 500
camera.position.y = 50

scene = new THREE.Scene()

var ambientLight = new THREE.AmbientLight(0xbbbbbb);
scene.add(ambientLight);
var gridXZ = new THREE.GridHelper(100, 10, 0xff0000, 0xffffff);
scene.add(gridXZ);

var geometry = new THREE.BoxGeometry(20, 20, 20);

// clone wont work ... seems to retain the same material
var cube1 = new THREE.Mesh(geometry, new THREE.MeshLambertMaterial({
color: 0xff1234
}));
cube1.position.y = 50;
cube1.name = "cube1";

scene.add(cube1);
pickable.push(cube1);

renderer = new THREE.WebGLRenderer()
renderer.setSize(window.innerWidth, window.innerHeight)
control = new THREE.TransformControls(camera, renderer.domElement);
pickable.push(control);
control.addEventListener('change', render);
container.appendChild(renderer.domElement)
renderer.domElement.addEventListener("mousedown", onClick, false)
window.addEventListener("keydown", keydown, false)
}

function animate() {
requestAnimationFrame(animate)
render()
}

function render() {
renderer.render(scene, camera)
}

function keydown(event) {
if (event.keyCode == 27) {
scene.remove(control);
}
}

function onClick(event) {
x = (event.clientX / window.innerWidth) * 2 - 1;
y = -(event.clientY / window.innerHeight) * 2 + 1;
dir = new THREE.Vector3(x, y, -1)
dir.unproject(camera)

ray = new THREE.Raycaster(camera.position, dir.sub(camera.position).normalize())

var intersects = ray.intersectObjects(pickable)
if (intersects.length > 0) {
var SELECTED = intersects[0].object;
scene.add(control);
control.attach(SELECTED);
}
}

init()
animate()

这是 jsfiddle 的工作示例:http://jsfiddle.net/qZh59/3/

希望这对你有帮助,..

关于javascript - 在 Three.js 中,有没有办法获取附加到对象的 Controller 列表?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/39900188/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com