Var*_*yan 6 javascript three.js
我试图让我的第二个对象位于我的第一个已旋转对象的正后方(-距离)。
假设我有 2 个对象:
var object1 = new THREE.Object3D();
object1.position.set(5, 10, 53);
object1.rotateX(1);
object1.rotateY(1.5);
var distance = 20; //place object2 20 units behind object1
var object2 = new THREE.Object3D();
object2.position.set( /*position object2 right behind object1 -distance */);
object2.lookAt(object1);
Run Code Online (Sandbox Code Playgroud)
在这种情况下,如何object2直接将其放置在object1已旋转的后面?
视觉 2D 示例。不按比例
这样做:
let camera, scene, renderer;
init();
animate();
function init() {
camera = new THREE.PerspectiveCamera(70, window.innerWidth / window.innerHeight, 0.1, 100);
camera.position.set(5, 10, 55);
scene = new THREE.Scene();
const geometry = new THREE.PlaneGeometry();
const material = new THREE.MeshNormalMaterial();
const mesh1 = new THREE.Mesh(geometry, material);
mesh1.position.set(5, 10, 53);
mesh1.rotateX(1);
mesh1.rotateY(1.5);
scene.add(mesh1);
const mesh2 = new THREE.Mesh(geometry, material);
scene.add(mesh2);
const v1 = new THREE.Vector3(0, 0, 1).applyQuaternion(mesh1.quaternion);
mesh2.quaternion.copy(mesh1.quaternion);
mesh2.position.copy(mesh1.position).add(v1.multiplyScalar(-2));
renderer = new THREE.WebGLRenderer({
antialias: true
});
renderer.setSize(window.innerWidth, window.innerHeight);
document.body.appendChild(renderer.domElement);
const controls = new THREE.OrbitControls(camera, renderer.domElement);
controls.target.copy(mesh1.position);
controls.update();
}
function animate() {
requestAnimationFrame(animate);
renderer.render(scene, camera);
}Run Code Online (Sandbox Code Playgroud)
body {
margin: 0;
}Run Code Online (Sandbox Code Playgroud)
<script src="https://cdn.jsdelivr.net/npm/three@0.128/build/three.js"></script>
<script src="https://cdn.jsdelivr.net/npm/three@0.128/examples/js/controls/OrbitControls.js"></script>Run Code Online (Sandbox Code Playgroud)
这个想法是应用 的旋转object1并object2用它来计算 后面的位置object1。这是通过将旋转应用于向量,然后按距离值(在上述情况下-2)缩放,然后添加到object1的位置值来完成的。
| 归档时间: |
|
| 查看次数: |
4978 次 |
| 最近记录: |