我正在为我们的THREE.js应用程序制作正交相机.基本上,该相机将以2D形式向用户呈现场景(用户可以选择在2D和3D相机之间切换).此摄像机将允许平移和缩放到鼠标点.我有平移工作,我有缩放工作,但没有缩放到鼠标点.这是我的代码:
import React from 'react';
import T from 'three';
let panDamper = 0.15;
let OrthoCamera = React.createClass({
getInitialState: function () {
return {
distance: 150,
position: { x: 8 * 12, y: 2 * 12, z: 20 * 12 },
};
},
getThreeCameraObject: function () {
return this.camera;
},
applyPan: function (x, y) { // Apply pan by changing the position of the camera
let newPosition = {
x: this.state.position.x + x * -1 * panDamper,
y: this.state.position.y + y …Run Code Online (Sandbox Code Playgroud) 我有下一个问题。我有一个用 Three.js +orbitControls.js 制作的用于相机处理的项目。有一个场景,上面有一个简单的立方体和相机。我有一个来自orbitControls.js 的相机,当我做鼠标滚轮时,它会朝屏幕中心放大/缩小(默认行为)。我需要修改它,以便将放大/缩小到 3D 对象上的鼠标位置,就像在 3D 编辑器中一样,如 3D Max、搅拌机。
我确实理解逻辑应该是这样的:从您开始缩放的位置获取鼠标的位置,实际上您想要放大的位置,存储该值,放大并获取新的鼠标位置,找到之间的偏移量第一个鼠标位置和当前,并在放大期间将相机移动到该偏移量。但是,它无法正常工作。大多数情况下,我认为这可能是我的相机坐标的问题,以及我想放大的位置。
这是我的代码:
window.onload = function() {
var renderer = new THREE.WebGLRenderer();
var width = 640;
var height = 480;
renderer.setSize( width, height );
var div = document.getElementById('canvas')
div.appendChild( renderer.domElement );
var scene = new THREE.Scene();
camera = new THREE.PerspectiveCamera(
70,
width / height,
0.1,
10000
);
camera.position.set( 0, 10, 10 );
camera.lookAt( scene.position );
control = new THREE.OrbitControls( camera );
var geometry = new THREE.CubeGeometry( 5, 5, 5 ); …Run Code Online (Sandbox Code Playgroud) 我搜索了许多有关堆栈溢出的相关问题,但我找不到这个问题的答案。
我的场景中有一大群动态的 Object3D,并用正交相机正面观察它们。
我想要一个简单的函数,在调用时,它会简单地匹配正交相机的上/左/下/右/缩放属性,以正确适应 Object3D 组。
我尝试了各种方法,但我的代码都不值得发布。我需要从一个全新的角度来看待这个问题(双关语)。我找到了各种其他答案,讨论改变相机的视场,一旦你知道从组的边界框的表面到相机的距离,但我不知道如何用正交相机来实现它,因为(据我尝试过)fov 属性不适用于它(也许它实际上适用,我只是不知道)。
所以我不太喜欢索要代码,但尽管如此,我还是想要一个函数,它可以自动调整正交相机的适当属性,以适应作为参数传递给它的对象,例如:
function fitOrthographicCameraToObject3DGroup(group) {
//implement here (my question)
}
Run Code Online (Sandbox Code Playgroud)