作者热门文章
- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
我有一个 three.js 场景,想知道视口(viewport)的 3D 边界。
例如,假设我有一个 500 像素宽和 1000 像素高的 Canvas 。我的相机正在查看位置 { 0, 0, 0 }
并且在位置 { 0, 0, 100 }
;
我的相机永远不会移动。
假设我有一个位于 { 0, 0, 0 }
的对象.我需要能够将该对象移动到可视区域内的各个点(在相机视野内)。例如,我如何计算相机视野的上/左 Angular ?另外,我如何计算从左侧开始的 20% 和从相机视野顶部向下的 10%?
这是我的相机对象:
{
"object": {
"uuid": "E26C5F88-CD17-45F8-A492-F3DD704949BF",
"type": "PerspectiveCamera",
"matrix": [1, 0, 0, 0, 0, 1, 0, 0, 0, 0, 1, 0, 0, 0, 100, 1],
"zoom": 1,
"fov": 50,
"aspect": 0.625,
"near": 0.1,
"far": 1000
}
}
最佳答案
要将对象从左侧放置 20%,从顶部向下放置 10%,您可以使用以下内容:
var left = 0.2;
var top = 0.1;
var depth = 0.7; // from -1 to 1, depends how far into the scene you want the object, -1 being very close, 1 being the furthest away the camera can see
object.position.set( -1 + 2 * left, 1 - 2 * top, depth ).unproject( camera );
var canvas = document.getElementById('canvas');
var scene = new THREE.Scene();
var renderer = new THREE.WebGLRenderer({canvas: canvas, antialias: true});
var camera = new THREE.PerspectiveCamera(45, canvas.clientWidth / canvas.clientWidth, 1, 1000);
var clock = new THREE.Clock();
var geometry = new THREE.BoxGeometry(1, 1, 1);
var material = new THREE.MeshBasicMaterial({color: '#f00', wireframe: true});
var box = new THREE.Mesh(geometry, material);
scene.add(box);
var period = 5;
var top = 0.3; // 30%
var left = 0.2; // 20%
var depth = 0.7;
render();
function render() {
requestAnimationFrame(render);
if (canvas.width !== canvas.clientWidth || canvas.height !== canvas.clientHeight) {
renderer.setSize(canvas.clientWidth, canvas.clientHeight, false);
camera.aspect = canvas.clientWidth / canvas.clientHeight;
camera.updateProjectionMatrix();
}
box.position.set(-1 + 2 * left, 1 - 2 * top, depth).unproject(camera);
box.rotation.y += clock.getDelta() * 2 * Math.PI / period;
renderer.render(scene, camera);
}
html, body, canvas {
margin: 0;
padding: 0;
width: 100%;
height: 100%;
display: block;
}
<script src="//cdnjs.cloudflare.com/ajax/libs/three.js/r73/three.min.js"></script>
<canvas id="canvas"></canvas>
关于javascript - 如何在three.js中确定相机视野的3D边界,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/34864578/
有人知道新款 iPhone4 摄像头的视野值吗?我正在做一些 AR 应用程序,我想知道后置摄像头的水平和垂直角度。 谢谢! 最佳答案 如果传感器高 3.39 毫米(引用横向模式),则一半为 1.695
我在我的应用程序中使用 SceneKit View 创建了一个 3D 世界。 我需要支持所有 iOS 设备和方向。 我不懂 3D 数学、矩阵,也不太懂相机之类的东西,但我已经构建了一个 3D 世界,并
我目前正在开发增强现实应用程序。目标设备是光学透视 HMD,我需要校准其显示器以实现虚拟对象的正确注册。我用过那个implementation of SPAAM对于 android 来说,结果对于我的
我是一名优秀的程序员,十分优秀!