Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/three.js/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Three.js 三个js-移动旋转轴_Three.js - Fatal编程技术网

Three.js 三个js-移动旋转轴

Three.js 三个js-移动旋转轴,three.js,Three.js,我使用threejs创建了一个简单的圆柱体对象,并在z轴上旋转它。对象围绕中心轴旋转,圆柱体的两端围绕位于圆柱体中心的轴旋转 如何使其在不同的轴上旋转?我想让圆柱体的一端在一个固定点上旋转,而另一端在圆周上旋转。我的代码如下 init(); function init() { renderer = new THREE.WebGLRenderer({ canvas: document.getElementById('myCanvas'), antialias: true }); r

我使用threejs创建了一个简单的圆柱体对象,并在z轴上旋转它。对象围绕中心轴旋转,圆柱体的两端围绕位于圆柱体中心的轴旋转

如何使其在不同的轴上旋转?我想让圆柱体的一端在一个固定点上旋转,而另一端在圆周上旋转。我的代码如下

init();
function init() {
    renderer = new THREE.WebGLRenderer({ canvas: document.getElementById('myCanvas'), antialias: true });
    renderer.setClearColor(0xeaebed);
    renderer.setPixelRatio(window.devicePixelRatio);
    renderer.setSize(window.innerWidth, window.innerHeight);
    camera = new THREE.PerspectiveCamera(5, window.innerWidth / window.innerHeight, 0.1, 4000);
    scene = new THREE.Scene();
    //LIGHTS
    var light = new THREE.AmbientLight(0xffffff, 1);
    scene.add(light);
    var light1 = new THREE.PointLight(0xffffff, 0.3);
    scene.add(light1);
    //Gun holder
    var gunHolder = new THREE.Object3D();
    var gunHolderColour = 0x0f4207;
    var gunHolderBaseCylinderGeometry = new THREE.CylinderGeometry(10, 10, 50, 32);
    var gunHolderBaseCylinderMaterial = new THREE.MeshStandardMaterial({
        color: gunHolderColour,
        metalness: 0.5,
        roughness: 0.5
    });
    var gunHolderBaseCylinderMesh = new THREE.Mesh(gunHolderBaseCylinderGeometry, gunHolderBaseCylinderMaterial);
    gunHolderBaseCylinderMesh.position.set(0, -8, -3000);
    scene.add(gunHolderBaseCylinderMesh);
    requestAnimationFrame(render);
    function render() {
        gunHolderBaseCylinderMesh.rotation.z += 0.01;
        renderer.render(scene, camera);
        requestAnimationFrame(render);
    }

}

您可以使用几何图形的
.translate()
方法:

var gunHolderBaseCylinderGeometry = new THREE.CylinderGeometry(10, 10, 50, 32); // height is 50
gunHolderBaseCylinderGeometry.translate(0, 25, 0); // move upwards at half of height, 25
renderer=new THREE.WebGLRenderer({
反别名:对
});
renderer.setClearColor(0xeaebed);
renderer.setPixelRatio(window.devicePixelRatio);
renderer.setSize(window.innerWidth、window.innerHeight);
document.body.appendChild(renderer.doElement);
摄像头=新的三个透视摄像头(5,window.innerWidth/window.innerHeight,0.14000);
场景=新的三个。场景();
//灯光
var灯光=新的三个环境灯光(0xffffff,1);
场景。添加(灯光);
var light1=新的三点光源(0xffffff,0.3);
场景。添加(light1);
//持枪人
var gunHolder=new THREE.Object3D();
var GunholderColor=0x0f4207;
var gunholderbascylindergeometry=新的三个圆柱几何体(10,10,50,32);
枪柄二圆柱几何体.平移(0,25,0);
var gunHolderBaseCylinderMaterial=新的三点网格标准材质({
颜色:枪托颜色,
金属度:0.5,
粗糙度:0.5
});
var gunHolderBaseCylinderMesh=新的三点网格(gunHolderBaseCylinderGeometry,gunHolderBaseCylinderMaterial);
枪托二圆柱网格位置设置(0,-8,-3000);
场景.添加(gunHolderBaseCylinderMesh);
请求动画帧(渲染);
函数render(){
请求动画帧(渲染);
枪托二圆柱网格旋转z+=0.01;
渲染器。渲染(场景、摄影机);
}
正文{
溢出:隐藏;
保证金:0;
}

感谢您的回答,它可以工作:)我看到Object3D上没有translate功能。平移X、Y、Z不会移动原点。如何移动复杂Object3D对象的原点?@Sibi不客气)实际上,这取决于您想要实现什么。对于您所问的问题,有几种解决方案。